Android代码混淆的写法总结

Apk文件被反编译出来能被获取到里面的代码。对于这种情况,我们可以对项目代码进行混淆,随机生成难理解的类名,方法名,让代码难以阅读,加大功能被盗取的难度。混淆可以起到压缩Apk,混淆文件,预检,优化的作用。

1. 使用方式,在gradle文件中设置minifyEnabled为true即可开启混淆

buildTypes {
    release {
      minifyEnabled ture //是否开启代码混淆
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }

混淆内容在proguard-android.txt文件中写。

2. 混淆设置参数

-optimizationpasses 4 代码混淆的压缩比例,值介于0-7

-dontusemixedcaseclassnames 混淆后类型都为小写

-dontskipnonpubliclibraryclasses 不去忽略非公共的库类

-dontoptimize 不优化输入的类文件

-dontpreverify 不做预校验的操作

-ignorewarnings 忽略警告

-verbose 混淆时是否记录日志

-keepattributes Annotation 保护注解

-printmapping proguardMapping.txt 生成原类名和混淆后的类名的映射文件

-optimizations !code/simplification/cast,!field/ ,!class/merging/ 指定混淆是采用的算法

3. 保持不被混淆的设置

保持实体类不混淆

-keep class 你的实体类所在的包.** { *; }

保持四大组件,Application,Fragment不混淆

-keep public class * extends android.app.Application
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Fragment
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
-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.preference.Preference

保持 native 方法不被混淆

-keepclasseswithmembernames class * {
  native <methods>;
}

保持枚举enum类不被混淆

-keepclassmembers enum * {
  public static **[] values();
  public static ** valueOf(java.lang.String);
}

保持 Parcelable 不被混淆

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

保持第三方包不混淆,比如这里用到微信、支付宝支付第三方

#支付宝混淆
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}

#微信支付混淆
-keep class com.tencent.mm.opensdk.** {*;}
-keep class com.tencent.wxop.** {*;}
-keep class com.tencent.mm.sdk.** {*;}

4. 完整混淆示例:

#指定代码的压缩级别
-optimizationpasses 5

#包名不混合大小写
-dontusemixedcaseclassnames

#不去忽略非公共的库类
-dontskipnonpubliclibraryclasses

 #优化 不优化输入的类文件
-dontoptimize

 #预校验
-dontpreverify

 #混淆时是否记录日志
-verbose

#忽略警告
-ignorewarning

#保护注解
-keepattributes *Annotation*

-keep public class * extends android.app.Application
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Fragment
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
-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.preference.Preference

-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 class * implements android.os.Parcelable {
 public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class **.R$* {
  *;
}
-keep class * extends android.view.View{*;}
-keep class * extends android.app.Dialog{*;}
-keep class * implements java.io.Serializable{*;}

#butterknife
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

#volley
-dontwarn com.android.volley.**
-keep class com.android.volley.**{*;}

#fastjson
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.**{*;}

#happy-dns
-dontwarn com.qiniu.android.dns.**
-keep class com.qiniu.android.dns.**{*;}

#okhttp
-dontwarn com.squareup.okhttp.**
-keep class com.squareup.okhttp.**{*;}

-keep class okio.**{*;}

-keep class android.net.**{*;}
-keep class com.android.internal.http.multipart.**{*;}
-keep class org.apache.**{*;}

-keep class com.qiniu.android.**{*;}

-keep class android.support.annotation.**{*;}

-keep class com.squareup.wire.**{*;}

-keep class com.ant.liao.**{*;}

#腾讯
-keep class com.tencent.**{*;}

-keep class u.aly.**{*;}

#ImageLoader
-keep class com.nostra13.universalimageloader.**{*;}

#友盟
-dontwarn com.umeng.**
-keep class com.umeng.**{*;}

#pulltorefresh
-keep class com.handmark.pulltorefresh.** { *; }
-keep class android.support.v4.** { *;}
-keep public class * extends android.support.v4.**{
 public protected *;}
-keep class android.support.v7.** {*;}

自己试着用一个简单的项目加入混淆,打个包试试效果吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android 实现代码混淆的实例

    Android 实现代码混淆的实例 1.简介 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为. 混淆的目的是为了加大反编译的成本,但是并不能彻底防止反编译. 2.如何开启混淆 通常我们需要找到项目路径下app目录下的build.gradle文件,找到minifyEnabled这个配置,然后设置为true即可,如下: release { minifyEnabled true proguardFiles getDefa

  • Android 混淆代码详解及实例

    为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤: 1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这个对混淆代码很重要,如果你不小心删掉了,没关系,从其他地方拷贝一个过来 2. 最重要的就是在proguard-project.txt添加混淆的申明了:  a. 把所有你的jar包都申明进来,例如: -libraryjars libs/apns_1.0.6.jar  -libraryjars libs

  • Android应用开发之代码混淆

    混淆器(ProGuard) 混淆器通过删除从未用过的代码和使用晦涩名字重命名类.字段和方法,对代码进行压缩,优化和混淆.结果是一个比較小的.apk文件,该文件比較难进行逆向project.因此,当你的应用程序对安全敏感(要求高),比如当你授权应用程序的时候,混淆器是一种重要的保护手段. 混淆器被集成在android 构建系统中,所以你不必手动调用它.同一时候混淆器仅在公布模式下进行构建应用程序的时候才会执行起来,所以在调试模式下构建程序时,你不必处理混淆代码.让混淆器执行起来是可选择的,可是推荐

  • 详解Android的反编译和代码混淆

    前言 包括以下内容 要反编译apk需要下面3个工具 反编译资源文件 反编译类文件 代码混淆 要反编译apk需要下面3个工具 1.apktool(资源文件获取) 作用:资源文件获取,可以提取图片文件和布局文件进行使用查看 2.dex2jar(源文件获取) 作用:将APK反编译成java源码(classes.dex转化成jar文件) 3.jd-gui 作用:查看APK中classes.dex转化成的jar文件,即源码文件 下面进行反编译资源文件和类文件: 反编译资源文件 资源文件:包括图片资源.布局

  • Android Studio多渠道批量打包及代码混淆

    一.批量打包 1.集成了友盟统计,并在AndroidManifest.xml中添加了如下代码 <meta-data android:name="UMENG_CHANNEL" android:value="${CHANNEL_VALUE}"/> 2.在app的build.gradle的android标签下添加如下代码: productFlavors { myapp {} _360 {} appchina {} hiapk {} } productFlavo

  • Android实用图文教程之代码混淆、第三方平台加固加密、渠道分发

    第一步:代码混淆(注意引入的第三方jar) 在新版本的ADT创建项目时,混码的文件不再是proguard.cfg,而是project.properties和proguard-project.txt. 新建一个项目的时候,会自动生成project.properties和proguard-project.txt文件,无需自己新建,如果你的项目无法自动生成,那么你就要检查一下你的ADT版本了 如果需要对项目进行全局混码,只需要进行一步操作: 将project.properties的中 "#progua

  • android app进行代码混淆实例详解

    接到一个新的任务,对现有项目进行代码混淆.之前对混淆有过一些了解,但是不够详细和完整,知道有些东西混淆起来还是比较棘手的.不过幸好目前的项目不是太复杂(针对混淆这块来说),提前完成--现总结之. 第一部分 介绍下操作流程(eclipse): 1.打开混淆器:找到项目根目录下的project.properties文件,将"#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt"

  • Android代码混淆的写法总结

    Apk文件被反编译出来能被获取到里面的代码.对于这种情况,我们可以对项目代码进行混淆,随机生成难理解的类名,方法名,让代码难以阅读,加大功能被盗取的难度.混淆可以起到压缩Apk,混淆文件,预检,优化的作用. 1. 使用方式,在gradle文件中设置minifyEnabled为true即可开启混淆 buildTypes { release { minifyEnabled ture //是否开启代码混淆 proguardFiles getDefaultProguardFile('proguard-a

  • 详解Android代码混淆实战

    什么是代码混淆: Android SDK 自带了混淆工具Proguard.它位于SDK根目录\tools\proguard下面.如果开启了混淆,Proguard默认情况下会对所有代码,包括第三方包都进行混淆,可是有些代码或者第三方包是不能混淆的,这就需要我们手动编写混淆规则来保持不能被混淆的部分. 为什么要混淆: 优化java的字节码 减小apk文件的大小,在混淆过程中会删除未使用过的类和成员 代码安全,使类.函数.变量名随机变成无意义的代号形如:a,b,c...之类.防止app被反编译之后能够

  • Android使用插件实现代码混淆

    我们在打包的过程中,需要对代码进行混淆处理,可项目中需要混淆的地方很多,特别是添加依赖的,如果要我们一个一个添加,无疑这大大的添加了我们的工作量,下面介绍用插件的方式来对代码进行混淆. 使用流程: 下载AndroidProGuard插件并安装重启. 在菜单栏的Edit下拉菜单中选择AndroidProGuard选项. 如果弹出成功对话框,就可以按Ctrl+V粘贴到项目的proguard-rules.pro文件. 根据proguard-rules.pro报错的提示进行修改成. 将项目app下gra

  • Android代码检查规则Lint的自定义与应用详解

    目录 前言: 什么是Lint 自定义Lint流程: 1. 新创建module,Module类型选择Java or Kotlin Library, 暂时命名lint_tools 2. 在build.gradle中引入lint的依赖 3. 本地创建个资源id命名检查规则,用来规范项目中的id统一命名 4. 实现IssueRegistry并添加对应的自定义Issue: 5. 在module(lint_tools)中对应的build.gradle中配置如下信息: 6. 在需要进行lint检查的modul

  • Android studio 混淆+打包+验证是否成功

    前言: 单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep. -keep class com.hyphenate.** {*;} -dontwarn com.hyphenate.** 即:混淆规则. 自己没写过关于混淆打包的文章,在此补上. 下面了解Android studio环境下 项目混淆打包的操作. 一.打包: 即 将Android项目生成.apk文件,让用户去安装. 1.工具栏 Build->Generate Sig

随机推荐