博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android混淆配置及总结
阅读量:4137 次
发布时间:2019-05-25

本文共 5148 字,大约阅读时间需要 17 分钟。

Android打正式的release包混淆是必备的,避免APP被反编译,使项目中隐秘的技术或信息被别人查看。

Android studio则写在proguard-rules.pro中,当然写在proguard-android.txt中也可以。

 

gradle配置

buildTypes {        release {                   buildConfigField "boolean", "LOG_DEBUG", "false" //不显示log               zipAlignEnabled true     //Zipalign优化              shrinkResources true    // 移除无用的resource文件              minifyEnabled true     //混淆               proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'         }}

 

 经常用第三方SDK的时候会忘了顺手把混淆加进来,到了打包的时候又去找,很是麻烦,因此在这里总结一下

-optimizationpasses 5 # 指定代码的压缩级别-dontusemixedcaseclassnames # 是否使用大小写混合-dontpreverify # 混淆时是否做预校验-verbose # 混淆时是否记录日志-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法-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 # 保持哪些类不被混淆-keepclasseswithmembernames class * { # 保持 native 方法不被混淆    native 
;}-keepclasseswithmembers class * { # 保持自定义控件类不被混淆 public
(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembers class * {
# 保持自定义控件类不被混淆 public
(android.content.Context, android.util.AttributeSet, int); }-keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆 public void *(android.view.View);}-keepclassmembers enum * { # 保持枚举 enum 类不被混淆 public static **[] values(); public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable {#保持Parcelable不被混淆 public static final android.os.Parcelable$Creator *;}# Explicitly preserve all serialization members. The Serializable interface# is only a marker interface, so it wouldn't save them. # 显式保留所有序列化成员。可序列化接口只是一个标记接口,因此不会保存它们。-keep public class * implements java.io.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();}-keepclassmembers class * { public
(org.json.JSONObject);}#com.demo.demo 是你的包名-keep public class com.demo.demo.R$*{ public static final int *;}

 

1. Gson  

# removes such information by default, so configure it to keep all of it.-keepattributes Signature# Gson specific classes-keep class sun.misc.Unsafe { *; }-keep class com.google.gson.stream.** { *; }# Application classes that will be serialized/deserialized over Gson-keep class com.google.gson.examples.android.model.** { *; }-keep class com.google.gson.** { *;}#这句非常重要,主要是滤掉 com.demo.demo.bean包下的所有.class文件不进行混淆编译,com.demo.demo是你的包名-keep class com.demo.demo.bean.** {
*;}

 

2. Butterknife 

-keep class butterknife.** { *; }-dontwarn butterknife.internal.**-keep class **$$ViewBinder { *; }-keepclasseswithmembernames class * {       @butterknife.* 
;}-keepclasseswithmembernames class * { @butterknife.*
;}

 

3. SlidingMenu  

-dontwarn com.jeremyfeinstein.slidingmenu.lib.**-keep class com.jeremyfeinstein.slidingmenu.lib.**{*;}

 

4. ImageLoader   

#Universal Image Loader-keep class com.nostra13.universalimageloader.** { *; }-keepattributes Signature

 

5. ShareSDK   

-keep class cn.sharesdk.**{*;}-keep class com.sina.**{*;}-keep class **.R$* {*;}-keep class **.R{*;}-dontwarn cn.sharesdk.**-dontwarn **.R$*-dontwarn com.tencent.**-keep class com.tencent.** {*;}

 

6. Okhttp-OkGo  

#okhttp-dontwarn okhttp3.**-keep class okhttp3.**{ *;} #okio -dontwarn okio.** -keep class okio.**{ *;}

 

7. RxJava    

# RX-dontwarn rx.**-keepclassmembers class rx.** { *; }# retrolambda-dontwarn java.lang.invoke.*

 

8. Glide    

-keep public class * implements com.bumptech.glide.module.GlideModule-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {     **[] $VALUES;   public *;}

 

9. 环信SDK  

-keep class com.easemob.** {*;}-keep class org.jivesoftware.** {*;}-keep class org.apache.** {*;}-dontwarn  com.easemob.**#2.0.9后的不需要加下面这个keep#-keep class org.xbill.DNS.** {*;}#另外,demo中发送表情的时候使用到反射,需要keep SmileUtils-keep class com.easemob.chatuidemo.utils.SmileUtils {*;}#注意前面的包名,如果把这个类复制到自己的项目底下,比如放在com.example.utils底下,应该这么写(实际要去掉#)#-keep class com.example.utils.SmileUtils {*;}#如果使用easeui库,需要这么写-keep class com.easemob.easeui.utils.EaseSmileUtils {*;}#2.0.9后加入语音通话功能,如需使用此功能的api,加入以下keep-dontwarn ch.imvs.**-dontwarn org.slf4j.**-keep class org.ice4j.** {*;}-keep class net.java.sip.** {*;}-keep class org.webrtc.voiceengine.** {*;}-keep class org.bitlet.** {*;}-keep class org.slf4j.** {*;}-keep class ch.imvs.** {*;}

 

转载地址:http://lrovi.baihongyu.com/

你可能感兴趣的文章
NG深度学习第一门课作业2 通过一个隐藏层的神经网络来做平面数据的分类
查看>>
leetcode刷题234 回文链表 Palindrome Linked List(简单) Python Java
查看>>
NG深度学习第二门课作业1-1 深度学习的实践
查看>>
Ubuntu下安装Qt
查看>>
Qt札记
查看>>
我的vimrc和gvimrc配置
查看>>
hdu 4280
查看>>
禁止使用类的copy构造函数和赋值操作符
查看>>
C++学习路线
查看>>
私有构造函数
查看>>
组队总结
查看>>
TitledBorder 设置JPanel边框
查看>>
DBCP——开源组件 的使用
查看>>
抓包工具
查看>>
海量数据相似度计算之simhash和海明距离
查看>>
DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)
查看>>
DeepLearning tutorial(6)易用的深度学习框架Keras简介
查看>>
DeepLearning tutorial(7)深度学习框架Keras的使用-进阶
查看>>
流形学习-高维数据的降维与可视化
查看>>
Python-OpenCV人脸检测(代码)
查看>>