android studio代码混淆配置

来源:互联网 发布:如何开通淘宝网店步骤 编辑:程序博客网 时间:2024/05/14 16:08

android studio代码混淆文本编写

混淆相关

-在build.gradle里面开启minifyEnabled *true

build.gradle配置

 debug {               minifyEnabled true            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.pro'        }        /*注:proguard-project.pro为混淆文本名称

主工程目录下创建proguard-project.pro

-配置如下

#---------------------------------基本指令区----------------------------------#指定代码的压缩级别-optimizationpasses 5 #预校验-dontpreverify-printmapping proguardMapping.txt# 指定混淆时采用的算法,后面的参数是一个过滤器-optimizations !code/simplification/cast,!field/*,!class/merging/*#保护注解-keepattributes *Annotation*,InnerClasses-keep class * extends java.lang.annotation.Annotation { *; }#避免混淆泛型-keepattributes Signature-keepattributes SourceFile,LineNumberTable-ignorewarnings     #忽略警告 #混淆时是否记录日志-verbose#包明不混合大小写-dontusemixedcaseclassnames#优化  不优化输入的类文件-dontoptimize#---------------------------------默认保留区---------------------------------#继承activity,application,service,broadcastReceiver,contentprovider....不进行混淆#-keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.support.multidex.MultiDexApplication-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 com.android.vending.licensing.ILicensingService-keep class android.support.** {*;}-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);}#这个主要是在layout 中写的onclick方法android:onclick="onClick",不进行混淆-keepclassmembers class * extends android.app.Activity {   public void *(android.view.View);}#-----------实体类---------#修改成你对应的包名-keep public class 当前包名.**{*;}#保持 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 <fields>;    !private <fields>;    !private <methods>;    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);}#保持 Parcelable 不被混淆-keep class * implements android.os.Parcelable {  public static final android.os.Parcelable$Creator *;}#Parcelable实现类除了不能混淆本身之外,为了确保类成员也能够被访问,类成员也不能被混淆-keepclassmembers class * implements android.os.Parcelable { public <fields>; private <fields>;}#不混淆资源类-keep class **.R$* { *;}-keepclassmembers class * {    void *(*Event);}#// natvie 方法不混淆-keepclasseswithmembernames class * {    native <methods>;}#---------------------------------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);}# support-v4#https://stackoverflow.com/questions/18978706/obfuscate-android-support-v7-widget-gridlayout-issue-dontwarn android.support.v4.**-keep class android.support.v4.app.** { *; }-keep interface android.support.v4.app.** { *; }-keep class android.support.v4.** { *; }#---------------------------------第三方jar包--------------------------------keepclasseswithmembernames class com.xiaomi.**{*;}-keep public class * extends com.xiaomi.mipush.sdk.PushMessageReceiver-dontwarn com.xiaomi.push.service.b-keep class org.apache.http.**-keep interface org.apache.http.**-dontwarn org.apache.**-dontwarn android.support.**#不去忽略非公共的库类-dontskipnonpubliclibraryclassmembers-dontskipnonpubliclibraryclasses#--------------------阿里Hotfix----------------------keep class * extends java.lang.annotation.Annotation-keepclasseswithmembernames class * {    native <methods>;}-keep class com.alipay.euler.andfix.**{    *;}-keep class com.taobao.hotfix.aidl.**{*;}-keep class com.ta.utdid2.device.**{*;}-keep class com.taobao.hotfix.HotFixManager{    public *;}#---fastjson----keep class  com.alibaba.fastjson.** {*;}-dontwarn com.alibaba.fastjson.**-keepclassmembers class * {public <methods>;}#------gson-------dontwarn com.google.gson.**-keep class com.google.gson.** {*;}-keep class com.google.**{*;}-keep class sun.misc.Unsafe { *; }-keep class com.google.gson.stream.** { *; }-keep class com.google.gson.examples.android.model.** { *; }#dom4j-dontwarn org.dom4j.**-keep class org.dom4j.** {*;}#-libraryjars libs/httpcore-4.3.2.jar-dontwarn  org.apache.http.** -keep class org.apache.http.** { *; } #----------以下内容可根据情况开启混淆日志记录-------##记录生成的日志数据,gradle build时在本项目根目录输出###apk 包内所有 class 的内部结构-dump proguard/class_files.txt#未混淆的类和成员-printseeds proguard/seeds.txt#列出从 apk 中删除的代码-printusage proguard/unused.txt#混淆前后的映射-printmapping proguard/mapping.txt#移除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(...);#}

注:关于代码混淆做法基本是以上内容,除第三方jar包的配置需要区分处理,其他配置基本通用。

第三方jar包的配置优先推荐去官网下载sdk 会有混淆做法,当然熟练的话完全可以自己配置。
-jar包配置

第三方jar有两种依赖方式

1.maven不需要声明该jar包

使用-keep包名跳过混淆

-dontwarn忽略混淆警告

2.libs下本地依赖jar包
需要声明

-libraryjars libs/**.jar

使用-keep包名跳过混淆

-dontwarn忽略混淆警告


以上为混淆打包配置基本做法,有问题欢迎私信留言

1 0