gpt4 book ai didi

Android appbundle : rename generated outputfile (. aab)

转载 作者:行者123 更新时间:2023-12-04 23:38:28 36 4
gpt4 key购买 nike

我正在尝试重命名生成的 .aab格式为 <appname>-<variant>-<buildType>-<version> 的文件,有什么方法可以重命名输出包文件,类似于 apk 重命名。

复制和重命名我试过了,但问题是我需要将包命名为 <appname>-<variant>-<buildType>-<version> .当我创建这里提到的任务时 How to change the generated filename for App Bundles with Gradle?
获取变体是使用子字符串,它同时给出 variantBuildtype .

最佳答案

首先,我想澄清一下构建变体是什么。
构建变体是构建类型和风格的组合。
例如,构建类型可以是 release并且 flavor 可能类似于 freeVersion .所以变体是releaseFreeVersion .
注意:您链接的答案具有创建 .aab 的附加副本的副作用。文件,而不仅仅是重命名它。这个答案也解决了这个问题。
第 1 部分:此答案假设您使用的是产品 flavor
在这个答案中,我假设您使用的是产品 flavor 。我还假设您想要的格式是 <appname>-<flavor>-<buildType>-<version> .
首先创建一些补充的 Gradle 方法
您可以将这些添加到 build.gradle 的底部。文件(在所有花括号之外)。

static String firstMatchingSubstring(String taskName, String[] keys) {
def lcName = taskName.toLowerCase()

for(String key: keys) {
if(lcName.contains(key.toLowerCase())) return key
}

return null
}

/**
*
* @param taskName e.g., bundleMyFlavorRelease or bundleRelease
* @return
*/
String getBuildType(String taskName) {
return firstMatchingSubstring(taskName, getBuildTypeNames())
}

/**
*
* @param taskName e.g., bundleMyFlavorRelease
* @return
*/
String getFlavor(String taskName) {
return firstMatchingSubstring(taskName, getProductFlavorNames())
}

String[] getBuildTypeNames() {
def types = []

android.buildTypes.all { type ->
types.add(type.name)
}

return types
}

String[] getProductFlavorNames() {
def flavors = []

android.productFlavors.all { flavor ->
flavors.add(flavor.name)
}

return flavors
}
创建任务以重命名应用程序包
类似于 accepted answer you linked in your question我们将插入一个重命名任务。
我对应用程序名称进行了硬编码,但如果您想要使用不同的应用程序名称,您可以将它们放在 android.defaultConfig 中 block ,然后引用下面的名称。
tasks.whenTaskAdded { task ->
def name = task.name

//Skip some unnecessary tasks
if (name.startsWith("bundle")
&& !name.contains("Classes")
&& !name.contains("Resources")
&& name != "bundle") {

def renameTaskName = "rename${task.name.capitalize()}Aab"
def version = "${android.defaultConfig.versionName}-${android.defaultConfig.versionCode}"
def flavor = getFlavor(name)
def type = getBuildType(name)
if(flavor == null || type == null) return

def outputName = "AppName-$flavor-$type-$version"

tasks.create(renameTaskName) {
def path = "${rootDir}/app/${flavor}/${type}/"
def originalFile = "$path/app-${flavor}-${type}.aab"

doLast {
if (file("$originalFile").exists()) {
ant.move file: "$originalFile",
tofile: "$path/${outputName}.aab"
}
}
}

task.finalizedBy(renameTaskName)
}
}

第 2 部分:此答案假设您没有使用产品 flavor
如果您不使用产品 flavor ,那么可以使用更简单的方法,例如 accepted answer you linked in your question有一些修改。这将产生一个名称,如 <appname>-<buildType>-<version>.aab .
tasks.whenTaskAdded { task ->
def name = task.name

//Skip some unnecessary tasks
if (name.startsWith("bundle")
&& !name.contains("Classes")
&& !name.contains("Resources")
&& name != "bundle") {

def renameTaskName = "rename${task.name.capitalize()}Aab"
def type = task.name.substring("bundle".length()).uncapitalize()
def version = "${android.defaultConfig.versionName}-${android.defaultConfig.versionCode}"
def outputName = "AppName-$type-$version"

tasks.create(renameTaskName) {
def path = "${rootDir}/app/${type}/"
def originalFile = "$path/app-${type}.aab"

doLast {
if (file("$originalFile").exists()) {
ant.move file: "$originalFile",
tofile: "$path/${outputName}.aab"
}
}
}

task.finalizedBy(renameTaskName)
}
}

关于Android appbundle : rename generated outputfile (. aab),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55058980/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com