转载地址: http://blog.csdn.net/wangbo Fei/article/details/8266553
浏览博客地址:
3358 hubing forever.blog.163.com/blog/static/171040579201342982553107 /
3358 blog.csdn.net/wotoumingzxy/article/details/8279646
33558 www.cn blogs.com/sunzn/archive/2013/03/06/2946952.html
3358 blog.csdn.net/atrueman 123/article/details/6281658
一.理论知识
ProGuard是一个免费的Java类文件压缩器、优化程序和模糊工具。 检测并删除不需要的类、字段、方法、属性值和属性值。 也可以优化字节码,删除无用的指令。 最后,使用简单而没有意义的名称重命名类名、字段名和方法名。 经过以上操作的jar文件将变得更小,难以进行逆向工程。
二.基本使用
也可以用在安卓APP上
ProGuard进行混洗打包,大幅优化Apk包的尺寸。 但是,请注意,ProGuard对文件路径的名称很有讲究,不支持括号和空格。 混淆后,可以在项目目录的proguard的mapping.txt中看到混淆的类名、方法名、变量名和混淆前的类名、方法名、变量名。
使用Eclipse创建新项目时,将在项目目录下生成并配置project.properties和proguard-project.tx。
# toenableproguardtoshrinkandobfuscateyourcode,uncomment this (available properties : SDK.dir,user.home ) 3360
# proguard.config=$ { SDK.dir }/tools/proguard/proguard-Android.txt : proguard-project.txt
#项目目标。
target=android-10
project.properties用于设置Android项目的一些属性,#符号表示当前行是注释。 此处的ProGuard.config用于指定proguard的混淆配置文件,并在使用release方法打包APP发布时打开代码混淆功能。 是否使用release打包与AndroidManifest.xml中application的android:debuggable属性有很多关系。 如果此值为android:debuggable='true ',则最终将以debug方式打包。 最明智的做法是打包工具在打包时确定最终值,而不是在AndroidManifest.xml中指定。 对于ant,则为antrelease或antdebug。 如果直接在Eclipse中使用run或debgu打包,则为debug;如果使用export,则为release。
proguard.config=$ { SDK.dir }/tools/proguard/proguard-Android.txt : proguard-project.txt
此处指定模糊的基本配置文件proguard-android.txt和模糊的个性化配置文件proguard-project.txt。 在本示例中,您将使用proguard-project.txt文件来override或添加上述基本模糊化配置文件proguard-android.txt的配置。
------------- -请参阅
混淆第三方jar软件包进行包装的处理如下所示。
在project.properties中添加proguard.config=proguard.cfg
proguard.cfg的结构如下:
-优化过程5
-dontusemixedcaseclassnames
- dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-优化! code/simplification/arithmetic! field/*, class/merging/*
#要忽略警告,可以使用-ignorewarnings
-咚咚
#如果存在第三方jar包中的. so文件,请声明第三方jar包
- libraryjarslibs/baidumapapi.jar
- libraryjarslibs/Tencent _ open API.jar
- libraryjarslibs/http mime-4.1.3.jar
- libraryjarslibs/Weibo.SDK.Android.SSO.jar
- libraryjarslibs/Android-support-v4.jar
- 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.broadcast receiver
- keep public class * extends Android.content.content provider
- keep public class * extends Android.app.backup.backupagenthelper
- keep public class * extends Android.preference.preference
- keeppublicclasscom.Android.vending.licensing.ilicensingservice
- keepclasseswithmembernamesclass * {
空;
}
-keepclasseswithmembers class * {
公共(Android.content.context,android.util.AttributeSet );
}
-keepclasseswithmembers class * {
Public(Android.content.context,android.util.AttributeSet,int );
}
- keepclassmembersclass * extends Android.app.activity {
Ublicvoid*(Android.view.view );
}
-keepclassmembers enum * {
公共静态* * [ ] values (;
公共静态* * value of (Java.lang.string );
}
- keepclass * implements Android.OS.parcelable {
publicstaticfinalandroid.OS.parcelable $ creator *;
}
#不要混淆第三方jar包的类
- keepclasscom.Baidu.mapapi.* * { *; }
- keepclasscom.Tencent.tauth.* * { *; }
- keepclassorg.Apache.http.entity.mime.* * { *; }
- keepclassandroid.support.v4.* * { *; }
- keepclassandroid.net.http.* * { *; }
- keepclasscom.Weibo.SDK.Android.* * { *; }
-keep class com.sina.sso.** {*; }
说明一下,如果第三方jar包中有. so文件,请忽略。 不要混淆引入的第三方jar文件。 否则,有可能报告异常