版权声明:本文为博主原创文章,转载请声明。 https://blog.csdn.net/qq_32175491/article/details/7025657

代码混淆是上线前必不可少的一部分操作,作为一个高逼格程序员,怎么让自己的混淆看起来更专业,更高逼格呢!简单来说,有条理,让人一目了然,当然这是给你同伴看滴,对于那些想要反编译的朋友来说还是越难懂越好咯。不多说,看文档;

分为5部分: 
=================== 定制化区域================= 
1. 实体类区域 
项目中的实体类,最好放在一个包下,如果没有也没关系,一个个添加下就可以了!比如我的实体类大多数放在entity包下面,所以就这样写:

-keep class com.qmovies.media.TV.entity.** { *; }

1
第三方包区域 
项目中使用第三方包是很难避免的!一般所使用的第三方包官方都会有提供,如果没有,那就Google或者百度,实在找不到,就自己写吧:

贴一下我常用的包,这些包的混淆配置在下面都有配置。
compile ‘com.google.code.gson:gson:2.8.0’
compile ‘com.android.support:appcompat-v7:25.1.1’
compile ‘com.android.support:support-v4:25.1.1’
compile ‘com.android.support:design:25.1.1’
compile ‘com.flyco.tablayout:FlycoTabLayout_Lib:2.0.0@aar’
compile ‘com.miguelcatalan:materialsearchview:1.4.0’
compile ‘com.jakewharton:butterknife:8.4.0’
compile ‘io.reactivex:rxandroid:1.1.0’
compile ‘io.reactivex:rxjava:1.1.0’
compile ‘com.artemzin.rxjava:proguard-rules:1.2.9.0’
compile ‘com.github.bumptech.glide:glide:3.7.0’
compile ‘com.trello:rxlifecycle-components:0.6.1’
compile ‘com.facebook.stetho:stetho:1.3.1’
compile ‘com.facebook.stetho:stetho-okhttp3:1.3.1’
compile ‘com.google.code.gson:gson:2.8.0’
compile ‘com.squareup.retrofit2:retrofit:2.0.0-beta4’
compile ‘com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4’
compile ‘com.squareup.retrofit2:converter-gson:2.0.0-beta4’
compile ‘com.squareup.okhttp3:okhttp:3.2.0’
compile ‘com.squareup.okhttp3:logging-interceptor:3.2.0’
compile ‘com.android.support:cardview-v7:25.1.1’
compile ‘com.google.android.exoplayer:exoplayer:r2.2.0’
compile ‘org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2’
testCompile ‘junit:junit:4.12’
apt ‘com.jakewharton:butterknife-compiler:8.4.0’
compile ‘com.umeng.analytics:analytics:latest.integration
如果你实在没有找到,该怎么写呢?
第一种:按部就班的照抄,抄格式。
第二种:我就这个包的所有文件都不提示,不混淆了。能拿我怎样?比如下面这个。
我的导入包名为: compile 'com.flyco.tablayout:FlycoTabLayout_Lib:2.0.0@aar'
混淆配置可以写成:
```
#flyco
-dontwarn com.flyco.tablayout.**
-keep class com.flyco.tablaout.**{ *;}
```
  1. 与js互调区域 
    工程中没用到,可不写。
  2. 反射相关区域 
    工程中没用到,可不写。

==================基本不用动区域================

1. 基本指令区域 
2. 默认保留区 
3. webView 
这个区域基本通用,可以照抄。

在proguard-rules.pro中添加如下文件:

------------------------------------------定制化区域----------------------------------------------
#---------------------------------1.实体类----------------------------------keep class com.qmovies.media.TV.entity.** { *; }
-keep class com.qmovies.media.TV.model.entity.** { *; }
-keep class com.qmovies.media.TV.model.task.TasksManagerModel { *; }
-keep class com.qmovies.media.TV.widght.banner.BannerEntity { *; }#-------------------------------------------------------------------------#---------------------------------2.第三方包-------------------------------
##---------------Begin: proguard configuration for Gson ----------
-keep public class com.google.gson.**
-keep public class com.google.gson.** {public private protected *;}-keepattributes Signature
-keepattributes *Annotation*
-keep public class com.project.mocha_patient.login.SignResponseData { private *; }##---------------End: proguard configuration for Gson ----------
#如果需要保存内部类,需要如下声明
-keep class com.project.mocha_patient.login.FindForgotInfoActivity$ForgetResponse {*;}
-keep class com.project.mocha_patient.account_setting.ChangePasswordActivity$ChangePasswordResponse {*;}#Glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {**[] $VALUES;public *;
}
#OkHttp
-dontwarn com.squareup.okhttp3.**
-keep class com.squareup.okhttp3.** { *;}
-dontwarn okio.**
#retrofit2
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
#stetho
-keep class com.facebook.stetho.** { *; }
-dontwarn org.mozilla.javascript.**
-dontwarn org.mozilla.classfile.**
-keep class org.mozilla.javascript.** { *; }##Butterknife
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }-keepclasseswithmembernames class * {@butterknife.* <fields>;
}-keepclasseswithmembernames class * {@butterknife.* <methods>;
}
#RxJava/RxAndroid
-dontwarn sun.misc.**
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {long producerIndex;long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {rx.internal.util.atomic.LinkedQueueNode consumerNode;
}#友盟统计
-keepclassmembers class * {public <init> (org.json.JSONObject);
}
#友盟推送
-dontwarn com.taobao.**
-dontwarn anet.channel.**
-dontwarn anetwork.channel.**
-dontwarn org.android.**
-dontwarn org.apache.thrift.**
-dontwarn com.xiaomi.**
-dontwarn com.huawei.**
-dontwarn com.ta.**
-keep class com.taobao.** {*;}
-keep class org.android.** {*;}
-keep class anet.channel.** {*;}
-keep class com.umeng.** {*;}
-keep class com.xiaomi.** {*;}
-keep class com.huawei.** {*;}
-keep class org.apache.thrift.** {*;}-keep class com.alibaba.sdk.android.**{*;}
-keep class com.ut.**{*;}
-keep class com.ta.**{*;}
#flyco
-dontwarn com.flyco.tablayout.**
-keep class com.flyco.tablaout.**{ *;}#org.apache.http
-dontwarn org.apache.http.**
-keep class org.apache.http.**{ *;}#-------------------------------------------------------------------------#-------------------------------------------------------------------------#---------------------------------3.与js互相调用的类------------------------#-------------------------------------------------------------------------#---------------------------------4.反射相关的类和方法-----------------------# 下拉刷新
-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.**#-------------------------------------------基本不用动区域--------------------------------------------
#---------------------------------基本指令区----------------------------------
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-printmapping proguardMapping.txt
-optimizations !code/simplification/cast,!field/*,!class/merging/*
-keepattributes *Annotation*,InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
#----------------------------------------------------------------------------#---------------------------------默认保留区---------------------------------
#保护注解
-keepattributes *Annotation*
-keep public class * extends android.app.Fragment
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Appliction
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.preference.Preference
-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 com.android.vending.licensing.ILicensingService
-keep class android.support.** {*;}
#保持 native 方法不被混淆
-keepclasseswithmembernames class * {native <methods>;
}
#保持自定义控件类不被混淆
-keepclassmembers class * extends android.app.Activity{public void *(android.view.View);
}
#保持枚举 enum 类不被混淆
-keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String);
}
-keep public class * extends android.view.View{*** get*();void set*(***);public <init>(android.content.Context);public <init>(android.content.Context, android.util.AttributeSet);public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclasseswithmembers class * {public <init>(android.content.Context, android.util.AttributeSet);public <init>(android.content.Context, android.util.AttributeSet, int);
}#保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {public static final android.os.Parcelable$Creator *;
}
#保持 Serializable 不被混淆
-keepclassmembers class * implements java.io.Serializable {static final long serialVersionUID;private static final java.io.ObjectStreamField[] serialPersistentFields;private void writeObject(java.io.ObjectOutputStream);private void readObject(java.io.ObjectInputStream);java.lang.Object writeReplace();java.lang.Object readResolve();
}
#不混淆资源类
-keep class **.R$* {*;
}
-keepclassmembers class * {void *(**On*Event);
}
#----------------------------------------------------------------------------#---------------------------------webview------------------------------------
-keepclassmembers class fqcn.of.javascript.interface.for.webview {public *;
}
-keepclassmembers class * extends android.webkit.webViewClient {public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);public boolean *(android.webkit.WebView, java.lang.String);
}
-keepclassmembers class * extends android.webkit.webViewClient {public void *(android.webkit.webView, jav.lang.String);
}
#----------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------
---------------------
作者:aserbao
来源:CSDN
原文:https://blog.csdn.net/qq_32175491/article/details/70256576
版权声明:本文为博主原创文章,转载请附上博文链接!

添加后将minifyEnabled设置为true,打包即可。

最后来一句,学习在于积累,文章认真写好每一篇,写着写着就发现自己的**提高了!有什么问题可以留言,看到及时回复。

超级条理清晰代码混淆(直接搬用即可)相关推荐

  1. Android App 瘦身总结 第三章 代码混淆及优化

    目录 一.代码混淆proguard 二.调整第三方库 三.环境差异依赖 四.代码习惯 五.插件化 六.总结 在前两章我们分别从图片资源和jni动态库这两个方面来分析apk瘦身的优化点 Android ...

  2. python控制流_Python 的控制流代码混淆

    聊下 Python 的代码混淆,对 Python 的代码做混淆感觉是不伦不类,但是对于外包项目交付型的,又有一些需要. 混淆的目的就是加大别人分析你代码逻辑和流程的难度,让代码看上去杂乱,逻辑混乱.但 ...

  3. Python 代码混淆和加密技术

    动机 Python进行商业开发时, 需要有一定的安全意识, 为了不被轻易的逆向. 混淆和加密就有所必要了. 混淆 为了增加代码阅读的难度, 源代码的混淆非常必要, 一个在线的Python代码混淆网站. ...

  4. android 打包 混淆配置_玩转代码混淆工具:ProGuard

    维基百科对ProGuard的介绍是:ProGuard是一个压缩(shrink),优化(optimize)与混淆(Obfuscate)Java代码的开源命令行工具.也就是说混淆只是ProGuard的其中 ...

  5. 条理清晰的入门:使用Java实现RSA加密解密

    条理清晰的入门:使用Java实现RSA加密解密 什么是RSA 使用Java 需要导入的头文件 生成公钥.私钥 进行加密解密 密钥的存储 密文的存储.读取 什么是RSA 翻一下以前的密码学笔记,找到了! ...

  6. Unity3D代码混淆

    Unity代码混淆方案 内容提要:Unity引擎下的代码保护,由于Unity引擎的一些特殊性,实行起来较为复杂,在国内外业界并没有现成的方案.笔者通过在<QQ乐团>项目上的实际尝试,得出了 ...

  7. iOS安全攻防(二十三):Objective-C代码混淆

    iOS安全攻防(二十三):Objective-C代码混淆 class-dump可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄. 所以, ...

  8. java免费代码混淆工具 支持JDK16 java加密

    java代码可以反编译,因此有时候要保护自己的知识产权还真得费点心思,一般来说有三个思路: 1.将class文件加密,这个是最安全的,但也费事儿,因为要将字节码混淆,打乱: 2.使用花指令,使得cla ...

  9. 代码混淆之道——控制流扁平与不透明谓词理论篇

    控制流是指代码执行时指令的执行顺序.在各种控制逻辑的作用下,程序会沿着特定的逻辑顺序执行.一般控制逻辑包括有无条件分支.循环.函数调用等. 本文原创作者:i春秋签约作家--penguin_wwy 一. ...

最新文章

  1. mysql5.0镜像_Mysql5.0学习笔记(一)
  2. python一个月能掌握吗_零基础python入门分析,如何做到一个月学会(深思极恐)...
  3. SpringCloud实践分享-日志收集Kafka-ELK
  4. Oracle海量数据优化-01分区的渊源
  5. initial model for Agile Development Organization: Relationship Graph
  6. Android代码片段:验证数据
  7. SAP CRM IBASE头部字段valid from和valid to的填充逻辑
  8. VC++ 鼠标添加到状态栏
  9. 推荐asp.net调试工具:miniASPNETServer
  10. java 上传文件到服务器_java上传文件到OSS云服务器(二)
  11. 在后台运行程序/软件的Linux命令
  12. 蓝桥杯2013c++真题:颠倒的价牌
  13. 关于SVN更新时文件加锁的小结
  14. 改进型MPPT算法C源代码仿真
  15. 揭秘Google数据中心网络B4(李博杰)
  16. python计算公司销售额的同比增长率
  17. U盘硬盘文件提示“文件或目录损坏且无法读取”问题解决
  18. 揭秘无聊程序猿的趣味人生|斑鸠职业
  19. Linux下RTL8723BE无线网卡驱动问题解决方法
  20. WordPress采集wordpress挂机采集插件

热门文章

  1. 使用 Metal 命令行来构建库
  2. 网络应用程序设计模式:浅谈CS架构与BS架构
  3. PYTHON PLUS 原神——星辉兑换“宗室武器”的总体暴击率提升度算法
  4. 华硕笔记本k555拆机图解_「华硕k401n」华硕K401笔记本电脑拆机清灰步骤详解 - seo实验室...
  5. 泡泡一分钟:BLVD: Building A Large-scale 5D Semantics Benchmark for Autonomous Driving
  6. linux命令查看服务器的型号、序列号、内存插槽数
  7. Git之深入解析reset命令原理以及与checkout命令的区别
  8. SpringMVC小白问题一之启动时配置应用程序监听器错误
  9. 网络协议之:基于UDP的高速数据传输协议UDT
  10. Flutter调试ios中的报错——Xcode更新