一、gradle基本知识
gradle是基于Groovy语言的,一个Android Project项目基本会生成三种gradle文件:module gradle、project gradle 和 setting gradle
- module gradle一个模块有一个,如 上图所示app.gradle和firstflavor.gradle。该gradle是配置本模块信息的
- project gradle如图中QQView,该gradle配置项目的总的信息
- setting gradle如图中Settings,指定项目所使用的模块
二、使用gradle隐藏敏感签名信息
- 在根目录建立keystore.properties文件,在文件里面配置签名信息
- 在主模块的gradle文件中加载properties文件中的签名信息
在签名配置中使用properties实例代替原来签名
三、使用buildType和flavor
buildType和flavor可以对mudule进行绝大多数的配置,也是动态依赖的关键
在AS左上角File->Project Structure->可以找到buildType和Flavor的快捷配置
包含了许多常见的参数
其中SigningConfig可以在Singning里面配置好签名信息。VersionName Suffix和ApplicationId Stuffix分别表示版本信息的后缀名和包名的后缀名。
有些参数在buildTypes和Flavor都可以配置,但是如果重复了会被buildTypes中的代替,如buildConfigField,该参数可以配置常量,然后在代码中使用Build.IBS引用。
可以看到,buildTypes有debug,realease,还可以有其他许多不同的配置,Flavor也是同样的道理,也就是总共有buildtypes种类×Flavor种类的组合,可以利用这个组合进行多渠道打包编译和定制。
差异化打包一
在mudule目录的src目录下右键新建JavaFolder文件,会有多个选项可以选,分别对应debug,release,和其他多组合。建完文件以后可以在里面使用与main文件相同的xml资源文件,编译打包时会覆盖原来的main资源文件,从而实现动态打包。比如可以更改mipmap文件中的icon,不同的打包会有不同的应用图标。
差异化打包二
新建一个module,名字与所定义某一个flavor相同,在模块的gradle文件中配置好版本信息后,同样更改所要替换的资源文件,不过,需要删除main文件中的同名文件,否则无效。这与上面一种方法不同。
差异化编译三
使用compile实现差异化打包
默认先使用compile编译,testCompile为单元测试的,xxxCompile表示再按照flavor偏好编译。当使用module作为依赖库时,只需compile project ‘:library’或者xxxCompile project ‘:library’即可,当使用module作为flavor动态编译时(上面方法差异化打包二),需要module与flavor同名,并且需要使用xxxCompile project
(xxx为flavor名字),还需要删除主模块中重名的文件才可以。
关于使用变量
在manifest可以使用键值对用于Application或者Acticity中,然后在代码中访问。
其中,${APP_NAME_THIS}使用EL表达式也类似kotlin中字符串存在的用法,manifest中的${xx}变量的值配置在flavor和buildTypes时表示为
manifestPlaceholder = [APP_NAME:"name"(value)]
${xx}为gradle中变量时,如compile’xxx’需要变为compile “xxxx${xx}”,然后在project中配置值
大致就是这样,自己本人对于gradle还比较陌生,算是做做笔记,再接再厉。
参考学习文章
[1]:android studio打包以及gradle配置构建
[2]:Android 必备而又容易忽视的知识 Gradle的高级用法