Другой стиль applicationId в нескольких измерениях - PullRequest
0 голосов
/ 24 мая 2019

Проблема: установка applicationId в зависимости от вкуса.Еще одна проблема: в магазине уже есть два приложения, оба имеют различный стиль applicationId.

  1. com.name.dimension1.dimension2

  2. 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 - все работает отлично.

Вещи, которые я уже пробовал также:

У кого-нибудь есть какой-нибудь совет?Довольно сложная проблема, я могу поделиться более подробной информацией, если кому-то интересно.

1 Ответ

0 голосов
/ 24 мая 2019

почему бы вам не попробовать, как это

productFlavors {
            app3 {
            dimension "app1"
            applicationId "com.app.test.app1"
            resValue "string", "app_name", "app1"
            versionName "2.1.0"

        }
        app2 {
            dimension "app2"
            applicationId "com.app.test.app2"
            resValue "string", "app_name", "app2"
            versionName "2.1.0"

        }
        app3 {
            dimension "app3"
            applicationId "com.app.test.app3"
            resValue "string", "app_name", "app3"
            versionName "2.1.0"

        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...