签名-代码混淆Progurard-反编译
来源:互联网 发布:js bind 用法 编辑:程序博客网 时间:2024/06/04 22:59
签名
路径/文件名+.jks 签名文件通过
build generate signed apk
记住签名库的密码
和key 的密码
代码混淆
混淆代码 可以 减小APK体积,将类名简单化,在反编译时打乱代码的阅读理解。
所以release 版本的apk 通常进行代码混淆
通过Gradle 进行 配置
buildTypes 声明构建类型
1.release
2.debug
3.可以自定义类型
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
将minifyEnabled 更改为Ture
更改proguard-rules.pro混淆文件自己配置:
#-------------------------------------------定制化区域----------------------------------------------#---------------------------------1.实体类---------------------------------#-------------------------------------------------------------------------#---------------------------------2.第三方包-------------------------------#-------------------------------------------------------------------------#---------------------------------3.与js互相调用的类------------------------#-------------------------------------------------------------------------#---------------------------------4.反射相关的类和方法-----------------------#----------------------------------------------------------------------------#---------------------------------------------------------------------------------------------------#-------------------------------------------基本不用动区域--------------------------------------------#---------------------------------基本指令区-----------------------------------optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontskipnonpubliclibraryclassmembers-dontpreverify-verbose-printmapping proguardMapping.txt-optimizations !code/simplification/cast,!field/*,!class/merging/*-keepattributes *Annotation*,InnerClasses-keepattributes Signature-keepattributes SourceFile,LineNumberTable#----------------------------------------------------------------------------#---------------------------------默认保留区----------------------------------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);}-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}-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);}#----------------------------------------------------------------------------#---------------------------------webview-------------------------------------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);}-keepclassmembers class * extends android.webkit.WebViewClient { public void *(android.webkit.WebView, jav.lang.String);}#----------------------------------------------------------------------------#---------------------------------------------------------------------------------------------------
混淆的过程分为 shrink->optinize->obfuscate->preverify
这些环节是可以选择的。
#代表注释
-keep 是保持某个类不被混淆。
assemble Task 任务 有两个子任务 debug/release
所以混淆前需要对文件进行签名
反编译APK
验证文件是否混淆成功
需要两个软件
dex2jar 将 dex—>jar
jd-gui 将jar->java
反编译软件 APKTool 可以将APK 反编译成可以修改的smali 文件
http://blog.csdn.net/kong92917/article/details/53468913
ubuntu 下将 脚本文件 和工具包 等配置环境变量
阅读全文
0 0
- 签名-代码混淆Progurard-反编译
- Android 签名 混淆 反编译
- Android代码混淆 反编译
- 代码混淆与反编译
- 代码混淆(反编译)
- android apk 导出(签名) is not translated in xx 代码混淆 反编译
- android混淆打包、反编译、重新打包签名
- Android 代码混淆防止反编译
- Java反编译之代码混淆
- java防止反编译代码混淆
- Android 代码混淆 防止反编译
- Android代码混淆及反编译
- android代码混淆和反编译
- android 反编译---and---混淆代码
- android 代码混淆与反编译
- 反编译,混淆加密代码教程
- 代码编译-反编译-解混淆
- android混淆代码与反编译
- 归并排序
- Spring5源码解析-Spring框架中的事件和监听器
- bind(),call(),apply()区别
- [BZOJ]4336: BJOI2015 骑士的旅行 树链剖分+STL(multiset)
- 函数十个问答
- 签名-代码混淆Progurard-反编译
- UGUI +ScrollRect下实现动态添加grid子物体
- MySQL学习笔记(一):修改MySQL中的提示符
- ubuntu 17.10 常用软件安装
- 利用时间序列预测用户系统是否过载
- hbase常用命令
- Android5.0 显示系统(二)————SurfaceComposerClient
- JTA 分布式事务
- vim_config使用说明