启动代码混淆功能
在较新版本的Android tools和ADT,项目工程里面是带有proguard.cfg的代码混淆配置文件,但默认是没有启动这个配置的,需要手动地在default.properties(eclipse中工程文件project.properties)里面添加指定这个配置文件:android sdk \ tools 目录下 看到 proguard 了没?
新建一个 2.3.3的项目,你会看到 项目 文件里 有一个 proguard.cfg 文件?
好吧,伟大的 google 已经帮我们做了这么多事儿了,可惜是从2.3开始的,
那我 悲催的 项目(基于2.2的sdk) 该如何 是好?(非得 残忍的把 项目属性设置为 2.3的么?
其实即使你该了,google 也不会为你把 proguard.cfg文件补上的)
呵呵,其实不用,你只要 把 proguard.cfg 文件 拷贝到 你的 旧项目里就好了,
当然这样还不够,因为 google是默认不混淆项目的
To enable ProGuard so that it runs as part of an Ant or Eclipse build,
set the proguard.config property in the <project_root>/default.properties file.
The path can be an absolute path or a path relative to the project's root.
google 告诉我们 还要 配置 default.properties
嗯,
把 proguard.config=proguard.cfg 加上
好了,再次生成 新的 .apk文件,
然后用上面的方法 反编译你的 项目,你会看到 aa bb cc 的包、aa bb cc 的类 和 aa bb cc 的变量名,方法名.
这个我相信你自己也搞的头昏了吧?
再看看 proguard.cfg 文件
-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 com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native < methods > ;
}
-keepclasseswithmembernames class * {
public < init > (android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public < init > (android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
这里是 google默认 不混淆 Activity 、Service ... 类的 子类, 正如上面的截图中看到的 所有 activity 的子类 名称是被保留的。
想自定义 混淆细节 的话 就 琢磨琢磨这个配置文件吧