出于多种原因,我手动构建我的项目(或多或少遵循这些步骤http://geosoft.no/development/android.html),而不使用ant。
我的项目使用NDK并构建.so
库。
当我使用Eclipse构建我的项目时,一切正常:我将libMyNativeLib.so
拖放到libs/armeabi
目录中,当我调用loadLibrary(MyNativeLib)
时它工作正常:我可以调用本机方法来自我的Java代码。
现在我想手动构建我的.apk
。一切都有效,除了本机lib加载。
使用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
库,这是我猜的逻辑。
你有什么想法吗?
由于
答案 0 :(得分:4)
感谢apktool(http://ibotpeaches.github.io/Apktool/)我发现了什么问题。
生成最终.apk
包的makefile出错。实际上aapt add
命令在路径中包含\
而不是/
。当我在Windows上生成时,我的所有路径都使用\
作为分隔符。这就是我将\
用于aapt add
的原因。但是,在Android(Unix)上安装.apk
期间使用此路径时,我应该使用/
分隔符。