Gradle:根据buildTypes操作flavor版本名称和版本代码

时间:2015-03-23 21:00:23

标签: build version apk android-gradle variants

我正在搜索与BuildConfig相关的其他问题。我找不到任何适合我问题的答案。

我想基于它们的变体生成具有不同版本名称和代码的apks。

例如:

Flavor1Debug.apk 
  versionName  = 1000
  versionCode  = 1000

Flavor1Release.apk 
  versionName  = 1001
  versionCode  = 1001

Flavor2Debug.apk 
  versionName  = 4000
  versionCode  = 4000

Flavor2Release.apk 
  versionName  = 4001
  versionCode  = 4001

我创建了一个存储my flavor版本的文件。 “version.properties”

flavor1VersionCode=1000
flavor1VersionName=1000

flavor2VersionCode=4000
flavor2VersionName=4000

项目结构

/Projectroot
---/src
---/assets
---/res
---/jni
---/libs
---/flavor
----/flavor1
----/flavor2

这是我的gradle脚本示例

build.gradle

android {
      def versionPropsFile = file('version.properties')
      def Properties versionProps = new Properties()

       versionProps.load(new FileInputStream(versionPropsFile))

       flavor1VersionCode = versionProps['flavor1VersionCode'].toInteger()
       flavor1VersionName = versionProps['flavor1VersionName'].toString()
       flavor2VersionCode = versionProps['flavor2VersionCode'].toInteger()
       flavor2VersionName = versionProps['flavor2VersionName'].toString()

    productFlavors {
       productFlavor1 {
         versionCode = flavor1VersionCode
         versionName = flavor1VersionCode
       }
       productFlavor2 {
         versionCode = flavor2VersionCode
         versionName = flavor2VersionCode
       }
    }

    buildTypes {
        debug {
        }
        release {
        }
    }
}

1 个答案:

答案 0 :(得分:1)

已经七个月了,我回答了我的问题。

经过两周的研究和试验和错误。我终于弄清楚Gradle在构建应用程序时如何处理文件。

这就是我的所作所为。

在应用程序变体闭包中,您必须修改清单输出文件,获取输出变量并迭代到每个清单文件。

def outputs = variant.getOutputs()

并使用此实现来更新每个文件。

def manifestFile = "$buildDir/intermediates/manifests/full/${flavor.name}/${buildtype.name}/AndroidManifest.xml"
        def updatedContent = new File(manifestFile).getText('UTF-8').replaceAll(i[0].toString(), i[1].toString())
        new File(manifestFile).write(updatedContent, 'UTF-8')