Проблема: установка applicationId в зависимости от вкуса.Еще одна проблема: в магазине уже есть два приложения, оба имеют различный стиль applicationId.
com.name.dimension1.dimension2
com.name.dimension1dimension2 (без точки)
В нашем приложении для Android нам нужно ввести новые ароматы / размеры.Размеры:
flavourDimensions "компания", "приложение", "сервер"
Видя это, поэтому мы не можем использовать applicationIdSuffix в build.gradle , потому что он автоматически добавляется.(точка) перед суффиксом.
У нас уже есть метод, чтобы решить, какой versionCode следует сделать для каждого варианта ( благодаря этому ответу в стеке )
def getCurrentFlavor() {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
Pattern pattern
if (tskReqStr.contains("assemble"))
pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
else
pattern = Pattern.compile("generate(\\w+)(Release|Debug)")
Matcher matcher = pattern.matcher(tskReqStr)
if (matcher.find())
return matcher.group(1).toLowerCase()
else {
println "NO MATCH FOUND"
return ""
}
ЧетныйЕще одна проблема: тот же метод, который помогает нам с настройкой кода версии, не может помочь с applicationId.
def getFlavorApplicationId() {
def flavor = getCurrentFlavor()
if (flavor.contains("company1") && flavor.contains("app1")) {
return ext.company1app1AppId
} else if (flavor.contains("company2") && flavor.contains("app1")) {
return ext.company2app1AppId
} else if (flavor.contains("company2") && flavor.contains("app2")) {
return ext.company2app2AppId
}
return "nothing"
}
Когда приложение собрано / синхронизировано - все работает правильно (файл BuildConfig и также сгенерированный apk имеют правильный applicationId).Проблема возникает, когда мы пытаемся запустить приложение с applicationId в зависимости от вкуса.
Error while executing: am start -n "**non.of.those**/com.rsqtechnologies.rsqphysio.splash.SplashActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=non.of.those/com.rsqtechnologies.rsqphysio.splash.SplashActivity }
Error type 3
Error: Activity class {**non.of.those**/com.rsqtechnologies.rsqphysio.splash.SplashActivity} does not exist.
Error while Launching activity
Если я правильно понимаю, Android Studio не использует applicationId для запуска приложенияиз BuildConfig или даже сгенерированного .apk.Он пытается сгенерировать его при запуске приложения (когда он не может собрать информацию о вкусе из задачи gradle - def getCurrentFlavor () )
, когда я сам запускаю приложение в Терминале ста же команда, но правильный appId - все работает отлично.
Вещи, которые я уже пробовал также:
Решение из этого ответа стека
Попытался найти способ в Android Studio отредактировать конфигурацию так, чтобы он использовал правильный appId (не удалось)
У кого-нибудь есть какой-нибудь совет?Довольно сложная проблема, я могу поделиться более подробной информацией, если кому-то интересно.