如何创建一个Android原生服务和使用粘结剂与它沟通?(How to Create a andro

2019-07-17 23:36发布

我的基本任务是建立在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?