1.各种不想解决的黄色小提示,不想写contentDescription,设计稿上字体就是小于12sp等等
lintOptions {
//发生错误的时候停止构建
abortOnErrortrue
//不忽略警告
ignoreWarningsfalse
//lint 规则配置
lintConfig file("../lint.xml")
}
然后具体的lint规则配置:lint.xml
2.签名配置 signingConfigs--使用gradle打包的时候
signingConfigs {
config {
keyAlias KEY_ALIAS
keyPassword KEY_PASSWORD
storeFile file(STORE_FILE)
storePassword STORE_PASSWORD
}
}
新建一个Android 项目的时候,,rootProject下面会生成gradle.properties和local.properties(sdk 位置)文件,gradle.properties中的内容不需要显示调用,可以直接在build.gradle中使用,如上。当配置比较简单的时候,可以将这些内容直接在gradle.properties配置。
gradle.properties中的内容:
KEY_ALIAS=测试
KEY_PASSWORD=666666
STORE_FILE=../测试.jks
STORE_PASSWORD=666666
当然,gradle.properties也可以配置其他很多东西,SDK Version,app version 啊,第三方的key secret啊,当然这些东西多了以后,你就会发现我的天,这个
gradle.properties里面怎么什么都有?!
这个时候,我们就需要新建一个**.properties文件了,就跟你有一个student bean ,然后又有一堆course相关的属性一样,当然你可以放到student里面,但是最好还是新建一个course类啦,好,我们现在新建一个keystore.properties,把上图的内容放到keystore.properties里面,有多个环境的key就每个分开写,那在build.gradle里面怎么使用这个新建的properties呢?
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
为啥要定义变量呢,因为你接下来要用啊,2333...怎么用呢,不要着急,马上来了:
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file("../${keystoreProperties['storeFile']}")
storePassword keystoreProperties['storePassword']
其他properties请自由发挥。
3.刚才讲到多个环境,为啥会有多个环境呢,哦,因为dev一个环境,QA一个环境,prod一个环境呀,这么多环境请求地址这些都不一样,怎么办呢?好办!
productFlavors了解一下。你可以在这里面干些什么呢?
先分一下环境吧
prod{
}
qa{
}
dev{
}
A.不同的url地址:
prod{
buildConfigField 'String', 'BASE_URL', '"https://www.baidu.com"'
}
qa{
buildConfigField 'String', 'BASE_URL', '"https://www.google.com"'
}
好,你在代码里面请求的时候,只需要调用BuildConfig.BASE_URL就可以了,麻麻再也不用担心切换环境了。
gradle3.0以后,需要在defaultConfig里面添加flavorDimensions 属性
defaultConfig {
applicationId "com.test"
minSdkVersion MIN_SDK_VERSION as int
targetSdkVersion TARGET_SDK_VERSION as int
versionCode VERSION_CODE as int
versionName VERSION_NAME
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
flavorDimensions "channel","charge","env"
}
flavorDimensions是将Flavors中的内容进行分类,比如渠道(百度,360,应用宝等等),比如是否收费免费之类的,比如环境,然后不同分类可以互相组合,比如百度收费,百度免费,360收费,360免费等等
申请这个属性以后,需要在Flavors中声明这是属于哪个分类,所以将之前的改写成
prod{
dimension "env"
buildConfigField 'String', 'BASE_URL', '"https://www.baidu.com"'
}
qa{
dimension "env"
buildConfigField 'String', 'BASE_URL', '"https://www.google.com"'
}
B.不同的环境不同的签名文件
prod{
signingConfig signingConfigs.prod
}
qa{
signingConfig signingConfigs.qa
}
这个signingConfigs.prod和signingConfigs.qa是什么呀?哦,自己在signingConfigs里面添加的啊,欲知后事如何,需缴纳五块钱:
signingConfigs{
prod{
keyAlias keystoreProperties['keyAliasStage']
keyPassword keystoreProperties['keyPasswordStageProd']
storeFile file("../${keystoreProperties['storeFileStageProd']}")
storePassword keystoreProperties['storePasswordStageProd']
}
qa{
keyAlias keystoreProperties['keyAliasStageQa']
keyPassword keystoreProperties['keyPasswordStageProdQa']
storeFile file("../${keystoreProperties['storeFileStageProdQa']}")
storePassword keystoreProperties['storePasswordStageProdQa']
}
}
嗯,看完上诉,你的信用卡已自动扣款五块,感谢各位支持!!
你说啥?五块钱还想要手机上同时安装各个环境的包?!
好嘛,applicationIdSuffix了解一下,同样还是在我们的productFlavors里面:
prod{
applicationIdSuffix ".prod"
}
qa{
applicationIdSuffix ".qa"
}
你说啥?包名变了第三方库没法用了?唉,你的五块钱好值钱啊。
写在build.gradle里面的,都可以像2那样,放在.properties了,放在AndroidManifest里面的呢,额,不告诉你!
这个好像JS啊,啊,是啊,我也不知道什么像什么,那value的值写到哪里呢,都跟你说productFlavors了解一下啦,当然这个不写在productFlavors里面,哈哈哈,有本事跟着网线爬过来打我啊,我用无线网,哈哈哈
android {
buildTypes {
prod {
manifestPlaceholders = [**_apikey: "12345664"]
}
qa {
manifestPlaceholders = [**_apikey: "123456677"]
}
}
}
不同环境不同的第三方签名,意味着你可以对不同环境发生的各种事情进行监控,嗯,你懂的。
4.configurations 依赖分组
在Gradle中,依赖都被会分配到某一个具体的configuration中。Configuration代表着一个或多个构件及构件所需依赖的一个分组。
系统已经预定义了一些configuration,比如,compile,runtime,testCompile,testRuntime等,这个好像是gradle3.0以前,3.0以后是implementation,testImplementation。
compile/implementation 放在这个configuration下的依赖是在编译产品代码时所使用的,但它作为一个分组,包含产品代码和编译所需的依赖。
runtime 产品代码在运行时需要的依赖,默认,也会包含compile中的依赖。
testCompile 编译测试代码时所需要的依赖,默认,被编译的产品代码和产品代码需要的编译依赖也属于该分组。
testRuntime 运行测试时需要的依赖。默认,包含compile,runtime和testCompile的分组的构建和依赖。
上面这一大段都是抄的!感谢复制粘贴让我少些了好多字,废话少说,比如我们又一个监控内存泄漏的leakcanary,这个玩意儿引入以后,会生产一个查看内存泄漏的app,但是在我们版本发布以后我们是不想要这个的,为啥不想要啊?你还买一送一啊?!所以我们经常会区分debug版本和release版本,当然不同环境下可能需求也不一样,所以:
prodDebugCompile "com.squareup.leakcanary:leakcanary-android:1.5"
prodReleaseCompile "com.squareup.leakcanary:leakcanary-android-no-op:1.5"
qaDebugCompile "com.squareup.leakcanary:leakcanary-android:1.5"
qaReleaseCompile "com.squareup.leakcanary:leakcanary-android-no-op:1.5"
然后配置configuration:
configurations {
prodReleaseCompile
prodDebugCompile
qaReleaseCompile
qaDebugCompile
}
这样,在我们打包的时候,gradle就会根据不同场景打包不同的依赖。