由于多种原因,我正在手动构建我的项目(或多或少遵循这些步骤 http://geosoft.no/development/android.html ),而不使用 ant。
我的项目使用 NDK 并构建 .so
库。
- 使用 Eclipse:
当我使用 Eclipse 构建项目时,一切正常:我将 libMyNativeLib.so
拖放到 libs/armeabi
目录中,当我调用 loadLibrary(MyNativeLib )
它工作得很好:我可以从我的 Java 代码中调用 native 方法。
- 手动:
现在我想手动构建我的.apk
。除了 native 库加载之外,一切正常。
使用aapt add
,我在我的apk中添加了:lib/armeabi/libMyNativeLib.so
(我看到Eclipse生成的apk在lib中包含这个.so/armeabi
所以我在 apk 中使用了相同的路径)。
调用 loadLibrary(MyNativeLib)
时,出现以下异常
java.lang.UnsatisfiedLinkError: Couldn't load MyNativeLib from loader dalvik.system.PathClassLoader[DexPathList...
这是为什么?
我应该在 dx --dex
步骤中针对 native 代码 (.so
lib) 执行某些操作吗?我不这么认为,但我可能错了? (我只将 dx --dex 与我的 .jar 库一起使用,我猜这是逻辑)。
你有什么想法吗?
谢谢
最佳答案
感谢 apktool ( http://ibotpeaches.github.io/Apktool/ ) 我发现了问题所在。
生成最终 .apk
包的 makefile 有错误。事实上,aapt add
命令在路径中包含 \
而不是 /
。当我在 Windows 上生成时,我的所有路径都使用 \
作为分隔符。这就是为什么我使用 \
作为 aapt add
的原因。然而,由于在 Android (Unix) 上安装 .apk
时使用了此路径,所以我应该使用 /
分隔符。
关于android - 手动(aapt)将 native 库.so添加到apk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23522153/