从零开始的Android新项目(2):Gradle 篇

从零开始的Android新项目(1):架构搭建篇

相信大家的项目用上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的各种实践,下一篇讲一讲MVPVM的实践。

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

任选一种支付方式

1 4 收藏 评论

关于作者:markzhai

Software Engineer, Android, JavaScript, Data Mining, Security。曾就职Google HK,腾讯,阿里。 个人主页 · 我的文章 · 26 ·      

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部