Skip to content

Commit b119f83

Browse files
authored
fix(android): resolve correct app version with flavors (#1289)
1 parent 8869a82 commit b119f83

File tree

1 file changed

+32
-5
lines changed

1 file changed

+32
-5
lines changed

android/sourcemaps.gradle

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@ gradle.projectsEvaluated {
1313
def start = name.startsWith(prefixes[0]) ? prefixes[0].length() : prefixes[1].length()
1414
def end = name.length() - suffix.length()
1515
def flavor = name.substring(start, end).uncapitalize()
16+
def defaultVersion = getDefaultVersion(flavor)
1617

17-
task.finalizedBy createUploadSourcemapsTask(flavor)
18+
task.finalizedBy createUploadSourcemapsTask(flavor, defaultVersion.name, defaultVersion.code)
1819
}
1920
}
2021

21-
Task createUploadSourcemapsTask(String flavor) {
22+
Task createUploadSourcemapsTask(String flavor, String defaultVersionName, String defaultVersionCode) {
2223
def name = 'uploadSourcemaps' + flavor.capitalize()
2324

2425
// Don't recreate the task if it already exists.
@@ -47,9 +48,8 @@ Task createUploadSourcemapsTask(String flavor) {
4748
def inferredToken = executeShellScript(tokenShellFile, jsProjectDir)
4849
def appToken = resolveVar('App Token', 'INSTABUG_APP_TOKEN', inferredToken)
4950

50-
def projectConfig = appProject.android.defaultConfig
51-
def versionName = resolveVar('Version Name', 'INSTABUG_VERSION_NAME', "${projectConfig.versionName}")
52-
def versionCode = resolveVar('Version Code', 'INSTABUG_VERSION_CODE', "${projectConfig.versionCode}")
51+
def versionName = resolveVar('Version Name', 'INSTABUG_VERSION_NAME', defaultVersionName)
52+
def versionCode = resolveVar('Version Code', 'INSTABUG_VERSION_CODE', defaultVersionCode)
5353

5454
exec {
5555
def osCompatibility = Os.isFamily(Os.FAMILY_WINDOWS) ? ['cmd', '/c'] : []
@@ -100,6 +100,33 @@ File getSourceMapFile(File appDir, String flavor) {
100100
return fallbackSourceMapFile
101101
}
102102

103+
/**
104+
* Infers the app version to use in source map upload based on the flavor.
105+
* This is needed since different flavors may have different version codes and names (e.g. version suffixes).
106+
*
107+
* It checks the version for the flavor's variant.
108+
* If no variant is found it falls back to the app's default config.
109+
*
110+
*
111+
* @param flavor The flavor to get the app version for.
112+
* @return A map containing the version code and version name.
113+
*/
114+
Map<String, String> getDefaultVersion(String flavor) {
115+
def appProject = project(':app')
116+
def defaultConfig = appProject.android.defaultConfig
117+
118+
def variants = appProject.android.applicationVariants
119+
120+
// uncapitalize is used to turn "Release" into "release" if the flavor is empty
121+
def variantName = "${flavor}Release".uncapitalize()
122+
def variant = variants.find { it.name.uncapitalize() == variantName }
123+
124+
def versionName = variant?.versionName ?: defaultConfig.versionName
125+
def versionCode = variant?.versionCode ?: defaultConfig.versionCode
126+
127+
return [name: "${versionName}", code: "${versionCode}"]
128+
}
129+
103130
boolean isUploadSourcemapsEnabled() {
104131
def envValue = System.getenv('INSTABUG_SOURCEMAPS_UPLOAD_DISABLE')?.toBoolean()
105132
def defaultValue = true

0 commit comments

Comments
 (0)