作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
安卓官方proguard documentation显示了两个主要优化:
minifyEnabled
至true
proguard-android-optimize.txt
而不是 proguard-android.txt
最佳答案
请记住,最好的 ProGuard 配置 - 是具有最少异常(exception)的配置。
在我理解的异常(exception)情况下:
-keepclassmembers class * extends android.content.Context {
public void *(android.view.View);
public void *(android.view.MenuItem);
}
让我们浏览一下 proguard-android-optimize.txt 并查看优化/混淆选项。
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
This - 可能的优化列表,!意思是否定,所以不使用这个优化
-optimizationpasses 5
指定要执行的优化遍数。默认情况下,执行单遍。多次通过可能会导致进一步的改进。如果优化通过后没有发现改进,则结束优化。仅在优化时适用。
-allowaccessmodification
指定在处理期间可以扩展类和类成员的访问修饰符。这可以改善优化步骤的结果。
-dontpreverify
当面向 Android 时,preverifing 不是必需的,所以不要preverify 将其关闭以减少一点处理时间。但是这个选项不会影响代码的不可破坏性。
-dontusemixedcaseclassnames
指定在混淆时不生成大小写混合的类名。默认情况下,混淆的类名可以包含大写字符和小写字符的混合。这将创建完全可接受和可用的 jar 。
abcdef
更改类名至
AbCdEf
不会使代码牢不可破
-dontskipnonpubliclibraryclasses
指定不忽略非公共(public)库类。从 4.5 版开始,这是默认设置。
-mergeinterfacesaggressively
指定可以合并接口(interface),即使它们的实现类没有实现所有接口(interface)方法...设置此选项会降低某些 JVM 上已处理代码的性能
-overloadaggressively
指定在混淆时应用积极的重载。然后,多个字段和方法可以获得相同的名称,只要它们的参数和返回类型不同,这是 Java 字节码所要求的(不仅仅是它们的参数,是 Java 语言所要求的)
-repackageclasses ''
-repackageclasses ''
指定通过将所有重命名的类文件移动到单个给定包中来重新打包它们。如果没有参数或使用空字符串 (''),则会完全删除包。此选项覆盖 -flattenpackagehierarchy 选项。
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
这将保留行号,但将堆栈跟踪中的文件名替换为“SourceFile”。
关于Android ProGuard : Most Aggressive Optimizations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321742/
我是一名优秀的程序员,十分优秀!