AndroidApp代码混淆终极解决方案

AndroidApp代码混淆终极解决⽅案
App虽然没有那么的⾼⼤上,但是代码的混淆是代表了程序员对App的责任⼼, 也是对App安全的⼀点点保证。今天我会将⾃⼰做混淆的过程和体会分享给⼤家,也避免⼤家少⾛弯路,少跳坑。
本篇博客混淆基于 Studio的IDE开发环境。
其实在 Studio中做混淆,基本就是对Proguard-rules.pro⽂件的操作。混淆的过程也是有规律可循的。下⾯我将分⼏个部分来分别介绍混淆过程。
(1)如何开启混淆。
(2)混淆的公共部分。
(3)需要我们不混淆的代码。
(4)libs下的第三⽅Jar包的混淆⽅式。
(5)complie的第三⽅Jar包的混淆⽅式。
(6)代码注释的混淆⽅式。
ok,⼤家准备好了吗?下⾯我就以流⽔账的⽅式与⼤家分别介绍啦!(O(∩_∩)O 哈哈~)
1.如何开启混淆
开始混淆很简单,Android Studio中到你的项⽬module的adle,如下图所⽰:
将minifyEnabled设置为true就ok。
2.公共部分
在混淆的过程中,有⼀部分是固定不变的。下⾯我将列出保持不变的模块,只需将代码Copy即可。
#1.基本指令区
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-
弹跳高跷dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-ignorewarning
-
-optimizations !code/simplification/cast,!field/*,!class/merging/*
-keepattributes *Annotation*,InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
#2.默认保留区
-keep public class * extends android.app.Activity
-
keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * t.BroadcastReceiver
-keep public class * t.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);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep public class * extends android.view.View{
*** get*();
void set*(***);
public <init>(t.Context);
public <init>(t.Context, android.util.AttributeSet);
public <init>(t.Context, android.util.AttributeSet, int);
}
-keepclasseswithmembers class * {
public <init>(t.Context, android.util.AttributeSet);
public <init>(t.Context, android.util.AttributeSet, int);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-izo
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);
}
#3.webview
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
public *;
}
-keepclassmembers class * extends android.webkit.webViewClient {
public void *(android.webkit.WebView, java.lang.String, aphics.Bitmap);    public boolean *(android.webkit.WebView, java.lang.String);usb视频设备
}
-keepclassmembers class * extends android.webkit.webViewClient {
public void *(android.webkit.webView, jav.lang.String);
}
以上就是固定不变的部分。
3.需要我们不混淆的代码
不混淆⽤关键字-keep来修饰。不混淆的部分⼤概分为如下⼏个模块:
(1)实体类,json解析类
(2)第三⽅jar包
(3)和webview的调⽤模块
(4)与反射相关的类和⽅法
⼤概就是以上⼏个模块,下⾯来看不混淆的代码:
#1.实体类
-
keep entity.** { *; }
#2.第三⽅包
#eventBus
-keepattributes *Annotation*
-keepclassmembers class ** {
@obot.eventbus.Subscribe <methods>;
}
-keep obot.eventbus.** { *; }
-keepclassmembers class * obot.eventbus.util.ThrowableFailureEvent {    <init>(java.lang.Throwable);
}
#3.与js互相调⽤的类
没有可不写
#4.反射相关的类和⽅法
-keep xx.xx.view.** { *; }
-keep ** { *; }
4.libs下的第三⽅Jar包的混淆⽅式
保留libs下的jar包的⽅式也很简单,同样是使⽤-keep关键字:
到libs⽬录,打开相对于的jar⽂件,到对应的包名,然后添加如下代码:
-keep class 包名.** { *; }
5plie的第三⽅Jar包的混淆⽅式
complie的第三⽅Jar包的混淆⽅式和libs下的相同,只需要打开:打开对应的引⽤jar⽂件,然后同样使⽤
-keep class 包名.** { *; }

本文发布于:2024-09-22 16:39:53,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/277362.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:混淆   代码   过程   部分
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议