美文网首页
在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