凭借Groovy的DSL和创新打包方式,Gradle提供了一个可声明的方式,并在合理默认值的基础上描述所有类型的构建。 Gradle目前已被选作许多开源项目的构建系统。...Build Types 默认情况下Android插件会自动将应用程序设置成有一个debug版本和一个release版本。 这就是通过调用BuildType对象完成。...Gradle支持远程和本地仓库。 注意:Gradle会直接识别所有的依赖关系。这就意味着如果一个依赖库自身又依赖别的库时,他们会被一起下下来。...配置 Android插件默认会使用ProGuard插件,并且如果Build Type中使用ProGuard的minifyEnabled属性开启的话,会默认创建对应的task。...控制 基本的Java项目有一系列的tasks一起制作输出文件。
无论你使用何种开发工具,只要确保Gradle和新的项目结构保持官方的方式构建应用程序,避免你的编辑器配置文件加入到版本控制。例如,避免加入Ant build.xml文件。...Retrofit,Picasso和OkHttp都是有同一家公司开发(注: 是由Square 公司开发),所以它们能很好的在一起运行。OkHttp 同样可以和Volley在一起使用 Volley....这个思想整体是保持layout属性(positioning, margin, sizing) 和content属性在布局文件中,同时将所有的外观细节属性(colors, padding, font)放...将一组相关的和重复android:****的属性放到一个通用的style中。 将一个大的style文件分割成多个文件 你可以有多个styles.xml 文件。...to your proguard config: 以防 ProGuard 剥离 需要的类和类成员,添加一个 keep选项在你的 proguard 配置文件中: -keep class com.futurice.project.MyClass
《Android群英传 神兵利器》 - Android开发的工具使用 这是一本Android开发的工具书,里面的提到的工具基本上是每个Android开发者必备的技能,买这本书的起因是看到有介绍Gradle...和性能优化。...开发者能够控制的内存,基本在于堆和栈区域,他们的区别如下: 堆/栈 GC管理 存取速度 推 由GC系统控制。变量生命周期结束后,由GC系统决定何时回收 慢 栈 又虚拟机控制。...在Android2.3之后,系统修改了GC,将GC作为并发线程,同时每次GC并不会遍历整个Heap,而是只遍历一部分内存。...静态:方法区类的静态属性引用的对象。 常量:方法区中的常量引用的对象(final类型)。 获取更多内存 通过子线程 安卓系统的内存分配通过进程分配。
本文选自《Gradle for Android 中文版》,将研究如何设置Gradle 构建配置文件中的几个属性,以缩小APK 文件。...ProGuard 还会重命名你的类和字段。这一过程将保留应用的踪迹,让反编译工程师更加难以读懂代码。...在Gradle 的Android 插件中,其构建类型下面有一个叫作minifyEnabled 的布尔类型属性,你需要将它设置为true 来激活ProGuard : android { buildTypes...缩减资源 当给App 打包时,Gradle 和Gradle 的Android 插件可以在构建期间删除所有未使用的资源。如果你有旧的资源忘记删除,那么这个功能可能非常有用。...缩减资源的方式有两种:自动和手动。 1. 自动缩减 最简单的方式是在你的构建中设置shrinkResources 属性。
ProGuard也会重命名你的类和属性。这个过程会使得内存占用更小,更难逆向。...proguard-android.txt文件作为默认的ProGuard配置文件。...具体的ProGuard配置,可以参照官网压缩代码和资源 Shrinking resources Gradle和Android Plugin在App打包的时候,会把没用的资源都删掉。...在Gradle的属性中,名为jvmargs,可以用来为JVM启用设置内存分配的值。这两个参数也会对构建速度有直接的影响:Xms和Xmx。...使用ABI分割APK也是同样的,所有的属性都和density分割一样。
,和Android Studio完美无缝搭配的新一代构建系统,它不同于Eclipse+Ant的搭配,相比于旧的构建系统,它更灵活,更容易配置,还能很方便的创建衍生的版本--也就是我们常用的多渠道包。...Android Gradle插件就是属于第三方插件,它托管在Jcenter上,所以在应用他们之前,我们要先配置依赖classpath,这样当我们应用插件的时候,Gradle系统才能找到他们。...我们可以通过Android Studio创建一个App工程,创建后我们可以看到其大概工程目录结构如下: 其目录结构和Java工程相比没有太大的变化,proguard-rules.pro是一个混淆配置文件...的配置文件,我们可以通过它配置我们如何进行proguard混淆,比如混淆的级别,哪些类或者方法不进行混淆等等。...目录下的默认的proguard配置文件,在android-sdk/tools/proguard/目录下,文件名就是我们传入的参数的名字proguard-android.txt。
在项目根目录的build.gradle文件中添加以下代码和android{}同级 ext { //全局变量控制,可在module中的build.gradle文件通过rootProject.ext.xxx...可以通过 ApplicationInfo 的这个属性去判断是否是 Debug 版本。...(或 proguard.cfg) 中吗?...这样会导致 proguard 配置文件变得杂乱无章,同时需要团队所有成员对其语法有所了解。...可修饰类、方法、构造函数、属性。 然后在Proguard 配置文件中过滤被这个注解修饰的元素,表示不混淆被 NotProguard 修饰的类、属性和方法。
因为是在这个过程中(构建时),Android Gradle构建系统会拿到所有的资源,不管是你项目自己的,还是引用的第三方的,它都一视同仁的处理,所以这个时机点可以控制哪些资源可以被打包,所以能解决第三方不使用的资源的问题...Resource Shrinking要结合着Code Shrinking一起使用,什么是Code Shrinking呢?...以前是一个汇总的日志输出,如果你想看详细日志,想知道哪些资源被自动清理了,可以使用–info标记,显示详细的Gradle信息,然后把和自动清理资源的日志过滤出来即可。我们可以通过如下命令实现: ....有没有觉得它和我们用ProGuard的配置文件是一样的,我们在ProGuard配置文件里配置保存一些不被混淆的类也是这么做的。...此外,对于res/raw/keep.xml这个文件我们不用担心,Android Gradle构建系统最终打包的时候会清理它,不会把它打包进Apk中的,除非你在代码中通过R.raw.keep引用了它。
我们今天主要学习的就是物理结构的Project模式,和电脑文件系统中看到的文件层次一模一样,非常清晰。 ?...1、.gradle Gradle编译系统,版本由wrapper指定。...8、gradle.properties gradle相关的全局属性配置文件。 9、gradlew gradlew的配置文件。...12、local.properties 本地属性配置文件(key设置、androidsdk位置等属性) 13、setting.gradle 全局配置文件。...9、app.iml 模块配置文件。 10、build.gradle 模块的gradle构建配置文件。 11、proguard-rules.pro 代码混淆文件。
一、开启资源压缩 ---- 缩减、混淆处理和优化应用 ( 官方文档 ) : https://developer.android.google.cn/studio/build/shrink-code 资源压缩..., 而是将资源的文件保留 , 资源的实际内容替换掉 , 如 XML 文件资源 , 将其只保留一个根节点 ; 资源压缩配置是在 build.gradle 构建脚本中的 " android / buildTypes...; 如果保留多个资源使用逗号隔开 ; 使用 tools:discard 属性指定要移除的资源 ; 如果移除多个资源使用逗号隔开 ; 该设置支持 * 通配符 设置 , 五、完整配置 ---- 1、keep.xml 配置 res/raw/keep.xml 配置文件 : Proguard 混淆映射文件 mapping.txt ) 【Android 安全】DEX 加密 ( Proguard 混淆 | 将混淆后的报错信息转为原始报错信息 | retrace.bat
接受一个boolean类型的值 8.3.6 proguardFile 是BuildType的一个方法,用于配置Proguard混淆使用的配置文件,和前面讲的defaultConfig中的proguardFile...一样 8.3.7 proguardFiles 是BuildType的一个方法,用于配置Proguard混淆使用的配置文件,该方法可以同时配置多个Proguard配置文件 8.3.8 shrinkResources...现在我们启用了混淆,但是Android Gradle还不知道按何种规则进行混淆,不知道要保留哪些类不混淆,要做到这些就需要我们的Proguard配置文件了,现在我们为我们的混淆指定配置文件。...根据我们8.3小结讲的知识,指定Proguard配置文件我们可以使用proguardFile方法,也可以使用proguardFiles方法,这个根据情况而定,看你是想指定一个还是想同时指定多个。...Android SDK默认为我们提供了两个Proguard配置文件,他们分别是proguard-android.txt和proguard-android-optimize.txt,一个是没有优化的,一个是优化的
在编写配置时,你可以像编程一样灵活,Gradle是基于Groovy的DSL语言,完全兼容JAVA Gradle入门 projects 和 tasks是Gradle中最重要的两个概念,任何一个Gradle...#proguard混淆配置 │ └── src #源代码,资源等 ├── build │ └── intermediates ├── build.gradle #工程构建文件 ├── gradle...配置文件,在这里可以为所有project以及module配置一些常用的配置。...'proguard.cfg' } } } minifyEnabled为true表示启用混淆,proguardFile是混淆使用的配置文件,这里是module根目录下的proguard.cfg...另外注意进行代码覆盖率插装的APK不能进行代码混淆,这个很简单,为feature flavor指定不混淆的proguardFile覆盖默认的proguardFile即可。
另外,manifest在对文件进行合并后,还会根据build.gradle的设置覆盖相关属性。...Tool)处理后,会输出2个文件:一个R.java,为项目各资源分配了不同的id,将和java源码一起参与到后续的编译过程,id为4字节无符号整数,最高字节表示package id,次高字节表示type...下一步要进行的是通过javac命令将java源码编译成.class字节码,用以编译的classpath包含以下内容: android.jar,具体版本由targetSdkVersion指定; build.gradle...proguardFile 'proguard/proguard-rules.pro' } } 生成dex 如果项目涉及分dex,那在调用dx命令前,需要做一些准备的工作,把编译后的class...实际上是调用了proguard,只是要比常规的proguard简单一些,不执行混淆、优化跟预检几个步骤,只需要shrink即可,以allclasses.jar为输入、manifest_keep.txt为混淆配置文件
前言 Android官网构建系统介绍https://developer.android.com/studio/build/index.html Gradle 是 Android 现在主流的编译工具...注意,Product flavors和Build Type是不一样的,而且他们的属性也不一样。所有的 product flavor 版本和defaultConfig 共享所有属性!...Manifest Entries 您可以在构建变量的配置清单文件的一些属性的值。这些构建值清单文件覆盖现有值。...ProGuard 构建系统使您可以指定每个构建变量不同ProGuard的规则文件。构建系统可以运行ProGuard的构建过程中缩小和模糊处理的类。...Gradle Wrapper提供了一个windows的batch文件和其他系统的shell文件,当你使用这些脚本的时候,当前gradle版本将会被下载,并且会被自动用在项目的构建,所以每个开发者在构建自己
Build Types [默认情况下,Android插件会自动将原项目编译成debug和release两个版本,它们的区别在于调试程序的功能和APK的签名方式。...Running ProGuard [对ProGuard的支持是通过Gradle plugin for ProGuard 4.10来实现的,给build type添加runProguard 属性即可自动生成相应的...task] ProGuard is supported through the Gradle plugin for ProGuard version 4.10....{ runProguard true proguardFile getDefaultProguardFile('proguard-android.txt...Multi project setup [使用multi-project setup可以使得Gradle项目依赖其他的Gradle项目,它通常是通过将所有的项目作为某个指定的根项目的子目录来实现的。]
build 无需关心,编译产生的文件 gradle 这个目录下包含了 gradle wrapper 的配置文件,使用 gradle wrapper 的方式不需要提前将 gradle 下载好,而是会根据本地的缓存情况决定是否需要联网下载....gitignore 版本控制有关 build.gradle 全局的 gradle 构建脚本。 gradle.properties 全局的 gradle 配置文件。...在这里配置的属性会影响到项目中所有的 gradle 编译脚本。...gradlew 和 gradlew.bat 用来在命令界面中执行 gradle 命令的,其中 gradlew 是在 Linux 或者 Mac 系统中使用的,gradlew.bat 是在 Windows...下面是一个 android 大闭包,配置项目构建的各种属性。 compileSdkVersion 指定编译版本,这里指定的 24 表示使用 Android 7.0 系统的 SDK 编译。
文章目录 一、开启 ProGuard 混淆 二、混淆文件编写 三、混淆前后对比 四、build.gradle 完整配置文件 五、参考资料 一、开启 ProGuard 混淆 ---- 在 build.gradle...中 开启 Proguard , 在编译时 , 会自动进行如下一系列优化 : 压缩 Shrink : 检查 并 删除 没有使用的类 , 字段 , 方法 , 属性 ; 这里要注意 , 如果通过反射使用一个类时...’ 中 , 配置了两个文件, 其中 proguard-android-optimize.txt 是默认的混淆配置文件 , 由系统自动生成 ; proguard-rules.pro 是用户自己配置的混淆配置文件..., 在进行打包时 , 将这两个 ProGuard 配置文件进行合并处理 ; 二、混淆文件编写 ---- 混淆文件编写 : 引用的第三方库及服务 , 一般不进行混淆 , 去相应的开源页面 , 查找混淆配置...混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt ) 【Android 安全】DEX 加密 ( Proguard 混淆 | 将混淆后的报错信息转为原始报错信息 | retrace.bat
代码进行如下操作 : 压缩 Shrink : 检测并 删除 没有使用的类 , 字段 , 方法 , 属性 ; 优化 Optimize : 优化字节码 , 移除无用指令 ; 混淆 Obfuscate :...Proguard 混淆配置 : -keep 指定 类 , 类成员 , 不被混淆 ; ( 类成员指的是类的成员方法 和 成员属性 ) -keepclassmembers 指定 类成员 不被混淆 , 类...和 类 方法 可以混淆 ; -keepclasseswithmembers 指定 类 和 类成员 , 不被混淆 , 前提是 指定的类成员存在 ; 开启 Proguard : 在 Module 下的 build.gradle...} } 上述 proguard-rules.pro 是开发者自己手动配置的 , 上述 proguard-android-optimize.txt 混淆配置文件是系统自动生成的 , 该 proguard-android-optimize.txt...: 如果没有上述脚本 , 即删除了 build 目录 , 进入 Gradle 界面 , 执行 app -> Tasks -> other -> extractProguardFiles 任务 , 即可重新生成混淆配置脚本
在您读 ProGuard 手册时,您没必要看那些 输入 / 输出的部分,因为这些 Android Gradle 打包插件会替您指定输入源(您和第三方库的代码) 和 Android jar 库(您构建应用时用到的...您可以在 ProGuard 官网的表格看一下概览。 作为一个可选的方案来写 ProGuard 规则,您可以直接在某个不想被混淆和移除的类、方法、属性上添加 @Keep 注解。...“ 按钮), 您可以在 DEX 视图树中看到一些额外功能: 所有的名字都是混淆前的(即您可以看到原始的名字) 被 ProGuard 配置规则 kept 的包,类,方法和属性会显示成粗体 您可以开启 “...ProGuard 和 混淆后的堆栈 我之前提及到,在构建过程中 ProGuard 会在处理类文件时输出映射关系和日志文件。当您需要保留构建产物时,您应当保存好这些文件和 APK 在一起。...不过有个更好的方法,第三方库的维护者们如果发布的库是 AAR ,那么可以指定规则打包在 AAR 中并会在应用构建时自动暴露给构建系统,通过添加下面几行代码到库模块的 build.gradle 文件中:
从 Android 的角度看,Android 插件是基于 Gradle 构建的,是和 Android studio 完美搭配的新一代构建系统。...gradlew.bat Gradle 在 windows 系统下的执行脚本 gradlew Gradle 在 unix 系统下的执行脚本 gradle.properties Gradle属性配置文件 build.gradle...Gradle 配置文件 这里是根项目的配置文件。...gradle-wrapper.properties 是配置 Gradle Wrapper 属性的 app 目录是默认创建的一个 App 应用工程。...getDefaultProguardFile 是 Android 扩展的一个方法,它可以获取你的 Android SDK 目录下默认的 proguard 配置文件。
领取专属 10元无门槛券
手把手带您无忧上云