0

I am searching from other questions related on BuildConfig. I can't find any appropriate answers for my problem.

I want to generate apks with different version names and code, based on their variants.

For example:

Flavor1Debug.apk 
  versionName  = 1000
  versionCode  = 1000

Flavor1Release.apk 
  versionName  = 1001
  versionCode  = 1001

Flavor2Debug.apk 
  versionName  = 4000
  versionCode  = 4000

Flavor2Release.apk 
  versionName  = 4001
  versionCode  = 4001

I created a file where my flavors version stored. "version.properties"

flavor1VersionCode=1000
flavor1VersionName=1000

flavor2VersionCode=4000
flavor2VersionName=4000

Project Structure

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

Here is my gradle script sample

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 {
        }
    }
}
neilQ5
  • 179
  • 1
  • 12

1 Answers1

1

Its been seven months, I have an answer to my question.

After two weeks of research and trial and error. I finally figured out how Gradle process files upon building the application.

Here's what I did.

In application variants closure you have to modify the manifest output file, get the output variants and iterate to each manifest files.

def outputs = variant.getOutputs()

and use this implementation to update each files.

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')
neilQ5
  • 179
  • 1
  • 12