AGP的使用在我们项目中肯定都能用到,但是我们可能只是基与复制,并没有太大的去了解这些属性与用法。但是如果我们想要去让我们的项目可读性更加强更好的管理,或者想去成为一名架构师,这些知识一定是需要我们掌握的。
我们在Android项目中能够使用AGP是因为我们导入了Android的plugins
首先我们来认识下AGP 中几个重要的节点
android{}
defaultConfig{}
产品
在我们的项目中经常会遇到一种场景,同一套的代码,但是部署很多套环境,提供给不同的客户使用,这个时候每次打包的时候我们都需要去修改服务器地址,如果稍微不注意就会打错环境的apk,下面的学习就可以的很好的解决这种问题。
创建产品变种与创建 build 类型类似:将其添加到构建配置中的 productFlavors 代码块并添加所需的设置。产品变种支持与 defaultConfig 相同的属性,这是因为,defaultConfig 实际上属于 ProductFlavor 类。这意味着,您可以在 defaultConfig 代码块中提供所有变种的基本配置,每个变种均可更改其中任何默认值,如 applicationId。
在productFlavors中就可以定义不同的产品,产品内部定义相同变量名的不同的值。
而dimension 属性是指定对应的维度
BuildType
你可以在模块级 build.gradle 文件中的 android 代码块内创建和配置 build 类型。当你创建新模块时,Android Studio 会自动为您创建“debug”build 类型和“release”build 类型。虽然“debug”build 类型没有出现在构建配置文件中,但 Android Studio 会使用 debuggable true 配置它。这样,就可以在安全的 Android 设备上调试应用,并使用常规调试密钥库配置 APK 签名。
如果你要添加或更改某些设置,可以将“debug”build 类型添加到配置中。以下示例为“debug”build 类型指定了 applicationIdSuffix,并配置了一个使用“debug”build 类型的设置进行初始化的“staging”build 类型
AGP其它配置
resValue
使用resValue可以为当前的构建产品增加资源文件属性。
resValue 'string', 'name', 'value'
string表示资源标签的类型。name,资源属性名称。value,对应的属性值。
注意,name如果已经存在,就不能进行覆盖。
不同的产品风味都可以添加自己的resValue,如果要所有产品风味都添加到,可以在defalutConfig{}进行添加。
buildConfigField
使用buildConifgField为产品修改BulidConfig中的类型。
BuildConfig是在产品构建时自动生成的java类,里面存放了一些静态常量,编译后可以直接使用类中的常量。
buildConfigField 'String', 'fieldName', 'value'
String表示字符串类型,可以是其它Java类型,但是要注意,这里做的是文本的替换。所以,如果是其它类型,可以使用全类名的方式。
filedName表示属性名,value则是对应的值,由于是文本替换,如果value是字符串,需要自己加入双引号。如:
sourceSets
在android{}中,可以为构建类型添加SourceSet设置。
sourceSets{}中主要通过main{}来设置源码文件的位置、资源文件存放的位置等。manifest.srcFile:AndroidManifest文件存放的路径;
java.srcDirs:Java源文件存放的路径;
resources.srcDirs:resources文件 (java项目中的) 存放的路径;
aidl.srcDirs:aidl文件存放的路径;
res.srcDirs:res文件夹路径;
assets.srcDirs:assets文件夹路径;
jniLibs.srcDirs:jniLibs文件夹路径;
adbOptions
在android{}中,可以为构建类型添加adb设置。
adbOptions {
timeOutInMs = 5 * 1000 // ms
installOptions '-r', '-s'
// adb install有 l, r, t, s, d, g 这6个选项。
// -l: 锁定该应用程序
// -r: 替换已经存在的应用程序,强制安装
// -t: 允许测试包
// -s: 把应用装到sd卡上
// -d: 允许进行降级安装,也就是应用的版本比手机上的版本低
// -g: 为该应用授予所有运行时的权限
}
javaCompileOptions
使用javaCompileOptions可以在编译时,构建java代码添加一些设置。
比如为apt添加相关的参数:
javaCompileOptions {
annotationProcessorOptions {
arguments += [A: 'a'] // 注意+= 和 =的区别
}
}