Android Studio 代码混淆

新建一个项目,Android Studio默认关闭代码混淆开关,在build.gradle文件中,如下图所示的minifyEnabled 开关,因此如果需要混淆代码,需将false改为true,然后在文件proguard-rules.pro添加具体混淆规则。

自己的build.gradle文件的buildTypes部分

    buildTypes {
        debug {
            buildConfigField "boolean", "LOG_DEBUG", "true"
            minifyEnabled false
            zipAlignEnabled true
            shrinkResources true
        }
        release {
            buildConfigField "boolean", "LOG_DEBUG", "false"
            minifyEnabled true
            zipAlignEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
        }
    }

常用混淆规则如下:

-dontskipnonpubliclibraryclasses # 不忽略非公共的库类-optimizationpasses 5            # 指定代码的压缩级别
-dontusemixedcaseclassnames      # 是否使用大小写混合
-dontpreverify                   # 混淆时是否做预校验
-verbose                         # 混淆时是否记录日志-keepattributes *Annotation*     # 保持注解
-ignorewarning                   # 忽略警告-dontoptimize                    # 优化不优化输入的类文件
-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
#生成日志数据,gradle build时在本项目根目录输出-dump class_files.txt            #apk包内所有class的内部结构-printseeds seeds.txt            #未混淆的类和成员-printusage unused.txt           #打印未被使用的代码-printmapping mapping.txt        #混淆前后的映射

-keep public class * extends android.support.** #如果有引用v4或者v7包,需添加-libraryjars libs/xxx.jar        #混淆第三方jar包,其中xxx为jar包名-keep class com.xxx.**{*;}       #不混淆某个包内的所有文件-dontwarn com.xxx**              #忽略某个包的警告-keepattributes Signature        #不混淆泛型-keepnames class * implements java.io.Serializable #不混淆Serializable

-keepclassmembers class **.R$* { #不混淆资源类  public static <fields>;}
-keepclasseswithmembernames class * {  # 保持 native 方法不被混淆
    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);
}
-keepclassmembers enum * {             # 保持枚举 enum 类不被混淆
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {         # 保持 Parcelable 不被混淆
    public static final android.os.Parcelable$Creator *;
}
时间: 2024-08-02 10:59:28

Android Studio 代码混淆的相关文章

Android Studio 代码混淆(你真的会混淆吗)

一.前言 今天要打包新产品,突然忘了混淆的参数是怎么写的了,虽然之前也混淆过,可是具体配置的参数代码有些记不起来了,因此决定花点时间写篇博客记录一下,方便以后查找和自己的记忆. 二.Android Studio 代码混淆基本配置 在工程目录下,找到 proguard-rules.pro 文件,它就是你要进行编写混淆配置的文件,在这个文件中编写混淆规则 当然,在这之前,还需要在你 module 的 build.gradle 文件中引用该混淆文件: 上面中的 proguard-android.txt

android studio 代码混淆如何忽略第三方jar包

最近在打包混淆时,遇到一个问题,混淆编译都不出错,运行出错,一般遇到这种问题,肯定是在运行的地方有代码被混淆了,经过错误排查,发现是程序中用到第三方的jar包的方法出现问题了,原来android studio混淆打包时把第三方的jar包给混淆了. 于是想这个问题很简单,保持jar包不混淆就好,于是直接在app目录下的proguard-rules.pro(或者proguard-rules.txt)混淆规则文件直接-libraryjars libs/xx.jar避免混淆.但是却引出了另一个错误: E

Android Studio代码混淆插件

之前给公司的App添加代码混淆,在代码的混淆过程也遇到了不少的问题,再加上最近学习了一下Android Studio插件的开发,所以就开发一个代码混淆插件方便项目的代码混淆. 截图 第三方库列表清单 目前插件的后台已集成了如下图的第三方开源库的代码混淆以及基本的代码混淆,还在努力地添加中,也欢迎大家通过new issue提交列表中没有的第三方开源库混淆代码.(你认为微不足道的事情,也许可以帮到别人的大忙~) 使用 下载AndroidProGuard插件并安装重启.download 在菜单栏的Ed

Android Stuido代码混淆

一.Android Studio 代码混淆基本配置首先我们要在build.gradle里设置 miifyEnabled 里改为true,表示可以混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'  中 proguard-rules.txt 表示系统默认的混淆文件,具体在../sdk/tools/proguard/ 目录下,其中包含了 android 最基本的混淆,一般不需要改动

Intellij idea 和android studio 代码给混淆

Intellij idea 和android studio 代码给混淆 一.指令说明-optimizationpasses 5 # 指定代码的压缩级别 -dontusemixedcaseclassnames # 是否使用大小写混合 -dontpreverify # 混淆时是否做预校验 -verbose # 混淆时是否记录日志 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法 -

android 实现代码混淆

对于使用签名的apk,经常使用的反编译之后还是能查看class文件的代码实现.对于反编译可查看个人的博客点击打开链接 使用代码混淆就能是这样的常规反编译失效.很多其它混淆机制见官网http://developer.android.com/guide/developing/tools/proguard.html 1.在build.grandle加入,当中规则写在proguard-rules.pro中.也能够自己定义一个文件,将其取代,比方eclipse经常使用的 proguard-project.

关于Android Studio打包混淆以及上传mapping文件

关于android Studio打包混淆以及上传mapping文件 转载请注明出处: http://blog.csdn.net/u014163726?viewmode=contents 本文出自Wrh的博客 打包 android studio的打包很简单 然后如果已经有keystore的一路next下去,如果没有的可能需要先创建keystore,最后我们就会得到一个apk文件 混淆 现在网上关于反编译的博客很多了,我在此就不多做介绍了,放上个传送门传送门 那么我们已经知道了反编译是如此的简单,我

Android Studio代码着色插件

Android Studio代码着色插件 前言:半个多月没写博客了,放了个假期,这人才缓过来神,懒的啥都不想干,可算是明白一句话的意思了:玩物丧志啊!好在公司项目赶的紧,不想干活都不行,强行撸上正轨-- 正因为夜以继日的Coding赶模块,最近感觉眼睛干涩,眼圈红肿,看着那些颜色一层不变的abc,心里莫名的冒火,故有了本篇博文.还是建议大家敲一会abc后,起来走动走动,眼睛看看远处,让眼圈周围血液循环循环.不要像本屌,昨天回家路上买瓶水,付账时老板娘女儿问,你是不是搞IT的 ?!  ---- 此

Android日志:代码混淆,使用说明

上一篇介绍了Google官方的一些解释,这一篇主要介绍如何实战(Eclipse开发)使用Googel提供的这个工具.如对代码混淆的概念不是很了解的建议先看上一篇--Android日志:代码混淆,官方文档介绍-----来自Google最新文档 主要先简单的介绍三个主要文件,在sdk下的proguard里面:  我的SDK路径为H:\Android\android-sdk-windows\tools\proguard proguard-android.txt//系统配置好一些默认选项,考虑的比较详细