为什么要把代码混淆呢?
为了防止别银反编译,窃取你的劳动成果。
代码混淆就是在保证应用的功能不变的情况下 把代码格式打乱 字母删减 比如:用a代替abc 用b代替sss 各种乱 使别人根本无法看懂 下面就来说说如何操作
代码混淆其实很简单 ,在项目的proguard-rules.pro文件里面添加基本的配置 和你项目中使用到jar包的配置 或者依赖的库的配置 具体配置看自己项目里都用了什么 网上也有一大堆基本配置可以参考,配置好之后直接开始打包签名就可以了
下面是我写的一个小项目里的proguard-rules.pro文件里的所有内容 直接粘贴
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in D:\Android\AndroidSDK\newsdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Glide图片库的混淆处理
-keeppublic class * implements com.bumptech.glide.module.GlideModule
-keeppublic enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
-keepattributesSignature
# Gson混淆脚本
#-keepattributes Signature-keepattributes *Annotation*
-keepclass sun.misc.Unsafe {*;}
-keepclass com.google.gson.stream.** {*;}
#使用Gson时需要配置Gson的解析对象及变量都不混淆。不然Gson会找不到变量。
#将下面替换成自己的实体类
-keepclass com.example.administrator.duguodong.bean.** {*;}
# OkHttp3
-dontwarncom.squareup.okhttp3.**
-keepclass com.squareup.okhttp3.** {*;}
-dontwarnokio.**
# Okio
-dontwarncom.squareup.**
-dontwarnokio.**
-keeppublic class org.codehaus.* {*;}
-keeppublic class java.nio.* {*;}
#上面是导入的model。同样的其他的也是如此
-keepclass com.github.** {*;}
#上面这个是避免混淆你导入的maven类库之类的
-dontwarncom.example.administrator.duguodong.**
#生成对应的混淆信息
#注意的是fastJson要特殊对待
#指定代码的压缩级别
-optimizationpasses5
#包明不混合大小写
-dontusemixedcaseclassnames
#不去忽略非公共的库类
-dontskipnonpubliclibraryclasses
#优化 不优化输入的类文件
-dontoptimize
#不做预校验
-dontpreverify
#混淆时是否记录日志
-verbose
#混淆时所采用的算法
-optimizations!code/simplification/arithmetic,!field/*,!class/merging/*
#忽略警告
-ignorewarning
#apk包内所有class的内部结构
# -dump class_files.txt
#未混淆的类和成员
# -printseeds seeds.txt
#列出从apk中删除的代码
# -printusage unused.txt
#混淆前后的映射
# -printmapping mapping.txt
# -------------系统类不需要混淆--------------------------
-keeppublic class * extends android.app.Fragment
-keeppublic class * extends android.app.Activity
-keeppublic class * extends android.app.Application
-keeppublic class * extends android.app.Service
-keeppublic class * extends android.content.BroadcastReceiver
-keeppublic class * extends android.content.ContentProvider
-keeppublic class * extends android.app.backup.BackupAgentHelper
-keeppublic class * extends android.preference.Preference
-keeppublic class * extends android.support.**
-keeppublic class com.android.vending.licensing.ILicensingService
#保留support下的所有类及其内部类
-keepclass android.support.** {*;}
#保留R下面的资源
-keepclass **.R$* {*;}
-keepclasseswithmembernamesclass * {#保持native方法不被混淆
native ;
}
-keepclasseswithmembersclass * {#保持自定义控件类不被混淆
public (android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembersclass * {#保持自定义控件类不被混淆
public (android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembersclass * extends android.app.Activity {#保持自定义控件类不被混淆
public void *(android.view.View);
}
-keepclassmembersenum * {#保持枚举enum类不被混淆
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclass * implements android.os.Parcelable {#保持Parcelable不被混淆
public static final android.os.Parcelable$Creator *;
}
网友评论