Fork me on GitHub

Android之混淆配置

混淆

最近项目中需要对AAR进行代码混淆,踩了不少坑,所以这里主要针对AAR混淆整理一下,方便以后的问题的解决。

混淆的优点#

  1. 减小APK文件的大小
  2. 移除封装应用中未使用的类、字段、方法和属性
  3. 用短名称混淆其余的类、字段和方法,可令APK难以逆向工程。

混淆的缺点#

  1. 拖慢项目的构建速度

如何开启混淆
  在build.gradle文件中设置:

minifyEnabled true
shrinkResources true

混淆配置#

-optimizationpasses 5 
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation* -verbose
-keepattributes Signature
-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable

# APP的
-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 * extends android.view.View
-keep public class com.android.vending.licensing.ILicensingService
-keep class android.support.** {*;}

-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclassmembers class * extends android.app.Activity{
    public void *(android.view.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);
}
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-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();
}
-keep class **.R$* {
 *;
}
-keepclassmembers class * {
    void *(**On*Event);
}
# Support library
-dontwarn android.support.**
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; } 
-keep interface android.support.v4.** { *; } 
-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; } 
-keep interface android.support.v7.** { *; }
# support design
-dontwarn android.support.design.**
-keep class android.support.design.** { *; } 
-keep interface android.support.design.** { *; } 
-keep public class android.support.design.R$* { *; }

#your package path where your gson models are stored
#-keep class com.abc.model.** { *; }

# retrofit
-dontwarn okio.**
-keep class com.squareup.okhttp.** { *; } 
-keep interface com.squareup.okhttp.** { *; } 
-dontwarn com.squareup.okhttp.**
-dontwarn rx.**
-dontwarn retrofit.**
-keep class retrofit.** { *; } 
-keepclasseswithmembers class * {
 @retrofit.http.* <methods>;
}
-keep class sun.misc.Unsafe { *; }

# rxjava
-keep class rx.schedulers.Schedulers {
public static <methods>;
}-keep class rx.schedulers.ImmediateScheduler {
public <methods>;
}-keep class rx.schedulers.TestScheduler {
public <methods>;
}-keep class rx.schedulers.Schedulers {
public static ** test(); 
}
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
long producerIndex;
long consumerIndex; 
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
long producerNode;
long consumerNode; 
}

# Keep these for GSON and Jackson
-keepattributes EnclosingMethod
-keep class sun.misc.Unsafe { *; } 
-keep class com.google.gson.** { *; }

# OkHttp3
-keep class okhttp3.** { *; } 
-keep interface okhttp3.** { *; } 
-dontwarn okhttp3.**

# Needed for Parcelable/SafeParcelable Creators to not get stripped
-keepnames class * implements android.os.Parcelable {
public static final ** CREATOR; 
}

作者:kevin2022

出处:https://www.cnblogs.com/kevin2022/p/16400363.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

你可以在这里自定义其他内容

posted @   KevinAt2022  阅读(509)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu