【问题标题】:Gradle: Manipulating flavors version name and version code based on their buildTypesGradle:根据它们的 buildTypes 操作风味版本名称和版本代码
【发布时间】:2015-03-23 21:00:22
【问题描述】:

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

我想根据它们的变体生成具有不同版本名称和代码的 apk。

例如:

Flavor1Debug.apk 
  versionName  = 1000
  versionCode  = 1000

Flavor1Release.apk 
  versionName  = 1001
  versionCode  = 1001

Flavor2Debug.apk 
  versionName  = 4000
  versionCode  = 4000

Flavor2Release.apk 
  versionName  = 4001
  versionCode  = 4001

我创建了一个文件来存储我的风味版本。 “版本.属性”

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 {
        }
    }
}

【问题讨论】:

    标签: build version apk android-gradle-plugin variants


    【解决方案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')
    

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多