Manually (aapt) add native library .so to apk

▼魔方 西西 提交于 2020-01-16 00:54:34

问题


For multiple reasons I'm building my project manually (more or less following these steps http://geosoft.no/development/android.html), whithout using ant.

My projects uses the NDK and builds a .so library.

  • With Eclipse:

When I use Eclipse to build my project, everything works: I drag&drop libMyNativeLib.so in the libs/armeabi directory and when I call loadLibrary(MyNativeLib) it works fine: I can call native method from my Java code.

  • Manually:

Now I want to build manually my .apk. Everything works except from the native lib loading. Using aapt add, I have added in my apk : lib/armeabi/libMyNativeLib.so (I saw that the apk generated by Eclipse contains this .so in lib/armeabi so I used the same path in the apk). When calling loadLibrary(MyNativeLib), I got the following exception

java.lang.UnsatisfiedLinkError: Couldn't load MyNativeLib from loader dalvik.system.PathClassLoader[DexPathList...

Why is that ?

Should I do something in the dx --dex step regarding the native code (.so lib) ? I don't think so but I'm maybe wrong ? (I'm only using dx --dex with my .jar libs which is logic I guess).

Do you have any idea ?

Thanks


回答1:


Thanks to apktool (http://ibotpeaches.github.io/Apktool/) I found out what was wrong.

The makefile that generates the final .apk bundle had an error. Indeed the aapt add command contained \ in the path instead of /. As I'm generating on Windows, all my paths use \ as a separator. That's why I used \ for aapt add. However as this path is used during the installation of the .apk on Android (Unix), then I should have used / separator.



来源:https://stackoverflow.com/questions/23522153/manually-aapt-add-native-library-so-to-apk

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!