记录一下as通过gradle实现指定apk输出路径和apk文件名
Android Studio是使用gradle进行项目构建的,这使得通过配置文件进行版本管理成为可能。使用配置文件管理app版本很简单,就是定义一个properties文件,里面有版本号、版本名等版本信息,只需要在build.gradle中引用该文件,使用该配置文件的属性,进行项目的版本号等版本信息的赋值,就可以实现版本号的动态控制(注意:在gradle文件中配置的版本号、版本名称是优于在manifest.xml中配置的,如果你在gradle文件中配置了版本信息,那么不管你是否也在manifest.xml文件中进行了配置,系统都不会再去manifest.xml中进行版本信息的读取了)。
要实现这个目的,在项目中的local.properties文件中进行配置,内容如下:
ndk.dir=D\:\\SDK\\ndk-bundle
sdk.dir=D\:\\SDK
appReleaseDir=D\:\\AndroidStudioProjects\\apk\\
appVersionCode 2
appVersionName 2.5
appSuffixName=.apk复制代码
配置完成的properties在gradle (app module)中的引用方式如下:
首先通过ext.xxx 定义本地变量, 注意: 如果本地变量需要读取外部属性,不能能过def来定义
//定义本地变量, 有默认值
ext.appReleaseDir = "D:\\AndroidStudioProjects\\apk\\"
ext.appVersionCode = 2
ext.appVersionName = "2.5"
ext.appSuffixName = ".apk"
def loadProperties() {
def proFile = file("../local.properties")
Properties pro = new Properties();
proFile.withInputStream {stream ->
pro.load(stream)
}
appReleaseDir = pro.appReleaseDir
appVersionName = pro.appVersionName;
appVersionCode = Integer.valueOf(pro.appVersionCode)
appSuffixName = pro.appSuffixName
}
loadProperties()
android {
compileSdkVersion 25
buildToolsVersion "27.0.3"
aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
defaultConfig {
applicationId "xxxxxxxx"
minSdkVersion 21
targetSdkVersion 25
//通过这种方式,修改完版本号后,无需sync gradle
versionCode appVersionCode
versionName appVersionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = "DEVICE_"
output.outputFile = new File(appReleaseDir + fileName + appVersionName + appSuffixName)
}
}
}
}
复制代码