その際、サービスをSDKのような形で提供したいと考えているのですが、
(要するにソース公開を行いたくないのです)
そのようなことは可能でしょうか?
可能であれば、どのような手順で提供すればよろしいでしょうか?
参考になるURL等ありましたら、ご教授いただければと思います。
よろしくお願いします。
以上です。ご参考になれば幸いです。
------------------------------------------
EGAWA Takashi
2010年2月23日18:55 55555 <tachi...@gmail.com>:
> --
> このメールは Google グループのグループ「Android-SDK-Japan」の登録者に送られています。
> このグループに投稿するには、android-...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-sdk-ja...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-sdk-japan?hl=ja からこのグループにアクセスしてください。
>
>
江川さんのメールに補足です。
Androidでサービスを別のアプリケーションとしてインストールする場合、
サービスの種類によって、大きく二通りの方法があります。
一つ目は、Intentに応じて起動するアプリとして実装する方法です。
例えば、「QRコードリーダー」というアプリは、他のアプリからの要求に応
じて起動して、カメラからQRコードを読み込んで、結果のみを呼び出し元
(サードパーティ)のアプリに返します。
この仕組みによって、サードパーティのアプリは、QRコードリーダーを独自
で実装したり、ライブラリとして同梱したりすることなく、QRコードを読み
取った結果を処理することが出来ます。
このように、他のアプリが必要とする特定の処理や機能を自分のアプリで請け
負いたい場合には、Intentで呼び出し可能に設定することで対応出来ます。
二つ目は、文字通りサービスとして実装する方法です。サービスと言っても、
ここではAndroidのコンポーネントとしての"Service"を限定して指している事に
注意して下さい。
画面を持たないServiceは、画面(Activity)から接続して、情報を入力した
り、処理結果を画面に返したり(コールバック)出来ます(これは、AIDLと言う
仕組みを使って実現します)。
通常、Serviceに接続できるのは同じアプリケーションに属する
画面(Activity)やServiceに限定されています。しかし、あらかじめ公開を指定
しておけば、他のアプリケーションのコンポーネントからサービスに接続して、
情報を入力したり、コールバックを取得できます。
55555さんの考えるサービスそれ自体が画面を持たず、バックグラウンドで処
理する性質の場合。また、必要に応じて他のアプリ(サードパーティ製)からの
接続を受けて情報の入出力を行いたい場合などは、こちらの方法が合っていると
思います。
--
Keiji,
ml_an...@c-lis.co.jp
Javaだとどうしても逆コンパイル出来るツールがあり、ソースの復元は容易ですよね。
難読化ツールもありますが限度があるでしょうし。Javaがサーバサイドで使われる割にはクライアントであまり使われない要因の一つかと思います。
他アプリとのやりとりは江川さん、有山さんのおっしゃる通りにJava側で定義するとして、メインロジックをJNI経由でC/C++で実装するのもあ
りかなと。
あと実際には試していないのでパーミッションの問題で出来ないかもしれませんが、Native側でServiceManagerに
addServiceし、Binder通信経由でJava-Nativeのインターフェースとすることも考えられます。あまり大きなデータのやりとりは
出来ないでしょうが。
55555です。
いろいろアドバイス等ありがとうございます。
現状は、テスト用Activityと提供したいと考えている
androidのserviceを組み込んだアプリケーションを
作成して、開発を実施しています。
逆コンパイル等の危険もありますが、一応serviceにおいて
ネットワーク通信をする機能を考えているので、あまり接続先の
URL等をさらしたくないのでこのような方式を検討しています。
イメージとしては、
画面側のアプリケーションから
・サービスの起動
・メソッドをコール→サービスが通信を行い結果をアプリケーションに戻す
・アプリケーション側で結果に応じた処理の実施
・サービスの終了
という流れで考えています。
懸念している内容としては、
1.serviceのみでビルドが可能なのかどうか
2.aidlファイルを含めた提供方法
3.service側が条件を満たした場合のみ通信を行うので、通信の開始時と
終了時にコールバック処理を行いたいのですが、serviceのみの提供の
場合はどのようにすればよいのか
> 通常、Serviceに接続できるのは同じアプリケーションに属する
> 画面(Activity)やServiceに限定されています。しかし、あらかじめ公開を指定
> しておけば、他のアプリケーションのコンポーネントからサービスに接続して、
> 情報を入力したり、コールバックを取得できます。
通常は、「同じアプリケーションに属する」ということが接続条件なんですね。
「公開を指定」というのは、AndroidManifest.xmlに設定が必要ということでしょうか?
引き続き、お時間がある時などにでも、アドバイスをいただければ幸いです。
よろしくお願いします。
> 1.serviceのみでビルドが可能なのかどうか
可能です。
> 2.aidlファイルを含めた提供方法
aidlを保存したときにgenディレクトリに自動生成されたインタフェースを渡せばOKです。
> 3.service側が条件を満たした場合のみ通信を行うので、通信の開始時と
> 終了時にコールバック処理を行いたいのですが、serviceのみの提供の
> 場合はどのようにすればよいのか
ServiceとActivityとの間はaidlで定義したやり取りが出来るので、それで実現すればよいと思います。
別アプリではないですが、Serviceでコールバックするサンプルが少し前のポストにあります。
別アプリであったとしても同じことが出来ます。
http://groups.google.co.jp/group/android-sdk-japan/browse_thread/thread/aa108de846a8d089
もし宜しければご参考になさって下さい。
------------------------------------------
EGAWA Takashi
2010年2月24日11:47 55555 <tachi...@gmail.com>:
55555です。
お世話になっております。
懸念点への的確なご回答、ありがとうございました。
回答をもとに、実装を進めていきたいと思います。
また不明な点等が出た場合は、質問をするかもしれませんが、
その際にもよろしくお願いします。