如何通过ndk-build命令包含Android源代码来构建jni代码

时间:2018-06-23 09:01:39

标签: android android-ndk java-native-interface native

我是android原生开发的新手。现在必须尝试构建so模块,并且可以通过Java代码调用它。

由c ++编写的代码尝试与android活页夹进行交互,并获得如下所示的服务:

android::sp<android::IServiceManager> sm = android::defaultServiceManager();
android::sp<android::IBinder> binder;
android::sp<IWifiService> wifi;
binder = sm->getService(android::String16(XXX_SERVICE));

然后我用C ++代码而不是Java控制wifi服务。

我从互联网上的一些代码中提取并尝试将我的.so

现在我要使用android源程序构建

我提取android源并将jni文件夹移动到虚拟机中的Ubuntu系统中的package / apps中

我执行命令mm

[ 16% 1/6] target thumb C++: interact <= packages/apps/interact/interact_service_impl.cpp
[ 33% 2/6] target SharedLib: interact (out/target/product/generic/obj/SHARED_LIBRARIES/interact_intermediates/LINKED/interact.so)
[ 50% 3/6] target Symbolic: interact (out/target/product/generic/symbols/system/lib/interact.so)
[ 66% 4/6] target Strip (mini debug info): interact (out/target/product/generic/obj/SHARED_LIBRARIES/interact_intermediates/interact.so)
[ 83% 5/6] Install: out/target/product/generic/system/lib/interact.so
[100% 6/6] build out/target/product/generic/obj/SHARED_LIBRARIES/interact_intermediates/interact.so.toc

我将out/target/product/generic/system/lib/interact.so移至我的Android文件夹libs/armeabi-v7a/并重命名为libinteract.so

然后

我构建了apk文件并在真正的手机中调试,然后出现以下错误:

  

06-23 16:55:16.115 20996-20996 /?电子/艺术:   dlopen(“ / data / app / com.xxx.interact-1 / lib / arm / libinteract.so”,   RTLD_LAZY)失败:dlopen失败:空/缺少DT_HASH   “ libinteract.so”(使用--hash-style = gnu?构建)06-23 16:55:16.118   20996-20996 /? E / AndroidRuntime:致命异常:main                                                      流程:com.xxx.interact,PID:20996                                                      java.lang.UnsatisfiedLinkError:dlopen失败:空/缺少DT_HASH   在“ libinteract.so”中(使用--hash-style = gnu?构建)                                                          在java.lang.Runtime.loadLibrary(Runtime.java:372)                                                          在java.lang.System.loadLibrary(System.java:988)                                                          在com.xxx.interact.MainActivity(MainActivity.java:13)                                                          在java.lang.reflect.Constructor.newInstance(本机方法)

有人能建议我做错了什么以及正确的做法是什么吗?

0 个答案:

没有答案