博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android】proguard混淆代码
阅读量:4692 次
发布时间:2019-06-09

本文共 2681 字,大约阅读时间需要 8 分钟。

【doc】

以下是简略的内容,如果需要仔细查看相关手册,请点击上述链接。

 

一、步骤

1、将proguard.cfg文件拷贝到XX工程下;如果新建工程时选择的Android版本是2.3及以上的,创建后工程下就会自带该文件

2、在project.propertites文件中,加入语句:

    proguard.config=proguard.cfg  

或者

    proguard.config=/path/to/proguard.cfg

3、clean工程

4、签名

 

以上步骤即可完成一定保护代码的作用。

 

二、例子说明

测试XX.apk反编译获取相关文件,proguard.cfg脚本没有做任何修改

  使用apktool获取res资源文件 dex2jar获取src文件

没有proguard

可以 可以
有proguard 可以 部分类的类名已混淆(a,b…),代码可读性下降

 

三、文件说明

【参考】

ProGuard运行结束后,输出以下文件:

dump.txt          描述.apk文件中所有类文件间的内部结构

mapping.txt     列出了原始的类,方法和字段名与混淆后代码间的映射。这个文件很重要,当你从release版本中收到一个bug报告时,可以用它来翻译被混淆的代码

seeds.txt     列出了未被混淆的类和成员

usage.txt     列出了从.apk中删除的代码

 

这些文件放在以下文件夹中:

· Ant:<project_root>/bin/proguard

· Eclipse: <project_root>/proguard

注意:每当你在release模式下编译时,这些文件都会被覆盖重写,当然,是被ProGuard工具生成的最新的文件所覆盖。每次你发布你的程序时,都应该保存一份,为了将来能够解码bug报告。

 

四、脚本部分说明

【参考】

-injars  androidtest.jar【jar包所在地址】 

-outjars  out【输出地址】

-libraryjars    'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的库的jar,用于解析injars所指定的jar类】

-optimizationpasses 5

-dontusemixedcaseclassnames 【混淆时不会产生形形色色的类名 】
-dontskipnonpubliclibraryclasses 【指定不去忽略非公共的库类。 】
-dontpreverify 【不预校验】

-verbose

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 【优化】

-keep public class * extends android.app.Activity 【不进行混淆保持原样】

-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keep public abstract interface com.asqw.android.Listener{

public protected <methods>;  【所有方法不进行混淆】
}
-keep public class com.asqw.android{
public void Start(java.lang.String); 【对该方法不进行混淆】
}

-keepclasseswithmembernames class * { 【保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)】

native <methods>;

}

-keepclasseswithmembers class * { 【保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。】

public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {

public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {【保护指定类的成员,如果此类受到保护他们会保护的更好 】

public void *(android.view.View);
}

-keepclassmembers enum * {

public static **[] values();
public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {【保护指定的类文件和类的成员】

public static final android.os.Parcelable$Creator *;
}

 

五、其他

1、过滤反射R文件的混淆

-keep class **.R$* {   *;  }

2、过滤第三方包的混淆

-keep class packagename.** {*;}(其中packagename为第三方包的包名)

转载于:https://www.cnblogs.com/Amandaliu/archive/2013/04/25/3042914.html

你可能感兴趣的文章
DRF的分页
查看>>
Mysql 模糊匹配(字符串str中是否包含子字符串substr)
查看>>
python:open/文件操作
查看>>
流程控制 Day06
查看>>
Linux下安装Tomcat
查看>>
windows live writer 2012 0x80070643
查看>>
tomcat 和MySQL的安装
查看>>
11.5 内部类
查看>>
Cosine Similarity
查看>>
halt和shutdown 的区别
查看>>
git常用操作
查看>>
京东SSO单点登陆实现分析
查看>>
u-boot启动第一阶段
查看>>
MySQL批量SQL插入性能优化
查看>>
定义列属性:null,default,PK,auto_increment
查看>>
用户画像展示
查看>>
C#中StreamReader读取中文出现乱码
查看>>
使用BufferedReader的时候出现的问题
查看>>
linux安装图形界面
查看>>
博弈论之入门小结
查看>>