用android studio不混淆混淆报的错,这怎么弄

Android Studio 代码混淆注意问题
(点击上方公众号,可快速关注)
来源:伯乐在线专栏作者 - 一叶飘舟
链接:/84057/
点击 → 了解如何加入专栏作者
Java 是一种跨平台的、解释型语言,Java 源代码编译成中间”字节码”存储于 class 文件中。由于跨平台的需要,Java 字节码中包括了很多源代码信息,如变量名、方法名,并且通过这些名称来访问变量和方法,这些符号带有许多语义信息,很容易被反编译成 Java 源代码。为了防止这种现象,我们可以使用 Java 混淆器对 Java 字节码进行混淆。
-include{filename}从给定的文件中读取配置参数
-basedirectory{directoryname}指定基础目录为以后相对的档案名称
-injars{class_path}指定要处理的应用程序jar,war,ear和目录
-outjars{class_path}指定处理完后要输出的jar,war,ear和目录的名称
-libraryjars{classpath}指定要处理的应用程序jar,war,ear和目录所需要的程序库文件
-dontskipnonpubliclibraryclasses指定不去忽略非公共的库类。
-dontskipnonpubliclibraryclassmembers指定不去忽略包可见的库类的成员。
-keep{Modifier}{class_specification}保护指定的类文件和类的成员
-keepclassmembers{modifier}{class_specification}保护指定类的成员,如果此类受到保护他们会保护的更好
-keepclasseswithmembers{class_specification}保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。
-keepnames{class_specification}保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除)
-keepclassmembernames{class_specification}保护指定的类的成员的名称(如果他们不会压缩步骤中删除)
-keepclasseswithmembernames{class_specification}保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)
-printseeds{filename}列出类和类的成员-keep选项的清单,标准输出到给定的文件
-dontshrink不压缩输入的类文件
-printusage{filename}
-dontwarn如果有警告也不终止
-whyareyoukeeping{class_specification}
-dontoptimize不优化输入的类文件
-assumenosideeffects{class_specification}优化时假设指定的方法,没有任何副作用
-allowaccessmodification优化时允许访问并修改有修饰符的类和类的成员
-dontobfuscate不混淆输入的类文件
-printmapping{filename}
-applymapping{filename}重用映射增加混淆
-obfuscationdictionary{filename}使用给定文件中的关键字作为要混淆方法的名称
-overloadaggressively混淆时应用侵入式重载
-useuniqueclassmembernames确定统一的混淆类的成员名称来增加混淆
-flattenpackagehierarchy{package_name}重新包装所有重命名的包并放在给定的单一包中
-repackageclass{package_name}重新包装所有重命名的类文件中放在给定的单一包中
-dontusemixedcaseclassnames混淆时不会产生形形色色的类名
-keepattributes{attribute_name,...}保护给定的可选属性,例如LineNumberTable,LocalVariableTable,SourceFile,Deprecated,Synthetic,Signature,and
InnerClasses.
-renamesourcefileattribute{string}设置源文件中给定的字符串常量
不能混淆的代码
顾名思义,不能混淆代码如果被混淆了,就会出现错误。
需要反射的代码
需要序列号和反序列化的代码(即实现Serializable接口的JavaBean)
与服务端进行元数据交互的JavaBean(JSON、XML中对应的类)
1) Proguard returned with error code 1. See console
更新proguard版本
android-support-v4 不进行混淆
添加缺少相应的库
2) 使用gson包解析数据时,出现 missing type parameter 异常
在 proguard-project.txt 中添加
-dontobfuscate
-dontoptimize
在 proguard-project.txt 中添加
# 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.* { ; }
3) 类型转换错误
在 proguard-project.txt 中添加
-keepattributes Signature
4) 空指针异常
混淆过滤掉相关类与方法
5) java.lang.reflect.UndeclaredThrowableException
-keep interface com.dev.impl.**
6) Error: Unable to access jarfile ..libproguard.jar
7) java.lang.NoSuchMethodError
这也是最常见的问题,因为找不到相关方法,方法被混淆了,混淆过滤掉相关方法便可。
下面是我实际项目中的混淆配置:
#---------------------------------1.实体类---------------------------------
-keep classcom.package.bean.** {*;}
#-------------------------------------------------------------------------
#---------------------------------2.第三方包-------------------------------
-keepattributes*Annotation*
-keepclassmembersclass** {
@org.greenrobot.eventbus.Subscribe;
-keep enumorg.greenrobot.eventbus.ThreadMode{*;}
-keepclassmembers class* extendsorg.greenrobot.eventbus.util.ThrowableFailureEvent{
(java.lang.Throwable);
-keep publicclass* implementscom.bumptech.glide.module.GlideModule
-keep publicenumcom.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[]$VALUES;
-keep classcom.bumptech.glide.** {*;}
#retrofit2
-dontwarn retrofit2.**
-keep classretrofit2.** {*;}
-keepattributes Signature
-keepattributes Exceptions
-dontwarn org.robovm.**
-keep classorg.robovm.** {*;}
-dontwarn com.squareup.okhttp3.**
-keep classcom.squareup.okhttp3.** {*;}
-keep classokhttp3.** {*;}
-keep classokio.** {*;}
-dontwarn sun.security.**
-keep classsun.security.** {*;}
-dontwarn okio.**
-dontwarn okhttp3.**
-dontwarn rx.**
-keep classrx.** {*;}
-dontwarn sun.misc.**
-keepclassmembers classrx.internal.util.unsafe.*ArrayQueue*Field* {
longproducerIndex;
longconsumerIndex;
-keepclassmembers classrx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef{
rx.internal.util.atomic.LinkedQueueNode producerNode;
-keepclassmembers classrx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef{
rx.internal.util.atomic.LinkedQueueNode consumerNode;
-keep classcom.baidu.** {*;}
-dontwarn com.baidu.**
-keep classcom.alipay.android.app.IAlixPay{*;}
-keep classcom.alipay.android.app.IAlixPay$Stub{*;}
-keep classcom.alipay.android.app.IRemoteServiceCallback{*;}
-keep classcom.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep classcom.alipay.sdk.app.PayTask{public*;}
-keep classcom.alipay.sdk.app.AuthTask{public*;}
-keep classcom.alipay.mobilesecuritysdk.*
-keep classcom.ut.*
-dontwarn android.net.**
-keep classandroid.net.** {*;}
-keep classcom.google.gson.** {*;}
#-keep class com.google.**{*;}
-keep classsun.misc.Unsafe{*;}
-keep classcom.google.gson.stream.** {*;}
-keep classcom.google.gson.examples.android.model.** {*;}
-keep classcom.google.** {
-keepclassmembers class* implementsjava.io.Serializable{
staticfinallongserialVersionUID;
privatestaticfinaljava.io.ObjectStreamField[]serialPersistentFields;
privatevoidwriteObject(java.io.ObjectOutputStream);
privatevoidreadObject(java.io.ObjectInputStream);
java.lang.ObjectwriteReplace();
java.lang.ObjectreadResolve();
-dontwarn com.google.gson.**
-dontwarn com.umeng.**
-keep classcom.umeng.**{*;}
-keep classu.aly.**{*;}
-keep classcom.google.**{*;}
#butterknife
-keep classbutterknife.** {*;}
-dontwarn butterknife.internal.**
-keepclass**$$ViewBinder{*;}
-keepclasseswithmembernamesclass* {
@butterknife.* ;
-keepclasseswithmembernamesclass* {
@butterknife.* ;
-dontwarn net.soureceforge.pinyin4j.**
-dontwarn demo.**
-libraryjars src/libs/pinyin4j-2.5.0.jar
-keep classnet.sourceforge.pinyin4j.** {*;}
-keep classdemo.** {*;}
-keep classcom.hp.** {*;}
#httpclient (org.apache.http.legacy.jar)
-dontwarn android.net.compatibility.**
-dontwarn android.net.http.**
-dontwarn com.android.internal.http.multipart.**
-dontwarn org.apache.commons.**
-dontwarn org.apache.http.**
-dontwarn org.apache.http.protocol.**
-keep classandroid.net.compatibility.**{*;}
#-keep class android.net.http.**{*;}
-keep classcom.android.internal.http.multipart.**{*;}
-keep classorg.apache.commons.**{*;}
-keep classorg.apache.org.**{*;}
-keep classorg.apache.harmony.**{*;}
#lib-wheel
-dontwarn kankan.wheel.**
-keep classkankan.wheel.**{*;}
#PhotoPicker
-dontwarn me.iwf.photopicker.**
-keep classme.iwf.photopicker.**{*;}
#nineoldandroids
-dontwarn com.nineoldandroids.*
-keep classcom.nineoldandroids.** {*;}
-dontwarn com.tencent.mm.**
-keep classcom.tencent.mm.**{*;}
#topsnackbar
-dontwarn com.androidadvance.topsnackbar.**
-keep classcom.androidadvance.topsnackbar.**{*;}
#pull_recyclerview_library
-dontwarn com.cundong.recyclerview.**
-keep classcom.cundong.recyclerview.**{*;}
#-------------------------------------------------------------------------
#---------------------------------3.与js互相调用的类------------------------
#-------------------------------------------------------------------------
#---------------------------------4.反射相关的类和方法-----------------------
#----------------------------------------------------------------------------
#-------------------------------------------基本不用动区域--------------------------------------------
#---------------------------------基本指令区----------------------------------
-optimizationpasses5
-dontskipnonpubliclibraryclassmembers
-printmapping proguardMapping.txt
-optimizations!code/simplification/cast,!field/*,!class/merging/*
-keepattributes *Annotation*,InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
#-ignorewarnings
#----------------------------------------------------------------------------
#---------------------------------默认保留区---------------------------------
-keep publicclass* extendsandroid.app.Activity
-keep publicclass* extendsandroid.app.Application
-keep publicclass* extendsandroid.app.Service
-keep publicclass* extendsandroid.content.BroadcastReceiver
-keep publicclass* extendsandroid.content.ContentProvider
-keep publicclass* extendsandroid.app.backup.BackupAgentHelper
-keep publicclass* extendsandroid.preference.Preference
-keep publicclass* extendsandroid.view.View
-keep publicclasscom.android.vending.licensing.ILicensingService
-keep classandroid.support.** {*;}
-keep publicclass* extendsandroid.os.IInterface
-keep publicclass* extendsandroid.view.View{
*** get*();
voidset*(***);
public(android.content.Context);
public(android.content.Context,android.util.AttributeSet);
public(android.content.Context,android.util.AttributeSet,int);
-keepclasseswithmembersclass* {
public(android.content.Context,android.util.AttributeSet);
public(android.content.Context,android.util.AttributeSet,int);
-keepclassmembers class* implementsjava.io.Serializable{
staticfinallongserialVersionUID;
privatestaticfinaljava.io.ObjectStreamField[]serialPersistentFields;
privatevoidwriteObject(java.io.ObjectOutputStream);
privatevoidreadObject(java.io.ObjectInputStream);
java.lang.ObjectwriteReplace();
java.lang.ObjectreadResolve();
-keep class**.R$* {
-keepclassmembersclass* {
void*(**On*Event);
-keepclasseswithmembernamesclass* {# 保持 native 方法不被混淆
-keepclasseswithmembersclass* {# 保持自定义控件类不被混淆
public(android.content.Context,android.util.AttributeSet);
-keepclasseswithmembersclass* {# 保持自定义控件类不被混淆
public(android.content.Context,android.util.AttributeSet,int);
-keepclassmembers class* extendsandroid.app.Activity{# 保持自定义控件类不被混淆
publicvoid*(android.view.View);
-keepclassmembersenum* {# 保持枚举 enum 类不被混淆
publicstatic**[]values();
publicstatic** valueOf(java.lang.String);
-keep class* implementsandroid.os.Parcelable{# 保持 Parcelable 不被混淆
publicstaticfinalandroid.os.Parcelable$Creator *;
#----------------------------------------------------------------------------
#---------------------------------webview------------------------------------
-keepclassmembers classfqcn.of.java.interface.for.webview{
-keepclassmembers class* extendsandroid.webkit.webViewClient{
publicvoid*(android.webkit.WebView,java.lang.String,android.graphics.Bitmap);
publicboolean*(android.webkit.WebView,java.lang.String);
-keepclassmembers class* extendsandroid.webkit.webViewClient{
publicvoid*(android.webkit.webView,jav.lang.String);
#-------------------------------------------------
#-------------------------------------------------
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点ul').hide()" onmouseenter="jQuery('.sitegroup>ul').show()">
绔嬪嵆鍏呭}

我要回帖

更多关于 android studio不混淆 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信