我在Eclipse中有一个项目,它使用CDT和ADT混合使用本机代码和Java代码。它非常简单 - 演示项目,就像android-ndk-r7 / samples / hello-jni
一样我的Android.mk(在/ jni文件夹中)是:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS := -llog
LOCAL_MODULE := hlsdrm
LOCAL_SRC_FILES := hlsdrm.cpp
include $(BUILD_SHARED_LIBRARY)
一切都很好,我可以通过
加载hlsdrm库System.loadLibrary("hlsdrm");
并调用本机函数。但库文件放在哪里?任何项目文件夹中都没有libhlsdrm.so共享库。我可以阅读,它应该创建一个文件夹“libs”并将结果库放在其中。
此外,当我尝试通过调用:
列出应用程序进程使用的库时PackageManager pm = getPackageManager();
String applicationPackage = this.getApplicationInfo().packageName;
ApplicationInfo ai = pm.getApplicationInfo(applicationPackage, PackageManager.GET_SHARED_LIBRARY_FILES);
String[] soFiles = ai.sharedLibraryFiles;
那么soFiles变量是空的......
我尝试在清单的应用程序部分中按uses-library
值指定库,但之后Android OS拒绝安装该应用程序并显示INSTALL_FAILED_MISSING_SHARED_LIBRARY
错误。
有人可以解释我如何获取我的共享库 - 物理.so文件?
为什么即使加载库并且可以调用本机方法,sharedLibraryFiles
为空?
如何安装需要自定义共享库的应用程序?
答案 0 :(得分:2)
首先,您应该创建libs文件夹并设置项目。
请参阅以下文章:
http://maxters.net/2011/02/android-ndk-builder-for-eclipse-in-windows/
答案 1 :(得分:0)
关于库:它应该安装在 /data/data/com.company.yourApp/lib/libhlsdrm.so
中顺便说一句:soFiles
不应该包含本机库(.so文件),而是.jar文件。例如,如果您在清单<uses-library android:name="com.google.android.maps" />
中指定,则您的soFiles变量将包含 /system/framework/com.google.android.maps.jar