手动(aapt)添加本机库.so到apk

时间:2014-05-07 15:33:24

标签: android android-ndk aapt

出于多种原因,我手动构建我的项目(或多或少遵循这些步骤http://geosoft.no/development/android.html),而不使用ant。

我的项目使用NDK并构建.so库。

  • 使用Eclipse:

当我使用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库,这是我猜的逻辑。

你有什么想法吗?

由于

1 个答案:

答案 0 :(得分:4)

感谢apktool(http://ibotpeaches.github.io/Apktool/)我发现了什么问题。

生成最终.apk包的makefile出错。实际上aapt add命令在路径中包含\而不是/。当我在Windows上生成时,我的所有路径都使用\作为分隔符。这就是我将\用于aapt add的原因。但是,在Android(Unix)上安装.apk期间使用此路径时,我应该使用/分隔符。