Я пытаюсь объединить мое бесплатное приложение и платное приложение. Продукт Flavors новой системы сборки Android, похоже, идеально подходит для моей проблемы.
У меня хороший вкус freeApp, однако, когда я создаю аромат paidApp, R файл, который создается, находится в структуре пакета, которая определена в файле freeApp.
Вот фрагмент файла gradle.build:
productFlavors {
freeApp {
versionCode 201308020
versionName "2.0.13_free"
packageName "com.flyingspheres.android"
}
paidApp {
versionCode 201305110
versionName "2.0.10_paid"
packageName "com.flyingspheres.android.inventory"
}
Я всегда считал, что расположение файла R определяется именем пакета в манифесте. Я проверил, что файл манифеста генерируется правильно.
Проблема заключается в том, что файл R для обоих вариантов находится в одном месте. Gradle требует, чтобы манифест проживал в основном дереве источника, чтобы всякая версия манифеста помещалась в основное исходное дерево, где будет создан файл R.java.
Предполагая, что я получаю файлы R для генерации в правильном месте для каждого аромата; как должны выполняться инструкции импорта для файла R, чтобы каждый вкус ссылался на правильный файл R?
Вот скриншот моей структуры проекта:
Каждый файл AndroidManifest.xml представляет собой полный и полный манифест - согласно документации манифест в главном дереве должен полностью перезаписать версию аромата продукта. Хотя это явно не происходит, потому что активность, которую следует запустить, и контент-провайдеры не перезаписываются.
Любое понимание того, что я делаю неправильно, было бы самым ценным. Это должно быть очень распространенной ситуацией, с которой столкнулся бы любой, кто переопределит имя пакета. Я пытался понять это примерно через неделю и не могу, кажется, туда попасть сам.
Спасибо,
-Aaron