lib的内容如何在Android * .apk文件中结束?

时间:2016-03-09 16:24:25

标签: java android android-ndk java-native-interface aapt

Android App apk文件实际上是拉链。使用(JNI),即本机代码意味着将* .so文件添加到您的apk。我的问题是他们如何实际进入apk文件?

到目前为止,我知道,查看example如何在Java代码中构建和使用此类*.so。我已经知道的是这些文件最终如何在apk / zip存档中存储:

res/
assets/
META-INF/
lib/
  |<arch1>
        |libSharedNativeLib1.so
        |libSharedNativeLib2.so
  |<arch2>
        |libSharedNativeLib1.so
        |libSharedNativeLib2.so
AndroidManifest.xml
classes.dex
resources.arsc

我也知道如何制作条目classes.dexAndroidManifest.xmlresources.arscassetsresMETA-INFO。它是aaptjarsigner的继承。我唯一不知道的是现在将lib放入apk中。

背景

我喜欢简单易懂。使用诸如Android StudioEclipse之类的IDE似乎是一种很好的方法,因为它们会让用户在实际构建过程的背景中({1}}处于不明显状态。在各种构建工具的帮助下完成,例如ANT,Maven,Grandle,Groovy ...)

虽然这些工具并没有什么不妥,但它们往往会减少拉动构建apk的技巧所需的知识,因此似乎减少了关于手动实现方式的文档同样的事情。当zip文件最终出现在apk / zip存档中时,了解Grandle实际上会做些什么会对我有所帮助。

现在我已经测试了,这似乎有效

zip -r appfile.apk lib

并测试它似乎安装Android系统实际上真正复制并链接到正确的lib * .so本机应用程序即 到

root@armdev:/data/data/name.package # ls -l
total 12
drwxr-x--x    2 10142  10142  4.0K .
drwxrwx--x  103 1000   1000   8.0K ..
lrwxrwxrwx    1 1012   1012   42 lib -> /data/app/name.package/lib/arm

现在可以假设Androids automagically只是通过查找pm install appfile.apk文件中的lib文件夹结构并将lib * so文件复制到位并将它们符号链接到apk/zip ,但我真的想知道它是否还有更多,而不是只依靠上面/data/data/name.package/lib命令的幸运。

我已经尝试了zip aapt(对于资产)和-A(对于资源)但是没有尝试通过{将lib文件夹包含到apk文件中{1}}。

,将最终打包到文件夹lib // lib * .so

中的apk文件中

我想开发一些Android软件(* .apk文件/应用程序),我不使用像Android Studio或Eclipse那样的IDE,也不使用像Grandle,Maven和Ant那样构建工具....

1 个答案:

答案 0 :(得分:1)

使用 zip 非常安全(直到Android的未来版本中引入了一些重大更改)。您可以使用 aapt ,但它不接受漂亮的递归标志。您可以查看提取共享库的系统code。没有魔法,它打开ZIP(a.k.a。APK)文件的内容表,并查找与支持的ABI匹配的文件。