Eclipse不会在混合项目(NDK和Java)中创建共享库文件

时间:2012-01-04 17:20:30

标签: android android-ndk

我在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为空?

如何安装需要自定义共享库的应用程序?

2 个答案:

答案 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