美文网首页
在gralde.build里写代码(自定义apk名)

在gralde.build里写代码(自定义apk名)

作者: 吃豆腐不吐豆腐皮 | 来源:发表于2020-01-09 11:20 被阅读0次

本文将包含两个内容

  • 在gralde.build里写代码
  • 给gradle.build里的新增代码安置个新家

这篇文章的起因是,as自动生成的包名不是很符合我的需求,随即打算自定义下as所生成的apk名字。


给gradle.build里加点代码

需要的代码如下,放在模块build.gradle根节点即可

// 告诉系统我的apk名字叫啥,将在android节点里被我手动调用
def defineApkNameByCustomRules(){
    android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            outputFileName = generateOutputFileName(output)
        }
    }
}

// 给上面那个方法用,返回个自定义规则的文件名
def generateOutputFileName(output){
    def outputFile = output.outputFile
    def outputFileName = "custom"
    if (outputFile != null && outputFile.name.endsWith('.apk')) {
        def time = new Date().format("YYYYMMdd-HHmmss")
        outputFileName = "应用-" + time + ".apk"
    }
    return outputFileName
}

方法的调用可以在android节点内执行,如下

android {
    // 省略部分代码
    defaultConfig {
        // 省略部分代码
    }
    buildTypes {
        // 省略部分代码
    }
    // 使用了下面的自定义方法
    defineApkNameByCustomRules() 
}
def defineApkNameByCustomRules(){
  // 省略代码
}
def generateOutputFileName(){
  // 省略代码
}

这样写好后,打出来的包名就会是以下的格式

应用-20200101-121200.apk

结果是想要的,但是代码的摆放不是很好,我们可以优化下代码摆放的位置。


给新增的代码挪个地方

我选择在模块build.gralde同级目录新建一个文件夹,并命名为gradle_methods,在文件夹内创建文件,并命名为apk_build_helper.gradle,内部代码如下

// 私有方法,名字和搬家前一样。
// 给下面那个ext.ApkBuildHelper.defineApkNameByCustomRules用的
def generateOutputFileName(output){
    def outputFile = output.outputFile
    def outputFileName = "custom"
    if (outputFile != null && outputFile.name.endsWith('.apk')) {
        def time = new Date().format("YYYYMMdd-HHmmss")
        outputFileName = "应用-" + time + ".apk"
    }
    return outputFileName
}

ext.ApkBuildHelper = [
         // 方法名和代码搬家前一样
        defineApkNameByCustomRules:{  -> 
            android.applicationVariants.all { variant ->
                variant.outputs.all { output ->
                    // 这里调用了上面那个自定义方法
                    outputFileName = generateOutputFileName(output)
                }
            }
        }, // 别忘记逗号

        // 没具体作用,只是放这里当个打印输出的范例
        test: { ->
            println('This log from ApkBuildHelper:test ') 
        },
]

使用的话,只需在模块build.gradle里稍作改动即可,如下

// 新增了导入包含所需方法的文件
apply from: 'gradle_methods/apk_build_helper.gradle'  

// 省略部分代码

android {
    // 省略部分代码
    defaultConfig {
        // 省略部分代码
    }
    buildTypes {
        // 省略部分代码
    }

    // 这里的ApkBuildHelper就是自定义文件里的ext.ApkBuildHelper
    ApkBuildHelper.defineApkNameByCustomRules() 
}

由上面的代码可知道,在外部gralde文件里,def的方法是私有的,如果想要被外部获取到需要和ext建立关系(相关内容后续补充)。


那么自此,一个简单的,使用自定义的,外部脚本的gradle范例,就到此为止了。
感谢阅读 :)

相关文章

网友评论

      本文标题:在gralde.build里写代码(自定义apk名)

      本文链接:https://www.haomeiwen.com/subject/cguvyctx.html