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

Android Eclipse不会在混合项目(NDK和Java)中创建共享库文件,android,android-ndk,Android,Android Ndk,我在Eclipse中有一个项目,它使用CDT和ADT混合了本机代码和Java代码。这是一个非常简单的演示项目,就像android-ndk-r7/samples/hello jni一样 我的Android.mk(在/jni文件夹中)是: 一切都编译得很好,我可以通过 System.loadLibrary("hlsdrm"); 并调用本机函数。但是库文件放在哪里呢?任何项目文件夹中都没有libhlsdrm.so共享库。正如我所读到的,它应该创建一个文件夹“libs”,并将生成的库放在其中 另外,

我在Eclipse中有一个项目,它使用CDT和ADT混合了本机代码和Java代码。这是一个非常简单的演示项目,就像android-ndk-r7/samples/hello jni一样

我的Android.mk(在/jni文件夹中)是:

一切都编译得很好,我可以通过

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变量为空。。。 我试图通过清单的应用程序部分中的
使用库
值来指定库,但之后Android操作系统拒绝安装该应用程序,并显示
安装失败\u缺少\u共享库
错误

有谁能解释一下我如何获得我的共享库-物理.so文件

为什么
sharedLibraryFiles
即使加载了库并且可以调用本机方法也为空


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

首先,您应该创建libs文件夹并设置项目

请参阅下面的文章以执行此操作:


关于库:它应该安装在/data/data/com.company.yourApp/lib/libhlsdrm.so


顺便说一句:
soFiles
不应该包含本机库(.so文件),而是.jar文件。例如,如果您在清单
中指定,那么您的soFiles变量将包含/system/framework/com.google.android.maps.jar

,这篇文章很棒!不幸的是,它对我不起作用。我完全遵循了所有步骤,项目编译没有错误,但libs文件夹是空的,应用程序在启动后立即崩溃:(嗯,我花了几个小时编写本机代码,现在我花了第三天时间尝试设置Eclipse项目……应用程序崩溃,因为System.loadLibrary(“hello jni”);引发异常…我尝试将路径C:\cygwin\bin设置为替换本机环境,而不是附加,现在它在libs文件夹中创建了gdb.setup和gdbserver文件,但库本身仍然没有生成。请发布更多信息,如控制台消息和logcat消息。否则,我理解您的沮丧,但无法帮助很多。我怀疑您的NDK或eclipse设置不正确,但这只是猜测。我终于让它工作了!我在cygwin控制台中键入
make-v
,发现cygwin make不在路径上……所以我在系统中手动将path变量设置为c:\cygwin\bin,现在它的工作方式与本文中描述的完全相同。但有一点是:ng我仍然不清楚-为什么我不能列出PackageManager加载的共享库?无论如何,谢谢你的帮助!很高兴听到你解决了这个问题。至于PackageManager问题,我没有太多的经验,我想你最好问一个单独的问题。
PackageManager pm = getPackageManager();
String applicationPackage = this.getApplicationInfo().packageName;
ApplicationInfo ai = pm.getApplicationInfo(applicationPackage, PackageManager.GET_SHARED_LIBRARY_FILES);
String[] soFiles = ai.sharedLibraryFiles;