0

我正在搜索与 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 {
        }
    }
}
4

1 回答 1

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')
于 2015-11-13T18:17:20.497 回答