Androidアプリにネイティブサービス(クロスコンパイルされたARMバイナリまたはLinuxスクリプト)と通信させようとしていますが、ソケットを使用してこれを実行できるかどうか疑問に思っていますか?
基本的に、ネイティブサービスはinit時に実行され、アプリがデータを送信するのを待ってから、他の処理を実行します。
これは可能ですか?Androidアプリにはこれを行うためのroot権限が必要ですか?
ありがとう。
はい、可能です。いいえ、アプリには特別な許可は必要ありません。UNIXドメインソケットの場合は、インターネットの許可も必要ありません。
特別な許可が必要になるのは、サービスを起動する場所だけです。基本的に、Androidにそのプロセスをそのままにしておくように指示する、または自動再起動するように設定する、oomkiller値を指定する必要があります。そうしないと、リソースに制約のあるAndroidシステムが、特定の正当なアクティビティやサービスにリンクされていないように見えるミステリープロセスを停止させる可能性があります。
もちろん、よりAndroidスタイルの統合手段は、既存のAndroidサービスのようにサービスを実装することです。つまり、クライアントプロセスで実行され、Binder IPCを介して特別なプロセスで実行されるサービスにプッシュするスタブAPIを使用します(かなりおそらくシステムプロセス)。これにより、既存のパッケージ/マニフェスト許可スキームを使用して、サービスへのアクセスを簡単に規制できる場合もあります。しかし、それは最終的には文体的なものであり、おそらくある程度はGoogleにデバイスを受け入れさせることに関連していますが、それが機能するものを作成する唯一の方法ではありません。