android - 使用每个构建的唯一哈希值更新@ string / app_name

时间:2017-10-04 14:52:12

标签: android android-studio gradle android-gradle

我希望能够快速直观地验证我的模拟器上是否安装了新版本。我正在考虑的一种方法是在每个新构建时使用唯一的哈希值更新@ string / app_name值,或者可能只是随机的四个char值。然后,当我在手机上看到应用程序图标时,它将具有与上一个版本不同的值,我知道它已更新。

有没有办法在构建时以编程方式更新@string值?也许我不知道一些Gradle功能?

2 个答案:

答案 0 :(得分:2)

使用resValue从gradle文件添加资源值。 例如,请参阅Is it possible to declare a variable in Gradle usable in Java?

答案 1 :(得分:1)

我做了你需要的事情:

此代码替换<string name="logging"></string>

中的值

<强> \脚本\ set_strings_xml_app_version.sh

sed -E -i "" "s/<string name=\"logging\" translatable=\"false\">[a-zA-Z0-9]+<\/string>/<string name=\"logging\" translatable=\"false\">$1<\/string>/g" "$2"

\ app \ build.gradle

android {
//...
}

dependencies {
//...
}

task setStringsXMLAppVersion << {
        def cmd = projectDir.absolutePath + "/../scripts/set_strings_xml_app_version.sh 0x" + Integer.toHexString(android.defaultConfig.versionCode).toUpperCase() + " " + projectDir.absolutePath + "/../app/src/main/res/values/strings.xml"
        def sout = new StringBuffer()
        def serr = new StringBuffer()
        def proc = cmd.execute()
        proc.consumeProcessOutput(sout, serr)
        proc.waitForOrKill(1000)
        if (serr) {
            println "Error while replacing versionCode in strings.xml: $serr"
        }
    }

    preBuild.dependsOn setStringsXMLAppVersion