android 代码混淆总结

本文深入探讨了在Android应用开发中如何利用ProGuard进行混淆,包括配置文件default.properties和proguard.cfg的作用,以及如何解决使用第三方库时遇到的混淆问题。

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

default.properties文件加入:

target=android-7
proguard.config=proguard.cfg

以上两句


proguard.cfg 文件:

-optimizationpasses 7

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*


-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
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

<!-- 百度api使用后必须加下面这段 -->
-keep class com.baidu.mapapi.** {*;} 


-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
  public void *(android.view.View);
}

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

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

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

<!-- 序列化后必须使用下面这段 -->
-keepnames class * implements java.io.Serializable

-keepclassmembers class * implements java.io.Serializable {
   static final long serialVersionUID;
   private static final java.io.ObjectStreamField[] serialPersistentFields;
   !static !transient <fields>;
   private void writeObject(java.io.ObjectOutputStream);
   private void readObject(java.io.ObjectInputStream);
   java.lang.Object writeReplace();
   java.lang.Object readResolve();
}

补充一下:
 

-dontwarn com.google.android.gcm.**

-dontwarn net.nend.android.** 

-dontwarn com.google.ads.** 


也可以用这样的方式解决使用第三方包后出现的无法混淆的问题,大概的异常是:


 Note: there were 160 duplicate class definitions.

Warning: com.google.ads.m: can't find referenced class com.google.ads.internal.state.AdState

Warning: com.google.ads.m: can't find referenced class com.google.ads.internal.state.AdState

     You should check if you need to specify additional program jars.



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值