我的基本任务是建立在Android的原生服务,然后编写一个简单的本地程序进行测试。 可以说,我想要写一个简单的服务,回报我的2个整数总和。 我不得不使用粘合剂从程序对它说话,我曾尝试谷歌左右,但我不能找到一个精确的例子。 我需要知道如何创建一个本地服务,并发现它在程序中,如果需要在Java中也。
Answer 1:
如果您正在创建使用NDK一个正常的Android应用程序,因为它不是NDK的API的一部分,你不能使用活页夹。
看在NDK文档/稳定APIS.html稳定的API的完整列表,而这个线程由大卫·特纳(NDK的维护者),其粘合剂是不支持的API明确的评论。
https://groups.google.com/forum/?fromgroups=#!topic/android-ndk/1QmVRrNckfM
你的选择是:
- 使用IPC的一些其他形式的本地代码 - 例如UNIX域套接字
- 做到这一点在Java中,使用正常
Service
和Android SDK的AIDL设施。 如果你想这跟原生代码结合您可以最多使用JNI本机代码调用到Java。 - (不推荐)复制从Android开源项目相关的库和头; 建立到您的NDK项目; 并使用API。 然而,这不支持的,而且极有可能打破在未来版本中您的应用程序,因为谷歌没有义务维持在这样的图书馆兼容性(而且常常不)。 这也是非常困难的,因为你需要找到一些方法来注册服务,使得客户端能够找到它。
Answer 2:
我找到了解决办法是使用粘合剂在本地和使用
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
Answer 3:
学习和编码@的Android NDK后,我发现粘结剂API是不是在Android的NDK可用。 即使你使用Android开源用于调用API粘结剂,也许你会得到许可拒绝 ,因为粘结剂安全检查。
在这里,如果我想要添加到系统服务的服务,我需要一个系统级别的用户组。 详细代码,你可以找到https://github.com/qianjigui/android_system_service_example 。 它包含了C和Java级别的客户端和服务,但您需要的系统权限。
文章来源: How to Create a android native service and use binder to communicate with it?