我的JNI需要8-10秒。所以libray用apkbuilder包装在apk中。 该库大约8MB,主要用C ++编写。
澄清我在测试后所做的问题。
1)其他.so库
我用其他.so替换了.so库,大约10MB,主要是用C语言编写的。令人惊讶的是,使用新的.so需要1.5秒,这也是用于相同CPU架构的JNI库。
2)虚拟文件
我在我的libs / armabi-v7a目录中放了一个名为xxx.so的虚拟文件。需要1秒钟。
3)不同的CPU架构
所有我的胳膊/ x86 / mips的.so库需要8-10秒。
4)伪造
我使用随机值在随机位置使用十六进制编辑器编辑了我的.so库。它还需要8-10秒。
为什么只有我的.so库需要这么长才能用apkbuilder打包到apk中?有没有办法为我的.so库加速这个过程?
答案 0 :(得分:2)
APK文件基本上只是一个ZIP文件,并且.so文件被添加到它而没有任何特定于APK的处理。所以最可能的原因是apkbuilder试图缩小你的.so文件,这需要一些时间,同时认为另一个.so文件是不可压缩的,只是存储它。
AFAICS加快速度的唯一方法是将apkbuilder源更改为始终存储而不是缩小.so文件。
答案 1 :(得分:0)
我发现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/