音视频聊天软件之 》Android studio 代码混淆

一 、代码的混淆操作步骤:

  1.    打开混淆开关 build.gradle:app> buildTypes> release  minifyEnabled true
release {
            
            //清理无用资源
            shrinkResources true
            //是否启动ZipAlign压缩
            zipAlignEnabled true
            //是否混淆
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            //配置签名
            signingConfig signingConfigs.release
        }

      2.    混淆规则的文件:

    3. 编写混淆的代码:

# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

##***********************************混淆模板*************************##
###混淆规则
## 关闭压缩
#-dontshrink
## 关闭优化
#-dontoptimize
## 关闭混淆
#-dontobfuscate
## 表示保存该包下的类,但是子类会被混淆
#-keep class com.android.xx.*
## 表示保存该包下的类, 子类不会被混淆
#-keep class com.android.xx.**
## 想避免类中的成员不会被混淆
#-keep class com.android.xx.**{*;}
#指定压缩级别 1-7
-optimizationpasses 5

#不跳过非公共的库的类成员
-dontskipnonpubliclibraryclassmembers

#混淆是采用的算法
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

#混淆类中额方法名也混淆了
#-useuniqueclassmembernames

#优化是允许访问并修改修饰符的类和类的成员
-allowaccessmodification

#将文件来源从命名为"SourceFile"字符串
-renamesourcefileattribute SourceFile

#保留行号
-keepattributes SourceFile,LineNumberTable

#保持泛型
-keepattributes Signature
##***********************************************************************##

#保持所有实现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();
}

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

-keepclassmembers class * implements android.os.Parcelable {
    public <fields>;
    private <fields>;
}

# 保持测试相关代码
-dontnote junit.framework.**
-dontnote junit.runner.**
-dontwarn android.test.**
-dontwarn android.support.test.**
-dontwarn org.junit.**

#Fragment不需要在AndroidManifest.xml中注册,需要额外保护下
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
-keep public class * extends androidx.fragment.app.Fragment

#Android SDK
#-keep class android.app.**{*;}
-keep public class * extends androidx.appcompat.app.AppCompatActivity
-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.preference.Preference
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.support.v4.**
-keep public class * extends android.support.annotation.**
-keep public class * extends android.support.v7.**
-keep public class * extends androidx.**
-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 class androidx.** {*;}
-keep class android.**{*;}

#自定义view
-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);
}

# 自己的view
-keep class com.liuguilin.fragment.view.**{*;}

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

#保持native方法不被混淆
-keepclasseswithmembernames class * {
    native <methods>;
}

##****************************以上都是官方通用的模板*************************


##******************************第三方SDK****************

##******************** HttpClient *******************
-keep public class org.apache.commons.httpclient.** {*;}
-keep public class org.apache.commons.httpclient.auth.** {*;}
-keep public class org.apache.commons.httpclient.cookie.** {*;}
-keep public class org.apache.commons.httpclient.methods.** {*;}
-keep public class org.apache.commons.httpclient.params.** {*;}
-keep public class org.apache.commons.httpclient.util.** {*;}
-keep public class org.apache.commons.codec.** {*;}
-keep public class org.apache.commons.codec.net.** {*;}
-keep public class org.apache.commons.codec.binary.** {*;}
-keep public class org.apache.commons.logging.** {*;}
-keep public class org.apache.commons.logging.impl.** {*;}

##************************ Bmob ****************************
# 不混淆BmobSdk
-dontwarn cn.bmob.v3.**
-keep class cn.bmob.v3.** {*;}
-keep class c.b.** {*;}
-keep class c.b.a.** {*;}

#保证继承自BmobObject,BmobUser类的JavaBean不被混淆
-keep class * extends cn.bmob.v3.BmobObject {
    *;
}

#如果你是使用了okhttp,okio的包 请添加一下混淆代码
-dontwarn com.squareup.okhttp.**
-keep class com.squareup.okhttp.** {*;}
-keep interface com.squareup.okhttp.** {*;}

#************************* Rxjava RxAndroid **********************
-dontwarn rx.*
-dontwarn sun.misc.**
-keepclassmembers class rx.internal.util.unsafe.*ArrayQuene*Field*{
    long produceIndex;
    long consumerIndex;
}

-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode producerNode;
    rx.internal.util.atomic.LinkedQueueNode consumerNode;
}

-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode consumerNode;
}

##********************** Gson *************************
# 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.liuguilin.framework.gone.TextBean.** {*;}
-keep class com.liuguilin.framework.gone.TokenBean.** {*;}
-keep class com.liuguilin.framework.gone.VoiceBean.** {*;}

##************************* 3D ***************************

-keep class com.moxun.tagcloudlib.** {*;}

##*************************** circleImageView ******************

-keep class de.hdodenhof.circleimageview.** {*;}

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

##************************** DatePicker 日历 *********************
-keep class cn.aigestudio.datepicker.** {*;}

##************************** Bugly  检查bug *********************
-dontwarn com.tencent.bugly.**
-keep class com.tencent.bugly.** {*;}

##******************************* 高德地图 *******************

#集合包 3D地图 3.3.2 导航1.8.0 定位2.5.0
-dontwarn com.amap.api.**
-dontwarn com.autonavi.**
-keep class com.amap.api.** {*;}
-keep class com.autonavi.** {*;}
#地图服务
-dontwarn com.amap.api.services.**
-keep class com.amap.api.services.** {*;}
# 3D地图
-dontwarn com.amap.api.mapcore.**
-dontwarn com.amap.api.maps.**
-dontwarn com.autonavi.amap.mapcore.**
-keep class com.amap.api.mapcore.** {*;}
-keep class com.amap.api.maps.** {*;}
-keep class com.autonavi.amap.mapcore.** {*;}
#定位
-dontwarn com.amap.api.location.**
-dontwarn com.aps.**
-keep class com.amap.api.location.** {*;}
-keep class com.aps.** {*;}
#导航
-dontwarn com.amap.api.navi.**
-dontwarn com.autonavi.**
-keep class com.amap.api.navi.** {*;}
-keep class com.autonavi.** {*;}

##******************************** 讯飞语音 *********************
-dontwarn com.iflytek.**
-keep class com.iflytek.** {*;}

##********************************* LitePal ************************
-keep class org.litepal.** {*;}
-keep class * extends org.litepal.crud.DataSupport {*;}
-keep class * extends org.litepal.crud.LitePalSupport {*;}

##************************************ EventBus ********************
-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode {*;}

##************************************ Tablayout *******************
-keep class com.google.android.** {*;}

##********************************* PhotoView *********************
-keep class com.github.chrisbanes.** {*;}

##******************************** ZxingLibaray *********************
-dontwarn com.google.zxing.**
-keep class com.google.zxing.** {*;}
-keep class cn.yipianfengye.android.** {*;}
-keepclasseswithmembernames class * {native <methods>;}

##**************************** jiaozivideoplayer **********************
-keep public class cn.jzvd.JZMediaSystem {*;}
-keep public class cn.jzvd.demo.CustomMedia.CustomMedia {*;}
-keep public class cn.jzvd.demo.CustomMedia.JZMediaIjk {*;}
-keep public class cn.jzvd.demo.CustomMedia.JZMediaSystemAssertFolder {*;}

-keep class tv.danmaku.ijk.media.player.** {*;}
-dontwarn tv.danmaku.ijk.media.player.*
-keep interface tv.danmaku.ijk.media.player.** {*;}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_35652070

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值