繁体   English   中英

从Android Studio build.gradle中的清单中获取应用程序版本

[英]Get application version from Manifest in Android Studio build.gradle

使用Android Studio构建期间是否可以访问当前应用程序版本? 我正在尝试将构建版本字符串包含在apk的文件名中。

我正在使用以下内容根据每晚构建的日期更改文件名,但希望对包含版本名称的发行版本具有另一种风味。

productFlavors {

    nightly {
        signingConfig signingConfigs.debug
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                def file = output.outputFile
                def date = new Date();
                def formattedDate = date.format('yyyy-MM-dd')
                output.outputFile = new File(
                        file.parent,
                        "App-nightly-" + formattedDate + ".apk"
                )
            }
        }
    }

}

通过https://stackoverflow.com/a/19406109/1139908 ,如果您未在Gradle中定义版本号,则可以使用清单解析器访问它们:

   import com.android.builder.core.DefaultManifestParser // At the top of build.gradle

   def manifestParser = new com.android.builder.core.DefaultManifestParser()
   String versionName = manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile)

另外值得注意的是(使用https://stackoverflow.com/a/22126638/1139908 ),使用applicationVariants.all对于默认调试版本可能会有意外的行为。 在我的最终解决方案中,我的buildTypes部分如下所示:

buildTypes {
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def String fileName;
            if(variant.name == android.buildTypes.release.name) {
                def manifestParser = new DefaultManifestParser()
                def String versionName = manifestParser.getVersionName((File) android.sourceSets.main.manifest.srcFile)
                fileName = "App-release-v${versionName}.apk"
            } else { //etc }
            def File file = output.outputFile
            output.outputFile = new File(
                    file.parent,
                    fileName
            )
        }
    }

    release {
         //etc
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM