Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Proguard混淆对.apk大小的影响_Android_Open Source_Proguard_Obfuscation - Fatal编程技术网

Android Proguard混淆对.apk大小的影响

Android Proguard混淆对.apk大小的影响,android,open-source,proguard,obfuscation,Android,Open Source,Proguard,Obfuscation,我正在为android开发一个开源ASL2.0应用程序: 因此,从安全角度来看,没有必要混淆代码。 但我想知道在减少.apk存档的大小方面是否有一些好处 我自己测试了这个,当不使用和使用模糊处理时,分别从约2650 KB减少到2335 KB。。。你的经历是什么 即使这是一个开源应用程序,为了减少.apk大小,我是否应该混淆发布版本?在这种情况下,proguard的理由是优化代码。显然,里程数会有所不同,但Proguard将尝试内联并尽可能地压缩。理论上,这可以提高应用程序的性能 关于大小-您的A

我正在为android开发一个开源ASL2.0应用程序:

因此,从安全角度来看,没有必要混淆代码。 但我想知道在减少.apk存档的大小方面是否有一些好处

我自己测试了这个,当不使用和使用模糊处理时,分别从约2650 KB减少到2335 KB。。。你的经历是什么

即使这是一个开源应用程序,为了减少.apk大小,我是否应该混淆发布版本?

在这种情况下,proguard的理由是优化代码。显然,里程数会有所不同,但Proguard将尝试内联并尽可能地压缩。理论上,这可以提高应用程序的性能

关于大小-您的APK占用的大部分可能是由我的资源(如图像)而不是代码引起的。所以Proguard在那里帮不了你什么忙,因为你似乎已经发现了

一些反对Proguard的论点如下:

它可能会引入bug,比如剥离不应该有的类。 在收集崩溃信息的情况下,解释堆栈跟踪会稍微困难一些-您需要保留一个翻译文件。 还有一件事可能会破坏您的构建过程,并成为进入项目参与者的障碍。 本例中proguard的参数是优化代码。显然,里程数会有所不同,但Proguard将尝试内联并尽可能地压缩。理论上,这可以提高应用程序的性能

关于大小-您的APK占用的大部分可能是由我的资源(如图像)而不是代码引起的。所以Proguard在那里帮不了你什么忙,因为你似乎已经发现了

一些反对Proguard的论点如下:

它可能会引入bug,比如剥离不应该有的类。 在收集崩溃信息的情况下,解释堆栈跟踪会稍微困难一些-您需要保留一个翻译文件。 还有一件事可能会破坏您的构建过程,并成为进入项目参与者的障碍。
没有明确的答案,但在我的实验中:

classes.dex的大小通常减少30-90%。这主要取决于项目库的数量和大小。如果这些库中的大型零件未使用,ProGuard可以删除它们。Scala应用程序往往是最极端的例子,它们有着巨大的Scala运行时库

因此,最终.apk文件的大小通常会减少4-70%。这主要取决于ProGuard保持不变的资源和资产的规模

启用优化后,对于Dalvik字节码中计算密集型应用程序,应用程序的性能可提高20%

在ART环境中,较小的代码库可以在应用程序下载到设备后加速预编译。此外,ProGuard仍然可以将ART的性能提高30%。显然,ProGuard和ART的优化在很大程度上仍然是互补的

山姆关于潜在不利因素的回答是正确的。希望您从完美工作的代码开始,因此任何额外的处理步骤都会带来一些工作量和风险。如果大小和性能是您的主要目标,那么可以禁用模糊处理-dontobfuscate,以便堆栈跟踪保持可读性

您可以在my for Droidcon和其他会议中找到有关ProGuard for Android的更多详细信息


我是ProGuard的开发者,没有明确的答案,但在我的实验中:

classes.dex的大小通常减少30-90%。这主要取决于项目库的数量和大小。如果这些库中的大型零件未使用,ProGuard可以删除它们。Scala应用程序往往是最极端的例子,它们有着巨大的Scala运行时库

因此,最终.apk文件的大小通常会减少4-70%。这主要取决于ProGuard保持不变的资源和资产的规模

启用优化后,对于Dalvik字节码中计算密集型应用程序,应用程序的性能可提高20%

在ART环境中,较小的代码库可以在应用程序下载到设备后加速预编译。此外,ProGuard仍然可以将ART的性能提高30%。显然,ProGuard和ART的优化在很大程度上仍然是互补的

山姆关于潜在不利因素的回答是正确的。希望您从完美工作的代码开始,因此任何额外的处理步骤都会带来一些工作量和风险。如果大小和性能是您的主要目标,那么可以禁用模糊处理-dontobfuscate,以便堆栈跟踪保持可读性

您可以找到更多有关安卓的ProGuard的详细信息 我的Droidcon和其他会议的d


我是ProGuard的开发者

无论谁投了反对票,请告诉我如何改进答案:不是我;您认为在发布版本中收集崩溃信息有多重要?另外:在我的示例中,大小的减少可能被夸大了,因为我没有为proguard提供不混淆重要类的说明-我还没有验证应用程序是否可以使用混淆。对android应用程序进行优化很棘手——Dalvik不太喜欢。也许这会随着艺术的普及而改变。顺便说一句,你还有其他减少apk尺寸的建议吗?如果你有更多的答案,我会给你+1;IMO收集崩溃信息对于发布版本比开发版本更为重要。测试墨菲定律的最好方法莫过于在不同的条件下将其置于数千台设备的手中。干杯——如果一段时间内没有其他人尝试,我会将你的答案标记为接受;无论谁投了反对票,请告诉我如何改进答案:不是我;您认为在发布版本中收集崩溃信息有多重要?另外:在我的示例中,大小的减少可能被夸大了,因为我没有为proguard提供不混淆重要类的说明-我还没有验证应用程序是否可以使用混淆。对android应用程序进行优化很棘手——Dalvik不太喜欢。也许这会随着艺术的普及而改变。顺便说一句,你还有其他减少apk尺寸的建议吗?如果你有更多的答案,我会给你+1;IMO收集崩溃信息对于发布版本比开发版本更为重要。测试墨菲定律的最好方法莫过于在不同的条件下将其置于数千台设备的手中。干杯——如果一段时间内没有其他人尝试,我会将你的答案标记为接受;