原文:http://blog.zhaiyifan.cn/2016/03/14/android-new-project-from-0-p2/
作者:MarkZhai
昨天给大家推荐了从零开始的Android新项目1 - 架构搭建篇,也对后续的Gradle篇作了预告,大家表示很期待,没想到话音刚落,作者就已经码出了这篇新作,如此高产不得不服,可能还有些朋友没看过,今天再给大家推荐下。
相信大家的项目用上gradle都已经很久了,但用得如何呢?这里分享一下我的gradle脚本,大部分都是去年6月左右就开始用上的,有一部分比如签名的安全保存则是最近才自己动手,做了令自己觉得还不错的方案。
科普小结,可能有些同学不太明白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:
对Android的module
对Java的module:
详细的可以看看Google的官方文档Apk Splits
我的使用:
大致来说,就是可以根据脚本的配置,将apk以abi、density进行分包。再也不用为了缩小包的体积而专门去只留下一个arm的jni文件夹了,想怎么分怎么分,搞不定哪天就要传一个x86的包了,而且有的模拟器也只支持x86。
当然如果市场能支持这些配置,那就更好了,用户下载apk的流量就小多了。
怎么能在使用aar依赖提升编译速度的同时,又能兼顾灵活性,随时可以修改源码呢?
解决方案就是module式aar依赖。
在你的library module目录下, 打开build/outputs/aar,是不是有aar文件(编译过后就会生成)?把它放到module目录下面,然后在build.gradle里面:
再把原来那些脚本给注释了,就搞定了。是不是特别简单?如果想再使用源码依赖,反注释一下就好了。
本篇主要讲了开发阶段gradle的各种实践,下一篇是什么暂时我也没有想法,哈哈。
如果喜欢这篇,欢迎转发,点击阅读原文可直接访问作者博客 blog.zhaiyifan.cn
微信扫一扫
关注该公众号