安卓JNI APK打包

8
我已经实现了一个JNI Android应用程序。该应用程序需要将一些额外的“共享库”作为APK的一部分打包。使用Eclipse,我已经将这些库添加到项目的“/libs/armeabi”文件夹中。
然而,在启动应用程序时(通过集成调试器),我添加的“共享库”会从“armeabi”文件夹中移除。
以下是您需要回答的问题:
1.如何防止这些额外的库被删除?
2.如何确保所需的其他SO文件被打包到APK中?
2个回答

9
你不需要手动复制这些库到libs文件夹中,这项任务应由ndk-build来完成。
这两个步骤应该足够:
  1. Create mylibs (you can use any other name instead) folder on the root level of your project. And put your libraries into this folder.

  2. For each library add the following lines before the include $(CLEAR_VARS) statement replacing mylib with you library name:

    include $(CLEAR_VARS)
    LOCAL_MODULE:=mylib
    LOCAL_SRC_FILES:=../mylibs/libmylib.so
    include $(PREBUILT_SHARED_LIBRARY)
    

你可能需要针对 LOCAL_SRC_FILES 使用稍微不同的路径。这取决于你的Eclipse配置。


1
完成上述操作后,在构建过程中我得到了以下信息:Android NDK: jni/Android.mk:swscale: LOCAL_MODULE_FILENAME 不应包含文件扩展名
Android NDK: ERROR:jni/Android.mk:swscale: LOCAL_SRC_FILES 应指向以“.a”结尾的文件。
- NadavRub
1
已修正。应该使用PREBUILT_SHARED_LIBRARY而不是PREBUILT_STATIC_LIBRARY - Andrey Kamaev

1
在这个情况下还要补充一点的是,外部SharedLib的路径必须相对于jni目录(或者相对于任何指定的@LOCAL_PATH),也就是说,“LOCAL_SRC_FILES:=../../../Android/ffmpeg/libavcodec/libavcodec.so”可以运行,而绝对路径则不行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接