之前项目中,Gson与MobShare没有混淆,导致打包一直失败,今天终于找到了解决方案,分享给大家。
proguard-rules.pro:

# Add project specific ProGuard rules here.# By default, the flags in this file are appended to flags specified# in D:\Android\sdk/tools/proguard/proguard-android.txt# You can edit the include path and order by changing the proguardFiles# directive in build.gradle.## 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 *;}#指定代码的压缩级别-optimizationpasses 5#包明不混合大小写-dontusemixedcaseclassnames#不去忽略非公共的库类-dontskipnonpubliclibraryclasses #优化  不优化输入的类文件-dontoptimize #预校验-dontpreverify #混淆时是否记录日志-verbose # 混淆时所采用的算法-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*#保护注解-keepattributes *Annotation*# 保持哪些类不被混淆-keep public class * extends android.app.Fragment-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 * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keep public class com.android.vending.licensing.ILicensingService#如果有引用v4包可以添加下面这行-keep public class * extends android.support.v4.app.Fragment#忽略警告-ignorewarning##记录生成的日志数据,gradle build时在本项目根目录输出###apk 包内所有 class 的内部结构-dump proguard/class_files.txt#未混淆的类和成员-printseeds proguard/seeds.txt#列出从 apk 中删除的代码-printusage proguard/unused.txt#混淆前后的映射-printmapping proguard/mapping.txt########记录生成的日志数据,gradle build时 在本项目根目录输出-end#######如果引用了v4或者v7包-dontwarn android.support.**####混淆保护自己项目的部分代码以及引用的第三方jar包library-end#####保持 native 方法不被混淆-keepclasseswithmembernames class * {    native ;}#保持自定义控件类不被混淆-keepclasseswithmembers class * {    public (android.content.Context, android.util.AttributeSet);}#保持自定义控件类不被混淆-keepclassmembers class * extends android.app.Activity {   public void *(android.view.View);}-keep public class * extends android.view.View {    public (android.content.Context);    public (android.content.Context, android.util.AttributeSet);    public (android.content.Context, android.util.AttributeSet, int);    public void set*(...);}#保持 Parcelable 不被混淆-keep class * implements android.os.Parcelable {  public static final android.os.Parcelable$Creator *;}#保持 Serializable 不被混淆-keepnames class * implements java.io.Serializable#保持 Serializable 不被混淆并且enum 类也不被混淆-keepclassmembers class * implements java.io.Serializable {    static final long serialVersionUID;    private static final java.io.ObjectStreamField[] serialPersistentFields;    !static !transient ;    !private ;    !private ;    private void writeObject(java.io.ObjectOutputStream);    private void readObject(java.io.ObjectInputStream);    java.lang.Object writeReplace();    java.lang.Object readResolve();}#保持枚举 enum 类不被混淆-keepclassmembers enum * {  public static **[] values();  public static ** valueOf(java.lang.String);}-keepclassmembers class * {    public void *ButtonClicked(android.view.View);}#不混淆资源类-keepclassmembers class **.R$* {    public static ;}#避免混淆泛型 如果混淆报错建议关掉#-keepattributes Signature#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制#-assumenosideeffects class android.util.Log {#    public static *** v(...);#    public static *** i(...);#    public static *** d(...);#    public static *** w(...);#    public static *** e(...);#}#####################################################################################################################                 以上通用           ######################################################################################################################################################     常用第三方模块的混淆选项         ####################################gson#如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。-keepattributes Signature# Gson specific classes-keep class sun.misc.Unsafe { *; }# Application classes that will be serialized/deserialized over Gson-keep class com.google.gson.** { *; }-keep class com.google.gson.stream.** { *; }#mob-keep class android.net.http.SslError-keep class android.webkit.**{*;}-keep class cn.sharesdk.**{*;}-keep class com.sina.**{*;}-keep class m.framework.**{*;}-keep class **.R$* {*;}-keep class **.R{*;}-dontwarn cn.sharesdk.**-dontwarn **.R$*#butterknife-keep class butterknife.** { *; }-dontwarn butterknife.internal.**-keep class **$$ViewBinder { *; }-keepclasseswithmembernames class * {    @butterknife.* ;}-keepclasseswithmembernames class * {    @butterknife.* ;}######引用的其他Module可以直接在app的这个混淆文件里配置# 如果使用了Gson之类的工具要使被它解析的JavaBean类即实体类不被混淆。-keep class com.matrix.app.entity.json.** { *; }-keep class com.matrix.appsdk.network.model.** { *; }#####混淆保护自己项目的部分代码以及引用的第三方jar包library########如果在当前的application module或者依赖的library module中使用了第三方的库,并不需要显式添加规则#-libraryjars xxx#添加了反而有可能在打包的时候遭遇同一个jar多次被指定的错误,一般只需要添加忽略警告和保持某些class不被混淆的声明。#以libaray的形式引用了开源项目,如果不想混淆 keep 掉,在引入的module的build.gradle中设置minifyEnabled=false-keep class com.nineoldandroids.** { *; }-keep interface com.nineoldandroids.** { *; }-dontwarn com.nineoldandroids.**# 下拉刷新-keep class in.srain.cube.** { *; }-keep interface in.srain.cube.** { *; }-dontwarn in.srain.cube.**# observablescrollview:tab fragment-keep class com.github.ksoichiro.** { *; }-keep interface com.github.ksoichiro.** { *; }-dontwarn com.github.ksoichiro.**

更多相关文章

  1. Android中启动第三方程序的代码
  2. Android Studio连接华为mate8手机调试时不显示错误日志的解决办
  3. Android之Uri转化为Bitmap,一行代码
  4. [经典]Android开源项目分类汇总和Android 优秀开源项目实现原理
  5. Android Studio 打Jar包和混淆代码。
  6. Android 代码模拟输入按键
  7. cocos2dx3.9 + android studio2.0 搭建项目
  8. Android 获取手势onfling代码片段

随机推荐

  1. 系统控制—清除历史消息
  2. 吉利屋短链接api对接教程
  3. 【前端 · 面试 】HTTP 总结(一)—— HTTP
  4. 删除、修改省名称
  5. json 基础啊,xml异步请求,post和get区别
  6. 模板字面量、标签函数、解构赋值与对象字
  7. PHP与JS数据遍历
  8. PHP基础学习与软件搭建
  9. 作业标题:0802-php是什么及运行原理 编程
  10. 【前端 · 面试 】HTTP 总结(二)—— HTTP