android 代码混淆 proguard

本文深入探讨了Android应用混淆配置的细节,包括系统提供的混淆规则和自定义规则的添加方式,以及如何正确处理第三方库的混淆,确保应用的稳定性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

混淆文件配置   

android的混淆分2个部分,一个是系统提供的一些混淆规则,在SDK的  /tools/proguard/proguard-android.txt:proguard-project.txt 目录下,另一个是自己根据业务补充的。

   在project.properties文件中添加(gradle工程貌似不用)

          proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt       // 去掉注释就可以获得
          target.proguard.config=proguard.cfg                  // 自己的注释文件
   在gradle工程的build.gradle中添加
          android {
            buildTypes {
                      release {  
                           minifyEnabled true   
                           proguardFiles 'proguard.cfg'
                        }
         }

自定义控件混淆

继承view,和Activty的扩展默认是不混淆,SDK提供的混淆规则中有对这块的过滤

第三方库的混淆

一般成熟的第三方库官网都有相关的混淆规则,复制过来加在我们自定义的混淆规则中就行了。实在没有的按照下面实例中的红色部分过滤一下。贴上一个第三方混淆的总结:

http://blog.youkuaiyun.com/R_hgt/article/details/41116169

实例

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
proguard.cfg / proguard-rules.pro文件(自定义部分)
-optimizations !code/simplification/cast,!field/*,!class/merging/*
#表示proguard对你的代码进行迭代优化的次数
-optimizationpasses 5
#优化时允许访问并修改有修饰符的类和类的成员
-allowaccessmodification
#不用预先检查
-dontpreverify

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
#不用输出详细的过程
-verbose

<span style="color:#ff0000;"># 不输出警告信息,一般第三方的都不输出(补充)
-dontwarn android.support.**
-dontwarn org.apache.http.**</span>

### keep options
#system default, from android example
-keep public class * extends android.app.Activity
-keep public class * extends android.support.v4.app.Fragment
-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
-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.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService

###不混淆匿名内部类,注解
-keepattributes *Annotation*,InnerClasses

<span style="color:#ff0000;">### 第三方包过滤(补充)
-keep class android.support.** {*;}
-keep class com.amap.** {*;}

### model类不要混淆,特别是json对应的(补充)
-keep class com.XXX.model.** { *; }</span>

###必过滤
-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-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();
}

###R文件类不混淆
-keep class **.R$* {
 *;
}

混淆规则多多,就不一一列举了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值