proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。
下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\proguard.cfg的内容:
[size=1em][backcolor=rgb(108, 226, 108) !important][size=1em]1 [size=1em]2 [size=1em]3 [size=1em]4 [size=1em]5 [size=1em]6 [size=1em]7 [size=1em]8 [size=1em]9 [size=1em]10 [size=1em]11 [size=1em]12 [size=1em]13 [size=1em]14 [size=1em]15 [size=1em]16 [size=1em]17 [size=1em]18 [size=1em]19 [size=1em]20 [size=1em]21 [size=1em]22 [size=1em]23 [size=1em]24 [size=1em]25 [size=1em]26 [size=1em]27 [size=1em]28 [size=1em]29 [size=1em]30 [size=1em]31 [size=1em]32 [size=1em]33 [size=1em]34 [size=1em]35 [size=1em]36 | [size=1em][size=1em]-optimizationpasses 5 [size=1em]-dontusemixedcaseclassnames [size=1em]-dontskipnonpubliclibraryclasses [size=1em]-dontpreverify [size=1em]-verbose [size=1em]-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* [size=1em]-keep public class * extends android.app.Activity [size=1em]-keep public class * extends android.app.Application [size=1em]-keep public class * extends android.app.Service [size=1em]-keep public class * extends android.content.BroadcastReceiver [size=1em]-keep public class * extends android.content.ContentProvider [size=1em]-keep public class * extends android.app.backup.BackupAgentHelper [size=1em]-keep public class * extends android.preference.Preference [size=1em]-keep public class com.android.vending.licensing.ILicensingService [size=1em]-keepclasseswithmembernames class * { [size=1em] native <methods>; [size=1em]} [size=1em]-keepclasseswithmembernames class * { [size=1em] public <init>(android.content.Context, android.util.AttributeSet); [size=1em]} [size=1em]-keepclasseswithmembernames class * { [size=1em] public <init>(android.content.Context, android.util.AttributeSet, int); [size=1em]} [size=1em]-keepclassmembers enum * { [size=1em] public static **[] values(); [size=1em] public static ** valueOf(java.lang.String); [size=1em]} [size=1em]-keep class * implements android.os.Parcelable { [size=1em] public static final android.os.Parcelable$Creator *; [size=1em]} |
从脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、 ContentProvider等基本组件以及com.android.vending.licensing.ILicensingService,
并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。(详细信息请参考<proguard_path>/examples中的例子及注释。)
让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了
完整的default.properties文件应该如下:
[size=1em][backcolor=rgb(108, 226, 108) !important][size=1em]1 [size=1em]2 [size=1em]3 [size=1em]4 [size=1em]5 [size=1em]6 [size=1em]7 [size=1em]8 [size=1em]9 [size=1em]10 [size=1em]11 [size=1em]12 | [size=1em][size=1em]# This file is automatically generated by Android Tools. [size=1em]# Do not modify this file -- YOUR CHANGES WILL BE ERASED! [size=1em]# [size=1em]# This file must be checked in Version Control Systems. [size=1em]# [size=1em]# To customize properties used by the Ant build system use, [size=1em]# "build.properties", and override values to adapt the script to your [size=1em]# project structure. [size=1em]# Project target. [size=1em]target=android-9 [size=1em]proguard.config=proguard.cfg |
如果您使用的是2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可
欢迎光临 因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) | Powered by Discuz! X3.4 |