Android混淆

Proguard功能

1、压缩(shrink):没有被调用的代码删除
2、优化(optimize):优化java字节码,同时移除没有使用的到指令。
3、混淆(proguard):使用无意识简短字母组合,对类名、字段名称和方法名称进行重新命名。
4、预检验(preverify):对上面三点处理后的代码进行预检验。rt -a ACTION

哪些不应该混淆

使用了自定义控件那么要保证它们不参与混淆
保证枚举、注解、泛型不被混淆
对第三方库中的类不进行混淆
运用了反射的类也不进行混淆
使用了 Gson 之类的工具要使 JavaBean 类即实体类不被混淆
在引用第三方库的时候,一般会标明库的混淆规则的,建议在使用的时候就把混淆规则添加上去,免得到最后才去找
有用到 WebView 的 JS 调用也需要保证写的接口方法不混淆,原因和第一条一样
Parcelable 的子类和 Creator 静态成员变量不混淆,否则会产生 Android.os.BadParcelableException 异常
使用的四大组件,自定义的Application* 实体类
JNI中调用的类
Layout布局使用的View构造函数(自定义控件)、android:onClick等。

配置文件

为了方便管理,将混淆配置文件分为三个proguard-common.pro,proguard-module.pro,proguard-third-party.pro 。具体说明详见各文件

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-common.pro', 'proguard-module.pro', 'proguard-third-party.pro'

踩过的坑

1.如果项目中使用了AspectJ,混淆注意点:需要keep住包含该注解的类(切面)
2.编译报错:

Duplicate zip entry [153.jar:com/google/zxing/ChecksumException.class]

解决方法:
1)全局搜这个类ChecksumException,发现在core这个jar包里,可能版本号不同

2)显示依赖关系:
./gradlew app:dependencies > 1.txt (app moudle名称)

3)在1.txt中搜core发现有两个地方都包含这个core jar包
±-- com.google.zxing:javase:3.3.3
| ±-- com.google.zxing:core:3.3.3

±-- com.journeyapps:zxing-android-embedded:3.3.0
| ±-- com.google.zxing:core:3.2.1 -> 3.3.3

4)在build.gradle中通过exclude去掉一个jar
implementation (‘com.google.zxing:javase:3.3.3’){
exclude group: ‘com.google.zxing’, module: ‘core’
}

5)有时候需要exclude整个group;
implementation (‘com.airbnb.android:lottie:2.7.0’){
exclude group: ‘com.android.support’
}

implementation fileTree(include: ‘QingLink.aar’, dir: ‘…/…/…/…/os_extends/libs_release’)

proguard-common.pro

-optimizationpasses 5 # 指定代码的优化级别
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*,!code/allocation/variable  #混淆时所采用的算法
-dontshrink #默认压缩,可能有问题
-dontoptimize #关闭优化功能,这样一来,所谓的-optimizations和-optimizationpasses就没有意义

-ignorewarnings # 忽略警告
-ignorewarning
-dontpreverify # 关闭预校验功能
-dontusemixedcaseclassnames #是否使用大小写混合
-dontskipnonpubliclibraryclasses #不跳过jars中的非public classes 

-verbose    # 混淆时是否记录日志,gradle build时在本项目根目录输出
-dump proguard/class_files.txt #输出apk包内所有class的内部结构
-printseeds proguard/seeds.txt #输出未混淆的类和成员
-printusage proguard/unused.txt #输出apk中删除的代码
-printmapping proguard/mapping.txt #输出混淆前后的映射


-keepattributes Exceptions # 解决AGPBI警告
-keepattributes Exceptions,InnerClasses,...
-keepattributes EnclosingMethod
-keepattributes SourceFile,LineNumberTable #运行抛出异常时保留代码行号

#保留泛型、内部类、封闭方法,为了反射正常运行
-keepattributes Signature,InnerClasses,EnclosingMethod     

#保留注解
-keepattributes *Annotation*
-keep class * extends java.lang.annotation.Annotation { *; }
-keep interface * extends java.lang.annotation.Annotation { *; }

#保留继承自activity,application,service,broadcastReceiver,contentprovider
-keep public class * extends android.app.Fragment
-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


#保留android.support
-dontwarn android.support.**
-keep class android.support.** { *; }
-keep interface android.support.** { *; }



#保留androidx包
-dontwarn androidx.**
-keep class androidx.** {*;}
-keep interface androidx.** {*;}
-keep public class * extends androidx.**

#保留Android的一些类,官网上的
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public class * extends android.support.multidex.MultiDexApplication
-keep public class * extends android.view.View
-keep class org.** {*;}
-keep interface org.** {*;}
-dontwarn org.**
-keep class com.android.**{*;}

#保留R文件下面的资源
-keep class **.R$* {*;}

#保留继承自 View 的 setXx() 和 getXx() 方法,因为属性动画会用到相应的 setter 和 getter
-keepclassmembers public class * extends android.view.View {
   void set*(***);
   *** get*();
}

#保留自定义控件
-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);
}

#保留Activity中参数是View的方法,因为在XML中配置android:onClick="buttonClick"属性时,点击该按钮时就会调用Activity中的buttonClick(View view)方法
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

#保留带有回调函数的
-keepclassmembers class * {
    void **(**Event);
    void **(**Listener);
}


#保留R类里及其所有内部static类中的所有static变量字段,$是用来分割内嵌类与其母体的标志
-keep public class **.R$*{
   public static final int *;
}
-keepclassmembers class **.R$* {
	public static <fields>;
}

#与JS交互
-keepattributes *JavascriptInterface*
#WebView
-keep class **.Webview2JsInterface { *; }
-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);
     public void *(android.webkit.webView, jav.lang.String);
}
-keepclassmembers class * extends android.webkit.WebChromeClient {
     public void *(android.webkit.WebView,java.lang.String);
}


#保留枚举enum类的values和valueOf
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

#保留native方法JNI)
-keepclasseswithmembernames class * {
    native <methods>;
}

#保留Parcelable
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

#需要序列化和反序列化的类不能被混淆(注:Java反射用到的类也不能被混淆)
-keep public class * implements java.io.Serializable {
   public *;
}

#保留Serializable接口的子类中指定的某些成员变量和方法
-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();
}

-keepclassmembers class * {
   public <init> (org.json.JSONObject);
}


-keep class **.*bean*.** {*;}
-keep class **.*Bean*.** {*;}
-keep class **.*model*.** {*;}
-keep class **.*Model*.** {*;}

proguard-module.pro

#---------------aopLib----------------
-keep class com.qinggan.aop.prefs.** {*;}
-keep interface com.qinggan.aop.prefs.** {*;}
-dontwarn com.qinggan.aop.prefs.**
-keep class com.qinggan.aop.** {*;}

#---------------app----------------
-keep class com.qinggan.app.arielapp.ui.** {*;}
-dontwarn com.qinggan.app.arielapp.ui.**
-keep class com.qinggan.app.arielapp.user.Bean.** {*;}
-dontwarn com.qinggan.app.arielapp.user.Bean.**
-keep class com.qinggan.app.arielapp.vehiclecontrol.** {*;}
-dontwarn com.qinggan.app.arielapp.vehiclecontrol.**
-keep class com.qinggan.app.arielapp.minor.database.bean.** {*;}
-dontwarn com.qinggan.app.arielapp.minor.database.bean.**
-keep class com.qinggan.app.arielapp.minor.entity.** {*;}
-dontwarn com.qinggan.app.arielapp.minor.entity.**
-keep class com.qinggan.app.arielapp.minor.phone.bean.** {*;}
-dontwarn com.qinggan.app.arielapp.minor.phone.bean.**
-keep class com.qinggan.app.arielapp.minor.push.bean.** {*;}
-dontwarn com.qinggan.app.arielapp.minor.push.bean.**
-keep class com.qinggan.app.arielapp.capability.log.model.** {*;}
-dontwarn com.qinggan.app.arielapp.capability.log.model.**
-keep class com.qinggan.app.arielapp.capability.push.factory.model.** {*;}
-dontwarn com.qinggan.app.arielapp.capability.push.factory.model.**
-keep class com.qinggan.app.arielapp.capability.upgrade.ota.model.** {*;}
-dontwarn com.qinggan.app.arielapp.capability.upgrade.ota.model.**
-keep class com.qinggan.app.cast.receiver.model.** {*;}
-dontwarn com.qinggan.app.cast.receiver.model.**
-keep class com.qinggan.app.cast.window.view.model.** {*;}
-dontwarn com.qinggan.app.cast.window.view.model.**
-keep class com.qinggan.app.arielapp.aop.** {*;}
-keep interface com.qinggan.app.arielapp.aop.** {*;}
-dontwarn com.qinggan.app.arielapp.aop.**

#---------------duerstt----------------
-keep class com.baidu.dcs.acl.** {*;}
-dontwarn com.baidu.dcs.acl.**
-keep class com.qinggan.app.duerstt.** {*;}
-dontwarn com.qinggan.app.duerstt.**

#---------------lightnavi----------------
-keep class com.pateo.lightnavi.typedef.** {*;}
-dontwarn com.pateo.lightnavi.typedef.**

#---------------location----------------
-keep class com.qinggan.app.dcs.location.data.** {*;}
-dontwarn com.qinggan.app.dcs.location.data.**

#---------------photopicker----------------
-keep class me.iwf.photopicker.entity.** {*;}
-dontwarn me.iwf.photopicker.entity.**

#---------------qgftplibrary----------------
-keep class com.qinggan.ftp.library.socket.** {*;}
-dontwarn com.qinggan.ftp.library.socket.**

#---------------recovery----------------
-keep class com.recovery.exception.** {*;}
-dontwarn com.recovery.exception.**

#---------------recyclerview-swipe----------------
-keep class com.yanzhenjie.recyclerview.swipe.** {*;}
-dontwarn com.yanzhenjie.recyclerview.swipe.**

#---------------tracking----------------
-keep class com.qinggan.app.tracking.** {*;}
-dontwarn com.qinggan.app.tracking.**

#---------------ucrop----------------
-keep class com.yalantis.ucrop.model.** {*;}
-dontwarn com.yalantis.ucrop.model.**

#---------------virtualclick----------------
-keep class com.qinggan.app.virtualclick.Bean.** {*;}
-dontwarn com.qinggan.app.virtualclick.Bean.**
-keep class  com.qinggan.app.virtualclick.wechat.** {*;}
-dontwarn  com.qinggan.app.virtualclick.wechat.**

#---------------voiceapi----------------
-keep class com.qinggan.app.voiceapi.bean.** {*;}
-dontwarn com.qinggan.app.voiceapi.bean.**

#---------------bluetoothkeyservice----------------
-keep class com.qinggan.bluekey.model.** {*;}
-dontwarn com.qinggan.bluekey.model.**
-keep class com.bangcle.** {*;}
-dontwarn com.bangcle.**
-keep class com.qinggan.bluekey.** {*;}
-dontwarn com.qinggan.bluekey.**

#---------------mapautosdk----------------


#---------------navicloud----------------
-keep class com.pateo.navicloud.footprint.** {*;}
-dontwarn com.pateo.navicloud.footprint.**
-keep class com.pateo.navicloud.** {*;}
-dontwarn com.pateo.navicloud.*

#---------------onlineservice----------------
-keep class com.qinggan.mobile.tsp.auth.** {*;}
-dontwarn com.qinggan.mobile.tsp.auth.**
-keep class com.qinggan.mobile.tsp.bean.** {*;}
-dontwarn com.qinggan.mobile.tsp.bean.**
-keep class com.qinggan.mobile.tsp.models.** {*;}
-dontwarn com.qinggan.mobile.tsp.models.**
-keep class com.qinggan.mobile.tsp.** {*;}
-dontwarn com.qinggan.mobile.tsp.**


#---------------qgttssdk----------------
-keep class com.qinggan.tts.http.bean.** {*;}
-dontwarn com.qinggan.tts.http.bean.**
-keep class com.qinggan.tts.** {*;}
-dontwarn com.qinggan.tts.**

#---------------qinglink----------------
-keep class com.qinggan.qinglink.** {*;}
-keep interface com.qinggan.qinglink.**
-dontwarn com.qinggan.qinglink.**

proguard-third-party.pro

#----------------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;
}



#----------------okhttp3-------------------
-dontwarn javax.annotation.**
# 资源加载了相对路径,因此必须保留此类的包。
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
# Animal Sniffer compileOnly依赖项,以确保API与旧版本的Java兼容
-dontwarn org.codehaus.mojo.animal_sniffer.*
# OkHttp平台仅在JVM上使用,并且当Conscrypt依赖性可用时。
-dontwarn okhttp3.internal.platform.ConscryptPlatform



# ---------------ButterKnife--------------
# 保留生成Unbinder的生成类
-keep public class * implements butterknife.Unbinder { public <init>(**, android.view.View); }
# 防止使用ButterKnife注释的类型的混淆,因为简单的名称用于反射地查找生成的ViewBinding
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}
 -keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}



# -------------------Glide--------------------------
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
    **[] $VALUES;
    public *;
}



# ------------------retrofit2--------------------------------
# Retrofit会对方法和参数注释进行反射。
-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations
# 优化时保留服务方法参数。
-keepclassmembers,allowshrinking,allowobfuscation interface * {
    @retrofit2.http.* <methods>;
}
# 忽略用于构建工具的注释。
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
# 忽略JSR 305注释以嵌入可为空性信息。
-dontwarn javax.annotation.**
# 由NoClassDefFoundError守护 try / catch,仅在类路径上使用。
-dontwarn kotlin.Unit
# 顶级功能,只能由Kotlin使用。
-dontwarn retrofit2.KotlinExtensions
-dontwarn retrofit.**
-keep class retrofit.** { *; }
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Exceptions



# ------------------jetpack--------------------------------
# Lifecycle
# LifecycleObserver的空构造函数被proguard认为是未使用的
-keepclassmembers class * implements android.arch.lifecycle.LifecycleObserver {
    <init>(...);
}
# 保留生命周期状态和事件枚举值
-keepclassmembers class android.arch.lifecycle.Lifecycle$State { *; }
-keepclassmembers class android.arch.lifecycle.Lifecycle$Event { *; }
-keepclassmembers class * {
    @android.arch.lifecycle.OnLifecycleEvent *;
}
-keepclassmembers class * implements android.arch.lifecycle.LifecycleObserver {
    <init>(...);
}

-keep class * implements android.arch.lifecycle.LifecycleObserver {
    <init>(...);
}

# ViewModel
# ViewModel的空构造函数被proguard视为未使用
-keepclassmembers class * extends android.arch.lifecycle.ViewModel {
    <init>(...);
}

-keepclassmembers class android.arch.** { *; }
-keep class android.arch.** { *; }
-dontwarn android.arch.**

# paging
-dontwarn android.arch.paging.DataSource

# Room 数据库
-dontwarn android.arch.persistence.room.paging.LimitOffsetDataSource

# databinding
-dontwarn android.databinding.**
-keep class android.databinding.** { *; }
-dontwarn com.android.databinding.**
-keep class com.android.databinding.** { *; }



# ---------------------Gson-------------------------
# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { <fields>; }

# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
    @com.google.gson.annotations.SerializedName <fields>;
}


# --------------------tencent-bugly-------------------------
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}



# --------------------sharesdk-------------------------
-keep class cn.sharesdk.**{*;}
-keep class com.sina.**{*;}



# --------------------zxing-------------------------
-keep class com.google.zxing.** {*;}
-dontwarn com.google.zxing.**
-keep class com.mining.app.zxing.camera.** {*;}
-dontwarn com.mining.app.zxing.camera.**
-keep class com.staryea.** {*;}
-dontwarn com.staryea.**



# -------------------百度地图-------------------------
-keep class com.baidu.** {*;}
-keep class vi.com.** {*;}
-keep class mapsdkvi.com.** {*;}
-dontwarn com.baidu.**



# -------------------友盟-------------------------
-dontwarn com.umeng.**
-keepattributes SourceFile,LineNumberTable
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**
-keep public class com.umeng.socialize.* {*;}
-keep public class javax.**
-keep public class android.webkit.**
-keep class com.umeng.scrshot.**
-keep class com.umeng.socialize.sensor.**
-keep class im.yixin.sdk.api.YXMessage {*;}
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}
-keepclassmembers class * {
   public <init> (org.json.JSONObject);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep public class com.umeng.fb.ui.**
-keep public class * extends com.umeng.**


# -------------------腾讯全家桶-------------------------
-keep public interface com.tencent.**
-keep public class com.tencent.** {*;}
-dontwarn com.tencent.**


# -------------------eventbus 3.0-------------------------
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}



# -------------------picasso-------------------------
-keep class com.squareup.picasso.** {*; }
-dontwarn com.squareup.picasso.**


# -------------------volley-------------------------
-keep class com.android.volley.** {*;}
-keep class com.android.volley.toolbox.** {*;}
-keep class com.android.volley.Response$* { *; }
-keep class com.android.volley.Request$* { *; }
-keep class com.android.volley.RequestQueue$* { *; }
-keep class com.android.volley.toolbox.HurlStack$* { *; }
-keep class com.android.volley.toolbox.ImageLoader$* { *; }



# -------------------alibaba-------------------------
-dontwarn com.alibaba.**
-keep class com.alibaba.** { *; }


# -------------------avatarimageview-------------------------
-dontwarn cn.carbs.android.avatarimageview.library.**
-keep class cn.carbs.android.avatarimageview.library.** { *; }


# -------------------bingoogolapple-------------------------
-dontwarn cn.bingoogolapple.baseadapter.**
-keep class cn.bingoogolapple.baseadapter.** { *; }



# -------------------olive-------------------------
-dontwarn com.oliveapp.**
-keep class com.oliveapp.** { *; }


# -------------------lottie-------------------------
-keep class com.airbnb.lottie.** { *; }

-dontwarn xcoding.commons.**
-keep class xcoding.commons.** { *; }


-dontwarn net.**
-keep class net.** { *; }

-keep class com.github.** {*;}
-dontwarn com.github.**


-dontwarn junit.**
-keep class junit.** { *; }


-dontwarn jp.wasabeef.glide.transformations.**
-keep class jp.wasabeef.glide.transformations.** { *; }


-dontwarn javax.inject.**
-keep class javax.inject.** { *; }


-dontwarn io.reactivex.**
-keep class io.reactivex.** { *; }


-dontwarn com.yanzhenjie.loading.**
-keep class com.yanzhenjie.loading.** { *; }


-dontwarn com.ximpleware.**
-keep class com.ximpleware.** { *; }
-dontwarn java_cup.**
-keep class java_cup.** { *; }


-dontwarn com.thoughtworks.xstream.**
-keep class com.thoughtworks.xstream.** { *; }


-dontwarn om.tbruyelle.rxpermissions.**
-keep class om.tbruyelle.rxpermissions.** { *; }


-dontwarn com.squareup.**
-keep class com.squareup.** { *; }


-keep class okio.** { *; }
-dontwarn okio.**


-dontwarn com.scwang.smartrefresh.layout.**
-keep class com.scwang.smartrefresh.layout.** { *; }


-dontwarn com.nineoldandroids.**
-keep class com.nineoldandroids.** { *; }



-dontwarn com.lcodecore.tkrefreshlayout.**
-keep class com.lcodecore.tkrefreshlayout.** { *; }


-dontwarn com.journeyapps.barcodescanner.**
-keep class com.journeyapps.barcodescanner.** { *; }



-dontwarn com.joooonho.**
-keep class com.joooonho.** { *; }


-dontwarn com.ibm.icu.**
-keep class com.ibm.icu.** { *; }


-dontwarn com.github.jaiimageio.**
-keep class com.github.jaiimageio.** { *; }



-dontwarn com.flyco.tablayout.**
-keep class com.flyco.tablayout.** { *; }


-dontwarn com.contrarywind.**
-keep class com.contrarywind.** { *; }


-dontwarn com.hp.hpl.sparta.**
-keep class com.hp.hpl.sparta.** { *; }
-dontwarn net.sourceforge.pinyin4j.**
-keep class net.sourceforge.pinyin4j.** { *; }


-dontwarn com.fasterxml.jackson.**
-keep class com.fasterxml.jackson.** { *; }



-dontwarn com.beust.jcommander.**
-keep class com.beust.jcommander.** { *; }



-dontwarn com.almworks.sqlite4java.**
-keep class com.almworks.sqlite4java.** { *; }


-dontwarn javolution.util.stripped.**
-keep class javolution.util.stripped.** { *; }



-dontwarn edu.emory.mathcs.backport.java.util.**
-keep class edu.emory.mathcs.backport.java.util.** { *; }

-dontwarn com.gzt.faceid5sdk.**
-keep class com.gzt.faceid5sdk.** { *; }


-keep class com.google.** {*;}
-dontwarn com.google.**
-keep class com.googlecode.** {*;}
-dontwarn com.googlecode.**

-keep class javazoom.jl.** {*;}
-dontwarn javazoom.jl.**

-keep class me.iwf.** {*;}
-dontwarn me.iwf.**

-keep class net.sf.** {*;}
-dontwarn net.sf.**


-keep class xcoding.commons.** {*;}
-dontwarn xcoding.commons.**

-keep class a.** {*;}
-dontwarn a.**

-keep class b.** {*;}
-dontwarn b.**


-keep class com.a.a** {*;}
-dontwarn com.a.a**


-keep class com.fasterxml.** {*;}
-dontwarn com.fasterxml.**

-keep class com.staryea.** {*;}
-dontwarn com.staryea.**

-keep class rx.internal.** {*;}
-dontwarn rx.internal.**

-keep class com.j256.** {*;}
-dontwarn com.j256.**
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值