ProGuard混淆例子

请先查看 Android如何代码混淆 后再查看本篇文章,本文只讲proguard-project.txt文件

# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html
 
# Add any project specific keep options here:
 
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}
 
# 声明第三方jar包 。
# 这里自己看项目有什么包就加什么包,不要照搬。
-libraryjars libs/android-support-v4.jar
-libraryjars libs/fastjson-1.1.43.android.jar
-libraryjars libs/libammsdk.jar
-libraryjars libs/open_sdk_r4889_lite.jar
-libraryjars libs/umeng-analytics-v5.5.3.jar
-libraryjars libs/umeng-update-v2.6.0.1.jar
-libraryjars libs/baidumapapi_v2_4_0.jar
-libraryjars libs/locSDK_3.1.jar
 
# 这里是混淆后还能保留的属性。
# 保留异常,内部类,注解,泛型,保留行号的属性。
-keepattributes Exceptions,InnerClasses,*Annotation*,Signature,LineNumberTable
# 还有其它属性,如:LocalVariableTable 局部变量、SourceFile 源文件、Deprecated 废弃、Synthetic 合成。
 
# 保留序列化。
# 比如我们要向activity传递对象使用了Serializable接口的时候,这时候这个类及类里面#的所有内容都不能混淆。
# 这里如果项目有用到序列化和反序列化要加上这句。
-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable { *; }
 
# 保留model,一般model最好避免混淆(model无关紧要,不混淆也没多大关系)
# 这里的com. oschina.test是自己项目的包名,不要照搬。
-keep class com. oschina.test.model.* {*;}
 
# 保留适配器
-keep public class * extends android.widget.BaseAdapter {*;}
# 如果你使用了CusorAdapter,添加下面这行
-keep public class * extends android.widget.CusorAdapter{*;}
# 同样如果你觉得麻烦,就直接将BaseAdpater换成Adapter
 
# 保留资源类变量不被混淆,否则,你的反射是获取不到资源id的
# 这里的com. oschina.test是自己项目的包名,不要照搬。
-keep public class com. oschina.test.R$*{
    public static final int *;
}
 
# 保留四大组件和自定义控件及组件。
# 如果我们自定了ListView,ScrollView,Gallery这些组件的时候,
# 我们就不能混淆这些自定义的类了,因为在layout里面我们已经引用这个了类,而且已经写死了。
# 第二句保留在activity中的方法参数是view的方法,这样的话,我们在xml里面编写onClick就不会被影响了
-keep public class * extends android.app.Activity
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}
-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 * extends android.view.View {*;}
-keep public class * extends android.app.Fragment
-keep public class * extends android.support.v4.**
-keep public class * extends android.support.v7.**
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
 
# 保留点击和回调函数
-keepclasseswithmembers class * {
    void onClick*(...);
}
-keepclasseswithmembers class * {
    *** *Callback(...);
}
 
##-----------------第三方jar包配置(选择性添加)-------------------------
# ImageLoader
-dontwarn com.nostra13.universalimageloader.**
-keep class com.nostra13.universalimageloader.** { *; }
 
# 融云
-dontwarn io.rong.**
-keep class io.rong.** {*;}
-keepclassmembers class **.R$* {
    public static <fields>;
}
-keep class *.R$ { *;}
 
# 腾讯
-dontwarn com.tencent.**
-keep class com.tencent.** { *;}
 
# SlidingMenu
-dontwarn com.jeremyfeinstein.slidingmenu.**
-keep class com.jeremyfeinstein.slidingmenu.** { *; }
 
# xutils
-dontwarn com.lidroid.xutils.**
-keep class com.lidroid.** { *; }
-keep class * extends java.lang.annotation.Annotation { *; }
 
# 友盟
-dontwarn com.umeng.**
-keep class com.umeng.** {*;}
 
# 新浪微博
-dontwarn com.sina.weibo.sdk.**
-keep class com.sina.weibo.sdk.** { *; }
 
# fastjson
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.** { *; }
 
# pulltorefresh
-dontwarn com.handmark.pulltorefresh.library.**
-dontwarn com.handmark.pulltorefresh.library.extras.**
-dontwarn com.handmark.pulltorefresh.library.internal.**
-keep class com.handmark.pulltorefresh.library.** { *;}
-keep class com.handmark.pulltorefresh.library.extras.** { *;}
-keep class com.handmark.pulltorefresh.library.internal.** { *;}
 
# 百度地图
# 地图组件包括图层、定位等接口所有的类及类里面的内容都不要混淆
# 交通实况相关的类及类里面的所有内容不要混淆
-keep class com.baidu.** { *; }
-keep class vi.com.gdi.bgl.android.**{*;}        
 
# android v4 v7扩展包
-dontwarn android.support.**
-keep class android.support.v4.** { *; }
-keep class android.support.v7.** { *; }

补充一下:

对于引用第三方包的情况,可以采用下面方式避免打包出错:

-dontwarn com.xx.yy.**
-keep class com.xx.yy.** { *;}
时间: 2024-10-12 11:26:56

ProGuard混淆例子的相关文章

Android项目:proguard混淆之常见问题及解决方法汇总

1.使用proguardgui混淆器对jar包进行混淆,出现EXCEPTION FROM SIMULATION错误: [2014-07-08 14:29:55 - Test024_HouseBox_v02_jar] Dx  EXCEPTION FROM SIMULATION: [2014-07-08 14:29:55 - Test024_HouseBox_v02_jar] Dx local variable type mismatch: attempt to set or access a va

Android项目:proguard混淆之常见开源项目混淆配置

1.Gson混淆 ## ---------------------------------- ##   ########## Gson混淆    ########## ## ---------------------------------- -keepattributes Signature  -keep class sun.misc.Unsafe { *; }  -keep class com.google.gson.examples.android.model.** { *; } 2.gr

使用proguard混淆android代码

当前是有些工具比如apktool,dextojar等是可以对我们android安装包进行反编译,获得源码的.为了减少被别人破解,导致源码泄露,程序被别人盗取代码,等等.我们需要对代码进行混淆,android的sdk中为我们提供了ProGrard这个工具,可以对代码进行混淆(一般是用无意义的名字来重命名),以及去除没有使用到的代码,对程序进行优化和压缩,这样可以增加你想的难度.最近我做的项目,是我去配置的混淆配置,因此研究了一下,这里分享一下. 如何启用ProGuard ant项目和eclipse

一周总结(Android):Gradle和ProGuard混淆打包

一周总结 这是第一次再CSDN和结合写工作总结,期待好的开始和进一步的提升. 最近一周 切换到AndroidStudio下工作了一段时间,目前自己觉得还有两个地方做得不足 1.经常看到Gradle代码,但是没有做细致全面的了解: 2.使用Proguard混淆的知识也没有做全面的了解: 最近一周主要是对Gradle和ProGuard的使用做了一些深入了了解和总结,主分别写了以下3篇总结文章: Android-Gradle基础脚本解析 Gradle语法基础解析 ProGuard基础语法和打包配置 方

使用ProGuard混淆JAR包

1.在Input/OutPut选项下面,add input 导入需要混淆的jar包2.点击add output,设置混淆后输出jar包的名字和路径.如下图:3.在下面的编辑区右边点击add增加要混淆的jar需要支持它的类库.4.如果不需要混淆某个类点击点击add增加不需要混淆的类如:com.plug.playerui.MyServer 下面add field,add method 可以增加当前类不需要混淆的域变量和方法. 5. 保留签名,解决泛型问题: 最后点击process混淆. ProGua

利用android proguard混淆代码

利用android proguard混淆代码 2014-02-05 17:50 1207人阅读 评论(1) 收藏 举报 网上虽然有很多相关博客,不过貌似都不是最新版的..于是百度+谷歌+github上的开源demo,终于成功的配置了android proguard. 最新版的android sdk的默认配置已经可以满足我们的大多数要求了,我们只需要按照sdk的提示就可以配置大部分的必须配置,然后再加上一些基本的 自定义配置就行了. 第一步,取消project.properties里面关于prog

Android项目:proguard混淆第三方jar.

Android项目:proguard混淆第三方jar. 时间:2015-01-16 15:20来源:网络整理 作者:赵红霞 点击: 370 次 1.Gson混淆123456## ----------------------------------## ########## Gson混淆 ############ -----------------------------------keepattributes Signatur 1.Gson混淆## -----------------------

混淆例子

在项目路径下新疆一个 proguard-project.txt文件 ,最后记得要用eclipse工具导出正式包才会用到混淆,调试模式没用 -optimizationpasses 5-verbose-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -keep public class * extends android.app.Activity-keep public class * extends a

java防止反编译之proguard混淆代码

proguard5.3下载地址:http://down.51cto.com/data/2316123 从eclipse中导出工程的jar包(这个就不详细说了) 安装proguard后打开bin目录下的proguardgui.bat启动proguard如下图所示: 点击Input/Output,设置输入输出的jar包,input就是原jar,output就是混淆后的jar. 5.点击Input/Output中的add,添加该工程用到的jar,包括jre,以及web-info下的lib中的所有jar