apkbuilder在某些文件上太慢了

时间:2014-06-17 17:21:12

标签: android android-ndk shared-libraries apk

我的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库加速这个过程?

2 个答案:

答案 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/