Grz*_*orz 41 android gradle apk android-gradle-plugin
我有一个Android项目,它使用Gradle进行构建过程.现在我想添加两个额外的构建类型登台和生产,所以我的build.gradle包含:
android {
buildTypes {
release {
runProguard false
proguardFile getDefaultProguardFile('proguard-android.txt')
}
staging {
signingConfig signingConfigs.staging
applicationVariants.all { variant ->
appendVersionNameVersionCode(variant, defaultConfig)
}
}
production {
signingConfig signingConfigs.production
}
}
}
Run Code Online (Sandbox Code Playgroud)
和我的appndVersionNameVersionCode看起来像:
def appendVersionNameVersionCode(variant, defaultConfig) {
if(variant.zipAlign) {
def file = variant.outputFile
def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk")
variant.outputFile = new File(file.parent, fileName)
}
def file = variant.packageApplication.outputFile
def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk")
variant.packageApplication.outputFile = new File(file.parent, fileName)
}
Run Code Online (Sandbox Code Playgroud)
如果我执行任务assembleStaging然后我得到我的apk的正确名称,但当我执行assembleProduction然后我得到我的apk的更改名称(如在临时案例中).例如:
MyApp-defaultFlavor-production-9.9.9-999.apk
MyApp-defaultFlavor-production-9.9.9-999.apk
Run Code Online (Sandbox Code Playgroud)
看起来在生产构建类型中执行appendVersionNameVersionCode.我怎么能避免呢?
Les*_*zek 37
正如CommonsWare在他的评论中写道的那样,你应该appendVersionNameVersionCode
只为暂存变种打电话.您可以轻松地执行此操作,只需稍微修改您的appendVersionNameVersionCode
方法,例如:
def appendVersionNameVersionCode(variant, defaultConfig) {
//check if staging variant
if(variant.name == android.buildTypes.staging.name){
if(variant.zipAlign) {
def file = variant.outputFile
def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk")
variant.outputFile = new File(file.parent, fileName)
}
def file = variant.packageApplication.outputFile
def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk")
variant.packageApplication.outputFile = new File(file.parent, fileName)
}
}
Run Code Online (Sandbox Code Playgroud)
Pio*_*zki 20
由于删除了已弃用的APIS,Lecho的解决方案不适用于Android Gradle Plugin 0.14.3+:http://tools.android.com/tech-docs/new-build-system
差不多1.0:删除了已弃用的属性/方法
...
- Variant.packageApplication/zipAlign/createZipAlignTask/outputFile/processResources/processManifest(使用变量输出)
以下适用于我:
def appendVersionNameVersionCode(variant, defaultConfig) {
variant.outputs.each { output ->
if (output.zipAlign) {
def file = output.outputFile
def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk")
output.outputFile = new File(file.parent, fileName)
}
def file = output.packageApplication.outputFile
def fileName = file.name.replace(".apk", "-" + defaultConfig.versionName + "-" + defaultConfig.versionCode + ".apk")
output.packageApplication.outputFile = new File(file.parent, fileName)
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 Kotlin DSL,则可以通过以下方式更改 APK 名称:
applicationVariants.all {
outputs.all {
this as com.android.build.gradle.internal.api.ApkVariantOutputImpl
val buildName = buildType.name
val timestamp = SimpleDateFormat("yyyyMMdd").format(Date())
val apkName = timestamp + "_AppName_" + defaultConfig.versionName + "." + defaultConfig.versionCode + "_" + buildName + ".apk"
outputFileName = apkName
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不想使用时间戳,请将其删除。否则,不要忘记文件顶部的这些行来导入 java 类:
import java.util.Date
import java.text.SimpleDateFormat
Run Code Online (Sandbox Code Playgroud)
您还可以比较构建名称,以便为不同构建指定配置,如下所示:
name == "debug"
/* or */
name.contains("release")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35810 次 |
最近记录: |