【发布时间】:2014-05-07 15:33:24
【问题描述】:
出于多种原因,我手动构建我的项目(或多或少遵循这些步骤http://geosoft.no/development/android.html),而不使用 ant。
我的项目使用 NDK 并构建了一个 .so 库。
- 使用 Eclipse:
当我使用 Eclipse 构建我的项目时,一切正常:我将 libMyNativeLib.so 拖放到 libs/armeabi 目录中,当我调用 loadLibrary(MyNativeLib) 时它工作正常:我可以从我的 Java 代码中调用本机方法。
- 手动:
现在我想手动构建我的.apk。除了本地库加载外,一切正常。
使用aapt add,我在我的apk 中添加了:lib/armeabi/libMyNativeLib.so(我看到Eclipse 生成的apk 在lib/armeabi 中包含这个.so,所以我在apk 中使用了相同的路径)。
调用loadLibrary(MyNativeLib)时出现如下异常
java.lang.UnsatisfiedLinkError: Couldn't load MyNativeLib from loader dalvik.system.PathClassLoader[DexPathList...
为什么会这样?
我应该在dx --dex 步骤中针对本机代码 (.so lib) 做点什么吗?我不这么认为,但我可能错了? (我只使用dx --dex 和我的.jar 库,我猜这是逻辑)。
你有什么想法吗?
谢谢
【问题讨论】:
-
我不确定您为什么选择避开 Ant。 Gradle,带有 Gradle for Android 插件,可能不会遇到您在 Ant 中遇到的问题,并且会是比手动组装 APK 恕我直言更可靠的解决方案。
-
删除 apk 并重新安装,同时在另一个终端中查看未过滤的 logcat 是否有任何相关投诉。使用 run-as 或隐式 root 模拟器查看安装并查看文件是否存在并已解压缩,以及(使用
ls -l)是否设置了可执行位。使用本机库解压缩有效的 apk 并与非工作的 apk 进行比较。 .so 文件正在与其他所有文件一起签名,对吗?
标签: android android-ndk aapt