签名-代码混淆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 下将 脚本文件 和工具包  等配置环境变量


原创粉丝点击