Android的代码混淆(ProGuard)

ProGuard(Program Guard)是一个Java代码混淆的工具。
在2.3版本以前只能通过手动添加ProGuard来实现代码混淆。

在2.3版本以上的sdk中,我们可以看到在android-sdk-windows/tools/下面多了一个proguard文件夹,

google已经把proguard技术放在了android sdk里面,可以通过正常的编译方式也能实现代码混淆了。
新建Android工程时,在其根目录下,会自动生成两个文件:proguard-project.txt和project.properties;

其中proguard-project.txt即为ProGuard配置文件,如果要使其生效,可以在project.properties最后添加一句:

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-19
android.library=false
proguard.config=proguard-project.txt
ProGuard配置文件的编写,可以查看其官方手册(点击打开链接),其下的Manual -> Usage里有详细说明。
如下为我在用的一个配置,我加了些注释,方面大家的阅读。

# 优化的遍数,遍数越多,优化的越厉害;默认优化1遍;
-optimizationpasses 5
# 不要忽略lib库中的非公开类;4.5以后,这是默认设置;
-dontskipnonpubliclibraryclasses
# 不进行预先校验;Android不需要,指定它可节省时间;
-dontpreverify
# 不压缩;默认是进行压缩的;
#-dontshrink
# 不警告;不警告可能很危险;
#-dontwarn
# 处理过程中,输出详细信息
-verbose
# 指定优化项;
-optimizations !class/*,!field/*,!method/*,!code/*
# 保留如下类;不被删除或重命名;
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Service
-keep public class * extends android.app.Application
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.content.BroadcastReceiver
-keep public class com.android.vending.licensing.ILicensingService
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
# 保留如下属性;
-keepattributes *Annotation*
# 保留如下类和成员名称;不被重命名;
-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 enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keepclassmembers class **.R$* {
    public static <fields>;
}
# 假定无影响;
-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
    public static *** i(...);
}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值