Android常用三方库混淆规则整理
一、引言
在Android开发中,使用各种第三方库可以极大地提高开发效率和功能丰富性,为了保护代码安全和减小应用体积,我们需要对这些第三方库进行混淆处理,本文将系统整理一些常用的三方库混淆规则,帮助开发者更好地进行混淆配置。
二、基本指令
在进行混淆之前,首先需要了解一些基本的ProGuard指令:
optimizationpasses 5
:指定优化次数为5次。
dontusemixedcaseclassnames
:不使用混合大小写类名。
dontskipnonpubliclibraryclasses
:不跳过非公共库类。
ignorewarnings
:忽略警告信息。
dontpreverify
:不进行预先验证。
verbose
:详细输出。
printmapping proguardMapping.txt
:打印映射文件。
optimizations !code/simplification/cast,!field/*,!class/merging/
:关闭代码简化、字段优化和类合并优化。
keepattributes *Annotation*,InnerClasses
:保持注释和内部类属性。
renamesourcefileattribute SourceFile
:重命名源文件属性。
keepattributes SourceFile,LineNumberTable
:保持源文件和行号表属性。
三、Android相关组件混淆规则
对于Android相关的组件,如Activity、Service、BroadcastReceiver等,通常需要保持其不被混淆,以确保应用正常运行,以下是一些常见的Android组件混淆规则:
-keep public class * extends android.support.v7.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.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.** {*;}
对于包含native方法的类和实现Parcelable、Serializable接口的类,也需要特殊处理:
-keepclasseswithmembernames class * { native <methods>; }
-keepclassmembers class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; }
-keepclassmembers class * implements java.io.Serializable { ... }
四、常见三方库混淆规则
Gson库
Gson是一个用于在Java对象和JSON数据之间进行转换的库,以下是Gson库的混淆规则示例:
-keep class com.google.gson.** { *; }
-keepclassmembers class com.google.gson.** { *; }
这些规则将保持Gson库的所有类和类成员不被混淆。
OkHttp库
OkHttp是一个用于进行网络请求的库,以下是OkHttp库的混淆规则示例:
-dontwarn okhttp3.
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
这些规则将保持OkHttp库的所有类和接口不被混淆,并忽略警告信息。
友盟统计
友盟统计是一款移动应用统计分析工具,以下是友盟统计的混淆规则示例:
-keep class com.umeng.** {*;}
-keepclassmembers class * { public <init> (org.json.JSONObject); }
-keepclassmembers enum * { public static[] values(); public static valueOf(java.lang.String); }
-keep public class [您的应用包名].R$*{ public static final int *; }
。
微信
微信开放SDK是腾讯公司为开发者提供的一套开发工具包,以下是微信开放SDK的混淆规则示例:
-keep class com.tencent.mm.opensdk.** { *; }
-keep class com.tencent.wxop.** { *; }
。
五、WebView相关混淆规则
对于使用WebView的应用程序,如果涉及到JavaScript接口的调用,还需要添加以下混淆规则:
-keepclassmembers class fqcn.of.javascript.interface.for.Webview { public *; }
-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); }
。
六、归纳
本文整理了Android常用三方库的混淆规则,包括基本指令、Android相关组件、常见三方库(如Gson、OkHttp、友盟统计、微信)以及WebView相关的混淆规则,通过合理配置这些混淆规则,可以有效保护代码安全和减小应用体积,希望本文能对开发者在进行混淆配置时提供有益的参考。
各位小伙伴们,我刚刚为大家分享了有关“Android常用三方库混淆规则整理”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!