Моя основная задача — создать нативный сервис в Android, а затем написать простую нативную программу для его тестирования. Допустим, я хочу написать простой сервис, который возвращает мне сумму 2 целых. Я должен использовать связующие, чтобы поговорить с ним из программы, я пытался гуглить, но не могу найти точный пример. Мне нужно знать, как создать собственный сервис и найти его в программе, а также, если необходимо, в Java.
Если вы создаете обычное приложение Android с использованием NDK, вы не можете использовать Binder, потому что он не является частью API NDK.
Посмотрите в NDK docs / STABLE-APIS.html полный список стабильных API, а в этой теме — явный комментарий Дэвида Тернера (сопровождающего NDK) о том, что Binder не поддерживается API.
https://groups.google.com/forum/?fromgroups=#!topic/android-ndk/1QmVRrNckfM
Ваши варианты:
Service
и средства AIDL Android SDK. Если вы хотите объединить это с нативным кодом, вы можете вызывать Java из нативного кода, используя JNI.Решение, которое я нашел, состоит в том, чтобы использовать связующие в нативном и использовать
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
После изучения и написания кода @ Android NDK я обнаружил, что API связующего НЕ доступно в Android NDK.
И даже если вы используете Android с открытым исходным кодом для вызова API Binder, возможно, вы получите доступ запрещен из-за проверки безопасности связующего.
Здесь, если я хочу добавить сервис в Системный сервис, мне нужна группа пользователей системного уровня. Подробные коды вы можете найти https://github.com/qianjigui/android_system_service_example. Он содержит клиент и сервис уровня C и Java, но вам нужно разрешение системы.