AndroidStudio的gradle配置,配置清单的常量,Java代码的常量。
gradle配置
1.导入多种第三方库的时候,有的库可能会有很多种values
然而自己主APP下只有一个values,直接运行项目的时候没问题,打包的时候会出现
Error:” ” is not translated in “en” (English) [MissingTranslation]
在build.gradle中加入如下:
lintOptions {
disable 'MissingTranslation'
checkReleaseBuilds false
abortOnError false
}
2.将多人开发,每个人本地的keystore都不一样,导致SHA1也不一样,第三方库的apikey就不一样,如高德地图。所以项目同样debug.keystore和生产环境的keystore
//签名配置
signingConfigs {
// 生产环境统一使用的正式签名文件
release {
storeFile file('正式kestore存储路径')
keyAlias '打包的项目名称'
keyPassword '打包的密码'
storePassword '打包的密码'
}
// 不同环境下debug也统一使用的签名文件,主要解决高德地图依赖签名文件生成的专用key问题
debug {
storeFile file('debug.kestore存储路径')
keyAlias 'androiddebugkey'
keyPassword 'android'
storePassword 'android'
}
}
3.自定义打包后的apk名字
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
//这里修改apk文件名
def fileName = "saleman_mjh.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
4.动态配置清单变量,如高德地图的apikey
productFlavors {
//正式打包的高德地图的Key配置
dev {
manifestPlaceholders = [
AMAP_APIKEY_VALUE : "生产key",
PROVIDER_NAME : "com.lianjiu.salesman"
]
}
//通用的Debug环境下高德地图的Key配置
generic {
manifestPlaceholders = [
AMAP_APIKEY_VALUE : "测试key",
PROVIDER_NAME : "com.lianjiu.salesman"
]
}
}
清单使用方式:
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="${AMAP_APIKEY_VALUE}"/>
5.配置常量,给Java代码使用,比如是否打印日志、开发环境生产环境的地址配置。
buildTypes {
//生产环境配置
release {
debuggable true
//true:表示混淆代码,在proguard-rules.pro文件中配置混淆规则
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
buildConfigField "String", "API_SERVER_URL", "\"http://erp-api.mingpin365.cn/\""
}
debug {
debuggable true
minifyEnabled false
signingConfig signingConfigs.release
buildConfigField "String", "API_SERVER_URL", "\"http://lianjiu-api.iwms.xin/\""
}
}
配置好之后刷新一下,会在build里面的resource下的buildConfig生产对应的Java代码,如下图
使用的时候直接用BuildConfig就能得到
注意:使用buildConfigField 的时候会有一个坑,如果是在Module的buil.gradle配置的,不管怎么切换debug,release,运行的时候都是release。因为打包的时候module会生成debug的aar和release的aar,APP依赖module的时候默认是release的aar。所以,需要另外一种配置方式。如下:
module的build.gradle中,配置buildConfigField,
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
buildConfigField "String", "API_SERVER_URL", "\"http://erp-api.mingpin365.cn/\""
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
buildConfigField "String", "API_SERVER_URL", "\"http://lianjiu-api.iwms.xin/\""
}
//注:见下面的configurations注释
publishNonDefault true
}
//主要用于解决buildTypes切换环境问题(打包的时候生成release跟debug,提供给使用者)
//使用者导入方式: debugCompile project(path: ':commsdk', configuration: 'debug')
// releaseCompile project(path: ':commsdk', configuration: 'release')
configurations {
debug
release
}
在主APP的build.gradle中引入依赖:
debugCompile project(path: ':commsdk', configuration: 'debug')
releaseCompile project(path: ':commsdk', configuration: 'release')
// compile project(':commsdk')
这里面的configuration: ‘debug’是跟module中配置的configuration变量一一对应。
运行的时候直接选择debg,release来选择对应的环境常量,如下图:
这样项目就会根据你选择的环境切换不同的常量。