关于Android(安卓)混淆的内容总结
16lz
2021-12-04
Android的混淆主要分如下几个步骤:
一. 打开project.properties文件的如下代码(在比较新的版本中适用,低版本需要另外方式)
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt//主要是放开这句话#Project target.target=android-19
二 .然后可以去proguard-project.txt文件去定义一些不需要混淆的文件
主要是分为三类
1.系统的一些方法等
2.是引入的三方jar包
3.是引入的依赖库
下面直接上我项目的代码
//这部分是一个常规的设置
-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 -keepclasseswithmembernames class * { native <methods>; } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } -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 enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -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(); } -keepattributes *Annotation* -keepattributes Exceptions,InnerClasses,Signature -keepattributes SourceFile,LineNumberTable //这是不混淆我自己项目中的包下的所有文件-keep class com.stateunion.goldencloud.Entity** {*;} //指定类不进行混淆(包括里面的方法等)#-keepclasseswithmembers class MyBean { # <fields>; # <methods>; #} //v4包和他的子类的设置,继承自fragment的类-keep class **.R$* { *; } -libraryjars libs/android-support-v4.jar -dontwarn android.support.v4.** -keep class android.support.v4.** { *; } -keep interface android.support.v4.** { *; } -keep public class * extends android.support.v4.** -keep public class * extends android.app.Fragment //这部分为三方依赖的库的声明-libraryjars ..\\xutillibrary-dontwarn com.lidroid.xutils.**-keep class com.lidroid.xutils.** {*;}-libraryjars ../SystemBarTint-master-dontwarn com.readystatesoftware.systembartint.**-keep class com.readystatesoftware.systembartint.**{*;}-libraryjars ../android-support-v7-appcompat-dontwarn com.android-support-v7-appcompat.**-keep class com.android-support-v7-appcompat.**{*;}//这是libs下的jar包声明-libraryjars libs/fastjson-1.1.40.jar -dontwarn com.alibaba.fastjson.** -keep class com.alibaba.fastjson.**{*;}-libraryjars libs/gson-2.2.4.jar -dontwarn com.google.gson.** -keep class com.google.gson.**{*;}
基本上就是上面这些步骤,这个是记录我自己的混淆的过程
目前也有三方加密的方式,通过应用加壳的方式进行加密,有兴趣的同学可以去网上看看 例如爱加密等。
下面是我反编译后的结果图
1. 这是没有混淆的xutils
2.这是保留后的实体类
3.这是混淆后的文件
更多相关文章
- NPM 和webpack 的基础使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- Android(安卓)Button 点击时替换背景颜色和替换当前图标
- Android(安卓)DEX安全攻防战
- Android代码混淆官方实现方法
- Android(安卓)Dex文件结构
- Android(安卓)NDK 的学习之旅-----HelloWorld
- Android(安卓)解压zip文件
- android linux 基础知识总结