cover_image

从零开始的Android新项目2 - Gradle篇

MarkZhai Android程序员 2016年03月15日 01:02

原文:http://blog.zhaiyifan.cn/2016/03/14/android-new-project-from-0-p2/

作者:MarkZhai


昨天给大家推荐了从零开始的Android新项目1 - 架构搭建篇,也对后续的Gradle篇作了预告,大家表示很期待,没想到话音刚落,作者就已经码出了这篇新作,如此高产不得不服,可能还有些朋友没看过,今天再给大家推荐下。


相信大家的项目用上gradle都已经很久了,但用得如何呢?这里分享一下我的gradle脚本,大部分都是去年6月左右就开始用上的,有一部分比如签名的安全保存则是最近才自己动手,做了令自己觉得还不错的方案。

module类型的区分

科普小结,可能有些同学不太明白Java library module和Android library module是怎么区分的,其实就是个plugin的区别,在module的build.gradle中:
Android application module:

图片
Android library module:

图片

Java library module:

图片

版本号管理

如果只有一个application module还好,如果我们有多个module怎么办呢?每次改版本号累不累?

解决方案就是在root里申明全局变量,可以在单独的gradle里(比如新建一个dependency.gradle)申明然后apply from引用进来,或者直接定义在root的build.gradle中。

图片

在子module里面则使用rootProject.ext去进行引用:

图片

依赖管理

那么多第三方库的引用,在多个module里引用,修改起版本号来好辛苦,万一有一个漏改了(比如gson)结果导致了异常行为,搞不好查原因查个半天,结果摔键盘竟然是版本号导致的。
so,和上节类似,我们需要统一定义依赖:

图片

这里也可以根据个人喜好把版本号也全都抽出去,我个人的实践原则是除非引用超出1处,否则还是定义在一起。


module中使用:

图片

这里我还特地为一些debug和release compile不同包的定义了2个map,见leakCanary和blockCanary引用。

签名管理

签名是一个很敏感的东西,只要有了签名文件和对应的密码信息,就能轻易反编译修改源码然后再签名进行发布,因此如何保存这些敏感信息是很重要的。

在我的个人实践中,主要做了这么几点:

local.properties定义keystore信息文件路径:

图片
keystore.properties保存keystore信息:

图片
buildsystem下保存了:

图片

application module的signingConfigs:

图片

Java8支持

对Android的module

图片

对Java的module:

图片

Split APK

详细的可以看看Google的官方文档Apk Splits
我的使用:

图片

大致来说,就是可以根据脚本的配置,将apk以abi、density进行分包。再也不用为了缩小包的体积而专门去只留下一个arm的jni文件夹了,想怎么分怎么分,搞不定哪天就要传一个x86的包了,而且有的模拟器也只支持x86。

当然如果市场能支持这些配置,那就更好了,用户下载apk的流量就小多了。

Module aar依赖

怎么能在使用aar依赖提升编译速度的同时,又能兼顾灵活性,随时可以修改源码呢?

解决方案就是module式aar依赖。

在你的library module目录下, 打开build/outputs/aar,是不是有aar文件(编译过后就会生成)?把它放到module目录下面,然后在build.gradle里面:

图片
再把原来那些脚本给注释了,就搞定了。是不是特别简单?如果想再使用源码依赖,反注释一下就好了。

总结

本篇主要讲了开发阶段gradle的各种实践,下一篇是什么暂时我也没有想法,哈哈。



如果喜欢这篇,欢迎转发,点击阅读原文可直接访问作者博客 blog.zhaiyifan.cn


微信扫一扫
关注该公众号

继续滑动看下一个
Android程序员
向上滑动看下一个