第一次混淆,主要是因为引用本地第三方jar包的问题。虽然说本地第三方jar包自动避免混淆,但一些本地第三方jar包下的一些包要避免混淆。比如:

文中的com、org 这些包名都要避免混淆。

下面是我用到的混淆代码:

  1. # Add project specific ProGuard rules here.
  2. # By default, the flags in this file are appended to flags specified
  3. # in /Users/firefish/Library/Android/sdk/tools/proguard/proguard-android.txt
  4. # You can edit the include path and order by changing the proguardFiles
  5. # directive in build.gradle.
  6. #
  7. # For more details, see
  8. # http://developer.android.com/guide/developing/tools/proguard.html
  9.  
  10. # Add any project specific keep options here:
  11.  
  12. # If your project uses WebView with JS, uncomment the following
  13. # and specify the fully qualified class name to the JavaScript interface
  14. # class:
  15. #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  16. # public *;
  17. #}
  18.  
  19. -keep class de.greenrobot.event.** {*;}
  20. -keepclassmembers class ** {
  21. public void onEvent*(**);
  22. void onEvent*(**);
  23. }
  24. -keepclassmembers class fqcn.of.javascript.interface.for.webview {
  25. public *;
  26. }
  27.  
  28. #指定代码的压缩级别
  29. -optimizationpasses 5
  30.  
  31. #包明不混合大小写
  32. -dontusemixedcaseclassnames
  33.  
  34. #不去忽略非公共的库类
  35. -dontskipnonpubliclibraryclasses
  36.  
  37. #优化 不优化输入的类文件
  38. -dontoptimize
  39.  
  40. #预校验
  41. -dontpreverify
  42.  
  43. #混淆时是否记录日志
  44. -verbose
  45.  
  46. # 混淆时所采用的算法
  47. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
  48.  
  49. #保护注解
  50. -keepattributes *Annotation*
  51.  
  52. # 保持哪些类不被混淆
  53. -keep public class * extends android.app.Fragment
  54. -keep public class * extends android.app.Activity
  55. -keep public class * extends android.app.Application
  56. -keep public class * extends android.app.Service
  57. -keep public class * extends android.content.BroadcastReceiver
  58. -keep public class * extends android.content.ContentProvider
  59. -keep public class * extends android.app.backup.BackupAgentHelper
  60. -keep public class * extends android.preference.Preference
  61. -keep public class com.android.vending.licensing.ILicensingService
  62. #如果有引用v4包可以添加下面这行
  63. -keep public class * extends android.support.v4.app.Fragment
  64.  
  65. #忽略警告
  66. -ignorewarning
  67.  
  68. ##记录生成的日志数据,gradle build时在本项目根目录输出##
  69. #apk 包内所有 class 的内部结构
  70. -dump proguard/class_files.txt
  71. #未混淆的类和成员
  72. -printseeds proguard/seeds.txt
  73. #列出从 apk 中删除的代码
  74. -printusage proguard/unused.txt
  75. #混淆前后的映射
  76. -printmapping proguard/mapping.txt
  77. ########记录生成的日志数据,gradle build时 在本项目根目录输出-end######
  78.  
  79. #如果引用了v4或者v7包
  80. -dontwarn android.support.**
  81.  
  82. # support-v4
  83. #https://stackoverflow.com/questions/18978706/obfuscate-android-support-v7-widget-gridlayout-issue
  84. -dontwarn android.support.v4.**
  85. -keep class android.support.v4.app.** { *; }
  86. -keep interface android.support.v4.app.** { *; }
  87. -keep class android.support.v4.** { *; }
  88.  
  89. #保留crash日志的行号
  90. -keepattributes SourceFile,LineNumberTable
  91.  
  92. # support-v7
  93. -dontwarn android.support.v7.**
  94. -keep class android.support.v7.internal.** { *; }
  95. -keep interface android.support.v7.internal.** { *; }
  96. -keep class android.support.v7.** { *; }
  97.  
  98. # support design
  99. #@link http://stackoverflow.com/a/31028536
  100. -dontwarn android.support.design.**
  101. -keep class android.support.design.** { *; }
  102. -keep interface android.support.design.** { *; }
  103. -keep public class android.support.design.R$* { *; }
  104.  
  105. ####混淆保护自己项目的部分代码以及引用的第三方jar包library-end####
  106.  
  107. #保持 native 方法不被混淆
  108. -keepclasseswithmembernames class * {
  109. native <methods>;
  110. }
  111.  
  112. #保持自定义控件类不被混淆
  113. -keepclasseswithmembers class * {
  114. public <init>(android.content.Context, android.util.AttributeSet);
  115. }
  116.  
  117. #保持自定义控件类不被混淆
  118. -keepclassmembers class * extends android.app.Activity {
  119. public void *(android.view.View);
  120. }
  121.  
  122. -keep public class * extends android.view.View {
  123. public <init>(android.content.Context);
  124. public <init>(android.content.Context, android.util.AttributeSet);
  125. public <init>(android.content.Context, android.util.AttributeSet, int);
  126. public void set*(...);
  127. }
  128.  
  129. #保持 Parcelable 不被混淆
  130. -keep class * implements android.os.Parcelable {
  131. public static final android.os.Parcelable$Creator *;
  132. }
  133.  
  134. #保持 Serializable 不被混淆
  135. -keepnames class * implements java.io.Serializable
  136.  
  137. #保持 Serializable 不被混淆并且enum 类也不被混淆
  138. -keepclassmembers class * implements java.io.Serializable {
  139. static final long serialVersionUID;
  140. private static final java.io.ObjectStreamField[] serialPersistentFields;
  141. !static !transient <fields>;
  142. !private <fields>;
  143. !private <methods>;
  144. private void writeObject(java.io.ObjectOutputStream);
  145. private void readObject(java.io.ObjectInputStream);
  146. java.lang.Object writeReplace();
  147. java.lang.Object readResolve();
  148. }
  149.  
  150. #保持枚举 enum 类不被混淆
  151. -keepclassmembers enum * {
  152. public static **[] values();
  153. public static ** valueOf(java.lang.String);
  154. }
  155.  
  156. -keepclassmembers class * {
  157. public void *ButtonClicked(android.view.View);
  158. }
  159.  
  160. #不混淆资源类
  161. -keepclassmembers class **.R$* {
  162. public static <fields>;
  163. }
  164.  
  165. #避免混淆泛型 如果混淆报错建议关掉
  166. -keepattributes Signature
  167.  
  168. #移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
  169. #-assumenosideeffects class android.util.Log {
  170. # public static *** v(...);
  171. # public static *** i(...);
  172. # public static *** d(...);
  173. # public static *** w(...);
  174. # public static *** e(...);
  175. #}
  176.  
  177. #############################################################################################
  178. ######################## 以上通用 ##################################
  179. #############################################################################################
  180.  
  181. ####################### 常用第三方模块的混淆选项 ###################################
  182. #gson
  183. #如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。
  184. -keepattributes Signature
  185. # Gson specific classes
  186. -keep class sun.misc.Unsafe { *; }
  187. # Application classes that will be serialized/deserialized over Gson
  188. -keep class com.google.gson.** { *; }
  189. -keep class com.google.gson.stream.** { *; }
  190.  
  191. #mob
  192. -keep class android.net.http.SslError
  193. -keep class android.webkit.**{*;}
  194. -keep class cn.sharesdk.**{*;}
  195. -keep class com.sina.**{*;}
  196. -keep class m.framework.**{*;}
  197. -keep class **.R$* {*;}
  198. -keep class **.R{*;}
  199. -dontwarn cn.sharesdk.**
  200. -dontwarn **.R$*
  201.  
  202. #butterknife
  203. -keep class butterknife.** { *; }
  204. -dontwarn butterknife.internal.**
  205. -keep class **$$ViewBinder { *; }
  206.  
  207. -keepclasseswithmembernames class * {
  208. @butterknife.* <fields>;
  209. }
  210.  
  211. -keepclasseswithmembernames class * {
  212. @butterknife.* <methods>;
  213. }
  214.  
  215. ######引用的其他Module可以直接在app的这个混淆文件里配置
  216.  
  217. # 如果使用了Gson之类的工具要使被它解析的JavaBean类即实体类不被混淆。
  218. -keep class com.matrix.app.entity.json.** { *; }
  219. -keep class com.matrix.appsdk.network.model.** { *; }
  220.  
  221. #####混淆保护自己项目的部分代码以及引用的第三方jar包library#######
  222. #如果在当前的application module或者依赖的library module中使用了第三方的库,并不需要显式添加规则
  223. #-libraryjars xxx
  224. #添加了反而有可能在打包的时候遭遇同一个jar多次被指定的错误,一般只需要添加忽略警告和保持某些class不被混淆的声明。
  225. #以libaray的形式引用了开源项目,如果不想混淆 keep 掉,在引入的module的build.gradle中设置minifyEnabled=false
  226. -keep class com.nineoldandroids.** { *; }
  227. -keep interface com.nineoldandroids.** { *; }
  228. -dontwarn com.nineoldandroids.**
  229. # 下拉刷新
  230. -keep class in.srain.cube.** { *; }
  231. -keep interface in.srain.cube.** { *; }
  232. -dontwarn in.srain.cube.**
  233. #fab-transformation
  234. #-keep class konifar.fab-transformation.** { *; }
  235. #-keep interface konifar.fab-transformation.** { *; }
  236. #-dontwarn konifar.fab-transformation.**
  237. #info.hoang8f:android-segmented
  238. -keep class info.hoang8f.android-segmented.** { *; }
  239. -keep interface info.hoang8f.android-segmented.** { *; }
  240. -dontwarn info.hoang8f.android-segmented.**
  241. #xutils:3.3.36
  242. ################### region for xUtils
  243. -keepattributes Signature,*Annotation*
  244. -keep public class org.xutils.** {
  245. public protected *;
  246. }
  247. -keep public interface org.xutils.** {
  248. public protected *;
  249. }
  250. -keepclassmembers class * extends org.xutils.** {
  251. public protected *;
  252. }
  253. -keepclassmembers @org.xutils.db.annotation.* class * {*;}
  254. -keepclassmembers @org.xutils.http.annotation.* class * {*;}
  255. -keepclassmembers class * {
  256. @org.xutils.view.annotation.Event <methods>;
  257. }
  258. #################### end region
  259. #eventbus:3.0.0
  260. -keepattributes *Annotation*
  261. -keepclassmembers class ** {
  262. @org.greenrobot.eventbus.Subscribe <methods>;
  263. }
  264. -keep enum org.greenrobot.eventbus.ThreadMode { *; }
  265.  
  266. # Only required if you use AsyncExecutor
  267. -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
  268. <init>(java.lang.Throwable);
  269. }
  270. # OkHttp3
  271. -dontwarn com.squareup.okhttp3.**
  272. -keep class com.squareup.okhttp3.** { *;}
  273. -dontwarn okio.**
  274. # Okio
  275. -dontwarn com.squareup.**
  276. -dontwarn okio.**
  277. -keep public class org.codehaus.* { *; }
  278. -keep public class java.nio.* { *; }
  279. #com.getbase:floatingactionbutton
  280. -keep class com.getbase.floatingactionbutton.** { *; }
  281. -keep interface com.getbase.floatingactionbutton.** { *; }
  282. -dontwarn com.getbase.floatingactionbutton.**
  283. #com.orhanobut:logger:1.15
  284. -keep class com.orhanobut.logger.** { *; }
  285. -keep interface com.orhanobut.logger.** { *; }
  286. -dontwarn com.com.orhanobut.logger.**
  287. #com.zhy:flowlayout-lib:1.0.3
  288. -keep class com.zhy.flowlayout-lib.** { *; }
  289. -keep interface com.zhy.flowlayout-lib.** { *; }
  290. -dontwarn com.zhy.flowlayout-lib.**
  291. # observablescrollview:tab fragment
  292. -keep class com.github.ksoichiro.** { *; }
  293. -keep interface com.github.ksoichiro.** { *; }
  294. -dontwarn com.github.ksoichiro.**
  295. #greendao:3.2.2
  296. -keep class org.greenrobot.greendao.**{*;}
  297. -keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
  298. public static java.lang.String TABLENAME;
  299. }
  300. -keep class **$Properties
  301. ##---------------Begin: proguard configuration for fastjson ----------
  302. -keep public class * implements java.io.Serializable {
  303. public *;
  304. }
  305. -keepclassmembers class * implements java.io.Serializable {
  306. static final long serialVersionUID;
  307. private static final java.io.ObjectStreamField[] serialPersistentFields;
  308. private void writeObject(java.io.ObjectOutputStream);
  309. private void readObject(java.io.ObjectInputStream);
  310. java.lang.Object writeReplace();
  311. java.lang.Object readResolve();
  312. }
  313. -dontwarn android.support.**
  314. -dontwarn com.alibaba.fastjson.**
  315.  
  316. -dontskipnonpubliclibraryclassmembers
  317. -dontskipnonpubliclibraryclasses
  318.  
  319. #-libraryjars libs/fastjson.jar
  320. -keep class com.alibaba.fastjson.** { *; }
  321.  
  322. -keepclassmembers class * {
  323. public <methods>;
  324. }
  325. ##---------------End: proguard configuration for fastjson ----------
  326.  
  327. #-libraryjars libs/AnyOfficeSDK.jar
  328. -dontwarn com.huawei.**
  329. -keep class com.huawei.** { *; }
  330.  
  331. -dontwarn com.tencent.**
  332. -keep class com.tencent.** { *; }
  333.  
  334. #-libraryjars libs/iAppPDF.jar
  335. -dontwarn com.kinggrid.**
  336. -keep class com.kinggrid.** { *; }
  337. -dontwarn com.longmai.mtoken.k5.**
  338. -keep class com.longmai.mtoken.k5.** { *; }
  339. -dontwarn org.bouncycastle.**
  340. -keep class org.bouncycastle.**{*;}
  341. -dontwarn org.dom4j.**
  342. -keep class org.dom4j.**{*;}
  343. -dontwarn org.jaxen.**
  344. -keep class org.jaxen.**{*;}
  345. -dontwarn org.w3c.dom.**
  346. -keep class org.w3c.dom.**{*;}
  347.  
  348. -keep class org.xmlpull.v1.** { *; }

第一次android混淆实战的更多相关文章

  1. Android项目实战(二十九):酒店预定日期选择

    先看需求效果图: 几个需求点: 1.显示当月以及下个月的日历 (可自行拓展更多月份) 2.首次点击选择"开始日期",再次点击选择"结束日期" (1).如果&qu ...

  2. android混淆那些事

    写给Android开发者的混淆使用手册 综述 毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆. 首先,这里说的的混淆其实是包括了代码压缩.代码混淆以及 ...

  3. Android项目实战--手机卫士开发系列教程

    <ignore_js_op> banner131010.jpg (71.4 KB, 下载次数: 0) 下载附件  保存到相册 2 分钟前 上传   Android项目实战--手机卫士01- ...

  4. android经典实战项目视频教程下载

    注:这是一篇转载的文章,原文具体链接地址找不到了,将原文分享如下,希望能对看到的朋友有所帮助! 最近在学习android应用方面的技术,自己在网上搜集了一些实战项目的资料,感觉挺好的,发布出来跟大伙分 ...

  5. Xamarin Android开发实战(上册)大学霸内部资料

    Xamarin Android开发实战(上册)大学霸内部资料   试读文档下载地址:http://pan.baidu.com/s/1jGEHhhO 密码:vcfm 介绍: 本教程是国内唯一的Xamar ...

  6. Android混淆打包配置总结

    Android打包失败出现Proguard returned with error code 1. See console的错误 这个问题是由于代码混淆引起的,找不到引用包. 只需在你的proguar ...

  7. Android混淆那些事儿

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园:追风917 # Android混淆 Android混淆是Android开发者经常使用的一种用于代码防止被反编译的 ...

  8. Android Xfermode 实战 实现圆形、圆角图片

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42094215,本文出自:[张鸿洋的博客] 1.概述 其实这篇本来准备Androi ...

  9. Android混淆、反编译以及反破解的简单回顾

    =========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过 ...

随机推荐

  1. Go语言语法说明

    Go语言语法说明 go语言中的go func(){}() 表示以并发的方式调用匿名函数func 深入讲解Go语言中函数new与make的使用和区别 前言 本文主要给大家介绍了Go语言中函数new与ma ...

  2. nyoj 55 懒省事的小明(priority_queue优先队列)

    懒省事的小明 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述       小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种 ...

  3. [bzoj1833][ZJOI2010]数字计数(数位DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1833 分析:简单的数位DP f[i][j][k]表示在i位数.最高位j的所有数字中k的 ...

  4. 如何定义StrokeIt手势 常用StrokeIt手势大全

    1 最小化,最大化,最小化所有(显示桌面) 斜向上表示最大化或者还原,斜向下表示最小化,适用于任务管理器和一般应用程序(有这三个按钮的都可以),先斜向下再斜向上表示显示桌面,这个在WIN7系统中不太实 ...

  5. ssh远程连接出现someone counld be eavesdropping on you right now 的错误

    master主机通过ssh远程连接slaves机子时出现下述错误 解决的方法: 一.删除/root/.ssh/下的kown_hosts文件 二.在master机子上又一次运行scp id_dsa.pu ...

  6. 关于OleDB连接Excel的Extended Properties(扩展属性)HDR=YES; IMEX=2个人理解心得

    近期在用C#写一个创建Excel并将数据导出到Excel的WinForm程序, 让我对OleDB连接Excel的Extended Properties(扩展属性)HDR=YES; IMEX=2有了深刻 ...

  7. 查看及更改MySQL数据库物理文件存放的位置

    查看命令:   mysql> show global variables like "%datadir%"; 表格第二行即为文件的位置.另外,可以在该文件夹的配置文件my.i ...

  8. MVC之使用Nhibernate

    NHibernate是一个基于.Net,用于关系数据库的对象持久化类库.它是著名的Hibernate的.Net版本,NHibernate用于把你的.Net对象持久化到底层的关系数据库中.你完全不用自己 ...

  9. cacheed 限制 4节点 3000万 es 批量删除 shell脚本练习 elasticsearch_action

    文件分割 "www.laiwunews.cn/xinxi/25324717.html""www.zznews.cn/xinxi/10411214.html"&q ...

  10. 数据库操作语句大全(sql)

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...