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
- android studio 代码混淆配置
- android studio代码混淆配置
- Android Studio代码混淆配置
- Android:Android Studio代码混淆配置
- Android Studio 代码混淆配置大全
- Android Studio实现代码混淆 配置详解
- Android Studio中混淆代码配置步骤
- Android Studio 代码混淆基本配置
- Android Studio 代码混淆配置大全
- Android Studio 代码混淆基本配置
- android studio 代码混淆
- Android studio 混淆代码
- android studio 代码混淆
- android studio 代码混淆
- Android Studio 代码混淆
- android studio 代码混淆
- Android Studio 代码混淆
- android studio 代码混淆
- NSUndoManager 监测摇晃手机选择撤销方法
- 可重入函数& 不可重入函数精讲
- Maven中的核心概念
- 一个app的程序是怎么启动的
- List排序问题:根据list对象的创建时间排序,后用lambda表达式
- android studio代码混淆配置
- 正版ipa如何利用企业证书进行重签名
- JavaWeb 服务启动时,在后台启动加载一个线程。
- Linux kill tomcat服务进程
- 商业智能的基本概念
- 写入文件,追加内容,修改内容;shell,sed
- 合格的数据分析师需要具备哪些能力?
- ubuntu下通过命令打开多个终端并在相应终端执指令
- SQL