我是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(本机方法)
有人能建议我做错了什么以及正确的做法是什么吗?