Proguard操作使用总结

参考:
https://blog.csdn.net/zhangdaiscott/article/details/45368261
https://blog.csdn.net/shensky711/article/details/52770993?utm_source=blogxgwz2
https://www.cnblogs.com/cr330326/p/5534915.html
https://www.cnblogs.com/xuxiuxiu/p/7151995.html

图形工具基本操作说明

下载安装

基本操作

  1. 添加待混淆jar包

    点击左侧input/output,出现右侧界面,Add imput添加待混淆的jar包的路径,Add output混淆后结果的路径;下面的Add将项目依赖的jar包导入,包括project里的libraries所有Library的jar包(jre、maven等);
    在这里插入图片描述

  2. 压缩

    点击Shrinking,进行压缩设置:

在这里插入图片描述

  1. 混淆

    点击Obfuscation,进行混淆设置:

在这里插入图片描述

  1. 优化

    点击Optimization进行设置

在这里插入图片描述

  1. 版本信息

    点击Information,设置jdk版本

在这里插入图片描述

  1. 执行混淆

    ①点击Process,②保存配置信息,也可以去本地文件中使用代码命令修改配置文件,③预览配置信息④执行

在这里插入图片描述

执行成功后结果如图:

在这里插入图片描述

  1. 优化脚本
    在第6步保存的配置文件就是所有设定的命令文件,所有上面的操作可以都不选,然后在配置文件中写命令;如果我们有写好的配置文件,可以直接点击页面的ProGuard,在点击下面的导入,然后重复第6步点击执行;优化调试脚本经常做这两步操作;

常用脚本命令

  • 导入
-injars
  • 导出
-outjars
  • 外部jar包
-libraryjars
  • 警告和描述
所有警告和描述不出现
-dontnote
-dontwarn
也可以指定具体的哪些不出现
-dontnote java.*
  • 不区分大小写
-dontusemixedcaseclassnames
  • 不混淆包名
-keeppackagenames
  • jdk版本
-target 1.8
  • 保留有main方法的类名和main方法
-keepclasseswithmembers public class com.test.TestClass {
    public static void main(java.lang.String[]);
}
  • 保留外部引用的jar包
-keep class java.** {
    <fields>;
    <methods>;
}
-keep class org.** {
    <fields>;
    <methods>;
}
将一些常用的jar包不混淆,可以按这种格式追加;也可以用下面的格式,会自动转为上面格式的
-keep class  org.** { *; }
  • 自定义类的保留
    自定义的类也可以按上面格式写,表示类、方法、属性都不混淆,下面我们也可以选择性不混淆

-keep class com.test.TestClass {
    public void test();
    private static final java.lang.String name;
}
类名、test方法和name属性不混淆;
如果keep变成keepclassmembers 则类名混淆,成员不混淆;

常见问题解决

  • Note: can’t find dynamically referenced class …
    问题:缺少jar包;
    解决:添加该jar包不混淆
    例:-keep class org.** { *; }

  • Note: … calls ‘(…)Class.forName(variable).newInstance()’
    Note: … accesses a field/method ‘…’ dynamically
    Note: … calls ‘Class.get…’, ‘Field.get…’, or ‘Method.get…’
    问题:反射类名、方法、属性找不到
    注解的原理也是反射,不混淆注解keepattributes Annotation
    解决:反射类不能混淆,不混淆注解
    例:-keep class org.** { *; }
    keepattributes Annotation

  • Note: duplicate definition of program/library class
    问题:重复定义了jar,比如有多个版本的一类jar包共存;
    解决:首先不能混淆该jar包,如果还显示note,可以使用-dontnote 这个jar
    例:-keep class org.** { *; }
    -dontnote org.**

  • 更多问题解决详见官方文档:https://www.guardsquare.com/en/products/proguard/manual/troubleshooting#dynamicalclassmember

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值