私の基本的なタスクは、Androidでネイティブサービスを作成し、それをテストする簡単なネイティブプログラムを作成することです。 2つの整数の合計を返す単純なサービスを書きたいとしましょう。プログラムからそれと話すにはバインダーを使用する必要があります。グーグルで検索しようとしましたが、正確な例が見つかりません。ネイティブサービスを作成してプログラムで見つける方法と、必要に応じてJavaでも見つける方法を知る必要があります。
私が見つけた解決策は、ネイティブでバインダーを使用し、
defaultServiceManager()->addService(
String16("TestService"),new CalcService());
バインダーを使用し、クライアント側で以下を使用します。
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder = sm->getService(String16("TestService"));
これを行う方法の例をここに見つけました: https://github.com/gburca/BinderDemo/blob/master/binder.cpp
NDKを使用して通常のAndroidアプリケーションを作成している場合、バインダーはNDK APIの一部ではないため使用できません。
NDK docs/STABLE-APIS.htmlで安定したAPIの完全なリストを確認し、このスレッドで、BinderはサポートされているAPIではないというDavid Turner(NDKメンテナー)による明示的なコメントを探してください。
https://groups.google.com/forum/?fromgroups=#!topic/Android-ndk/1QmVRrNckfM
オプションは次のとおりです。
Service
およびAIDL機能を使用して、Javaで実行します。これをネイティブコードと組み合わせる場合は、JNIを使用してネイティブコードから最大Javaを呼び出すことができる場合があります。@ Android NDKを調査してコーディングした後、バインダーAPIは[〜#〜]ではない[〜#〜]Android NDKで利用できます。また、AndroidバインダーAPIを呼び出すためのオープンソースを使用している場合でも、バインダーのセキュリティチェックのため、アクセスが拒否されました。
ここで、システムサービスにサービスを追加する場合は、システムレベルのユーザーグループが必要です。あなたが見つけることができる詳細コード https://github.com/qianjigui/Android_system_service_example 。 CとJava=レベルのクライアントとサービスが含まれていますが、システム権限が必要です。