【问题标题】:Android JNI APK PackingAndroid JNI APK 打包
【发布时间】:2012-02-24 10:50:30
【问题描述】:

我已经实现了一个 JNI android 应用程序。此应用程序需要将一些额外的“共享库”打包为 APK 的一部分。使用 Ecpise,我已将这些库添加到项目的“/libs/armeabi”文件夹中。

但是,当启动应用程序时(通过集成调试器),我添加的“共享库”会从“armeabi”文件夹中删除。

  • 如何防止这些额外的库被删除?
  • 如何确保附加的必需 SO 包含在 APK 中?

【问题讨论】:

    标签: android android-ndk java-native-interface


    【解决方案1】:

    您不需要自己将此库复制到libs 文件夹。这项工作应该由ndk-build 完成。

    这两步就够了:

    1. 在项目的根级别创建 mylibs(您可以使用任何其他名称)文件夹。并将您的库放入此文件夹。

    2. 对于每个库,在 include $(CLEAR_VARS) 语句之前添加以下行,将 mylib 替换为您的库名称:

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

    (LOCAL_SRC_FILES 的路径可能略有不同。这取决于您的 Eclipse 配置。)

    【讨论】:

    • 完成上述操作后,这就是我在构建过程中得到的结果:android NDK: jni/Android.mk:swscale: LOCAL_MODULE_FILENAME should not include file extensions Android NDK: ERROR:jni/Android.mk :swscale: LOCAL_SRC_FILES 应该指向一个以“.a”结尾的文件
    • 已修复。应该有PREBUILT_SHARED_LIBRARY 而不是PREBUILT_STATIC_LIBRARY。
    【解决方案2】:

    在此上下文中要添加的另一个注意事项是,外部 SharedLib 的路径必须相对于 jni 目录(或任何指定的 @LOCAL_PATH ),即“LOCAL_SRC_FILES := ../../.. /Android/ffmpeg/libavcodec/libavcodec.so" 将在绝对路径不起作用的地方工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 2012-09-28
      相关资源
      最近更新 更多