我的JNI .so libray用apkbuilder打包apk需要8-10秒。该库大小约8MB,主要用C++编写。
为了澄清这个问题,我做了以下测试。
1)其他.so库
我用大约10MB的其他.so替换了.so库,大部分都是用C语言写的。令人惊讶的是,使用新的.so需要1.5秒,这也是一个用于相同CPU架构的JNI库。
2)虚拟文件
我在我的libs/armabi-v7a目录中放置了一个名为xxx.so的虚拟文件。需要1秒。
3)不同的CPU架构
我所有的arm/x86/mips的.so库都需要8-10秒。
4)伪造
我用十六进制编辑器在带有随机值的随机位置编辑了我的.so库。这也需要8-10秒。
为什么只有我的.so库需要这么长时间才能用apkbuilder打包到apk中?有什么方法可以加速我的.so库的这个过程吗?
发布于 2014-06-18 02:54:59
APK文件本质上只是一个ZIP文件,而.so文件是在没有任何APK特定处理的情况下添加到其中的。所以最有可能的原因是apkbuilder试图压缩你的.so文件,这需要一些时间,而另一个.so文件是不可压缩的,只是存储它。
AFAICS唯一能加速这个过程的方法是改变apkbuilder源码,使其始终存储而不是压缩.so文件。
发布于 2014-06-18 19:16:43
我发现ZipOutputStream花了大部分时间来压缩.so文件。
Android ApkBuilder使用的是压缩级别9,它的压缩率最高,但性能最慢。如果我将这个级别更改为3,整个性能会有很大的提高,但会有一点压缩比损失。
您可以通过修复sdklib源代码来更改此级别。在SignedjarBuilder.java (com.android.sdklib.internal.build)中,找到'mOutputJar.setLevel‘并更改所需的级别。然后创建sdklib.jar并将其复制到Android SDK目录(android_sdk/tools/lib)
你可以在这里下载源代码:https://android.googlesource.com/platform/tools/base/+/master/sdklib/src/main/java/com/android/sdklib/build/
https://stackoverflow.com/questions/24269803
复制相似问题