 
            
          
          
          Gradle 日常
 
            
          
          
          本文主要记录学习到的一些 gradle 使用技巧,并不全面,但是是在开发中会用到的一些点,可以借助这些技巧少做很多额外的工作。
代码分包
主要是为了应对在不同 buildType 和 flavor 下需要使用不同的代码包这种场景,比如我们在 fortest 时初始化调试工具,但是在 release 时不会初始化,同时我们不希望通过 if(){}else{} 判断来实现,因为这种方式会将所有 buildType 的代码揉在一起,不利于扩展和维护,此时希望最好能够将不同 buildType 的代码分离,不同的构建方式时,打包不同的代码,因此代码包应该这样组织:
代码除了原来的 main 包之外,还分为了 fortest,debug,release 三个包,当使用不同的 buildType 构建时,会打包各个文件夹下的代码,这里不仅限于 java 代码,也包括资源文件等,可以看作 debug 和 main 是同级的,两个包加在一起,打包成最后的 class 文件。

题外话:那么我们什么时候使用 分包 策略,什么时候使用 if(BuildConfig.DEBUG) 判断的方法呢,相比起啦,使用 BuildConfig 判断写起来更简单,不需要在每个包里面去创建类,分包更适合那种不同 buildType 依赖都不同的场景,比如,我在 debug 的时候依赖了调试的 library 而在 release 时没有这个依赖,那么如果用判断的方法的话,在构建 release 时,就会找不到对应的类,因此这种场景下,需要把代码分包,在 debug 包里面才去引用 debugCompile 的内容,而在 release 时是完全没有感知的。另外使用分包的方法有个很大的好处就是代码的完全分离,不会因为其他 buildType 的代码污染你的 release 构建产品。
resValue
使用该属性可以根据 buildType 和 flavor 的类型来分别设置不同的 res 资源的 value,比如在不同的 buildType 使用不同的 app_name:
| 1 | buildTypes { | 
buildConfigField
使用该属性可以根据 buildType 和 flavor 的类型来更改最后编译生成的 BuildConfig 类,比如我们有一个调试开关 AssistantEntry 需要动态改变,则
| 1 | buildTypes { | 
编译后我们可以生成新的 BuildConfig 类,在原来基础上增加了新的字段 AssistantEntry
| 1 | public final class BuildConfig { | 
matchingFallbacks
当定义了一个新的 buildType,但是依赖的 library 中并没有该 buildType 会造成编译失败,matchingFallbacks 可以使新定义的 buildType 匹配到 library 中已经存在的 buildType。
比如我新定义了 fortest,我可以使 fortest 匹配 library 中的 release 的 buildType,这样都是用 fortest 类型构建时,使用的就是 library 中 release 类型的代码,他接受的是个数组,按照优先级匹配。
| 1 | buildTypes { | 
目前维护的几个项目,求 ✨✨✨✨
- SocialSdk 登录分享功能原生接入
- LightAdapter 轻量级适配器
- ImageEditor 图片处理,裁剪旋转,贴纸涂鸦,滤镜等
- WeexCube Weex 容器方案
- Kotlin 学习系列总结,共计 22 篇
- 本文链接: http://cdevlab.top/article/3c4d21f6/
- 版权声明: 版权所有,转载请注明出处!