gradle 如何在Android中自动化应用程序版本控制

dz6r00yl  于 2023-04-06  发布在  Android
关注(0)|答案(3)|浏览(148)

我有一个CI工具(Bamboo),它运行我的单元测试并构建app-release. apk。每当我在应用中进行更改并成功构建时,我都会创建一个新的版本号。我将版本号和构建时间存储在一个文件中。我可以让Gradle从该文件读取并相应地更改应用版本吗?
我的文件的内容看起来像这样:

ProductVersion=0.0.0.0.0
ProductBuildDateTime=2017-01-01T00:00:00.000
fumotvh3

fumotvh31#

当然,我是这样做的:
我将我的版本存储在version.properties文件中。
然后在应用的build.gradle中,我使用以下代码:

//Path to the file of your properties file that contains the version number
final String VERSION_PROPERTIES_FILE = projectDir.getParentFile().getParent() + "/file.properties"

 /**
 * Returns the id of the property name from config file, null if it doesn't exist
     * @param propertyName
     * @param properties file name in assets dir
     * @return
     */
    def getPropertyFromFile(propertiesFilePath, propertyName) {
        def propsFile = new File(propertiesFilePath);
        if (propsFile.canRead()) {
            def props = new Properties();
            props.load(new FileInputStream(propsFile));
            return props.getProperty(propertyName, null);
        } else {
            throw new GradleException("Could not read $propertiesFilePath !")
        }
    }

int vCode = getPropertyFromFile(VERSION_PROPERTIES_FILE, "versionCode") as Integer
String vName = getPropertyFromFile(VERSION_PROPERTIES_FILE, "versionName")

defaultConfig {
    applicationId "com.x.x"
    minSdkVersion 14
    targetSdkVersion 25
    versionCode vCode
    versionName vName
}

在本例中,可以将"ProductBuildDateTime""ProductVersion"传递给读取文件的方法。

fwzugrvs

fwzugrvs2#

如果你想从一个文件中读取构建信息,你可以使用一个更简化的版本,就像这样:

def getCIProperty(String key)
{
    Properties properties = new Properties()
    properties.load( file("Bamboo File Absolute Path").readLines().join("\n"))
    properties.getProperty(key)
}

getCIProperty('ProductVersion')
getCIProperty('ProductBuildDateTime')

只需将其复制并粘贴到主构建文件中,而不是settings.gradle文件
或者,如果你使用的是bamboo,你可以更容易地做到这一点,只需要求bamboo在build命令中传递这些属性,就像这样:
将这些代码复制并传递到构建脚本中的任何位置(甚至在settings.gradle中)

gradle.productVersion = getProperty('ProductVersion')
gradle.productBuildDateTime = getProperty('ProductBuildDateTime')

现在只需让bamboo将这两个参数添加到build命令中,如下所示:

gradle -PProductVersion=0.0.0.0.0   -PProductBuildDateTime=2017-01-01T00:00:00.000   clean   assembleRelease

提示:clean和assembleRelease是构建脚本中的任务,您可以调用任何您想要的任务。

eulz3vhy

eulz3vhy3#

是的
如果你想知道怎么做,那么简单地做一些像

def properties = new Properties()
def file = new File('version.properties')
file.withInputStream {
    properties.load it
}
properties.ProductVersion = ...
properties.ProductBuildDateTime = ...
file.withOuputStream {
    properties.store it, true
}

相关问题