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.dex
,AndroidManifest.xml
,resources.arsc
,assets
,res
和META-INFO
。它是aapt
,jarsigner
的继承。我唯一不知道的是现在将lib
放入apk中。
我喜欢简单易懂。使用诸如Android Studio
和Eclipse
之类的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那样构建工具....
答案 0 :(得分:1)
使用 zip 非常安全(直到Android的未来版本中引入了一些重大更改)。您可以使用 aapt ,但它不接受漂亮的递归标志。您可以查看提取共享库的系统code。没有魔法,它打开ZIP(a.k.a。APK)文件的内容表,并查找与支持的ABI匹配的文件。