GoogleServices - Как установить разные applicationId для каждой комбинации ароматов с помощью flavourDimensions? - PullRequest
3 голосов
/ 16 апреля 2020

У меня есть старые приложения, использующие несовместимый идентификатор приложения. Я пытаюсь перенести их с помощью flavourDimensions, чтобы поделиться такими общими ресурсами и кодом. У меня есть эта настройка ароматов:

defaultConfig {
    applicationId "com.example"
}

flavorDimensions 'fruit', 'env'

productFlavors {
    pear {
        dimension 'fruit'
    }

    banana {
        dimension 'fruit'
    }

    staging {
        dimension 'env'
    }

    prod {
        dimension 'env'
    }
}

Я хотел бы иметь эти applicationId по комбинации ароматов:

  • pearStaging : com.example.pear_staging (обратите внимание на " _ ")
  • pearProd : com.example.pear
  • bananaStaging : com.example.banana_staging (обратите внимание на" _ ")
  • bananaProd : com.example.banana

Я пытался использовать applicationIdSuffix:

productFlavors {
    pear {
        dimension 'fruit'
        applicationIdSuffix 'pear'
    }

    banana {
        dimension 'fruit'
        applicationIdSuffix 'banana'
    }

    staging {
        dimension 'env'
        applicationIdSuffix '_staging'
    }

    prod {
        dimension 'env'
    }
}

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

flavour pearStaging : com.example.pear._staging (обратите внимание на "." Перед "_")

Я видел ответы в этой теме: Как установить разные applicationId для каждой комбинации ароматов с помощью flavourDimensions? Они говорят об обходном пути, использующем mergedFlavor.setApplicationId(...) для переопределения applicationId в конце. Но это не работает, если я использую в сочетании с плагином gradle для служб Google .

Поскольку на этапе обработки плагина я получил эту ошибку:

* What went wrong:
Execution failed for task ':app:processPearStagingDebugGoogleServices'.
> No matching client found for package name 'com.example'

Как видите , он использует идентификатор приложения / имя пакета по умолчанию, а не appId, переопределенный в фазе android.applicationVariants.all.

Так есть ли лучший способ определить мой идентификатор приложения для каждой комбинации вкусов, который работает с задачей служб Google? (Мне нужно сохранить эти applicationId с "_", не могу их изменить).

1 Ответ

0 голосов
/ 25 апреля 2020

Это невозможно при текущем способе работы плагина Gradle для служб Google. Может быть, есть способ отправить отзыв в Google об этом, но между тем, единственный способ получить идентификаторы приложения с помощью «_» - это переименовать идентификатор приложения после сборки apk. Таким образом, идентификатор приложения ароматизатора c будет построен с помощью "." сначала разделители, а затем переименование идентификатора приложения после сборки apk.

Это можно сделать с помощью стандартной процедуры использования apktool для открытия apk, изменения идентификатора приложения на нужный, а затем повторной упаковки с помощью apktool, zipalign, re-sign, et c. Если это может быть слишком утомительно, есть проекты GitHub, которые пытаются сделать то же самое, но они могут работать не на всех apks.

Например:

  1. https://github.com/testwhat/PackageRenamer
  2. https://github.com/sjitech/ApkRename
...