Gradle Android-плагин генерирует R файлы для разных продуктов?

Я пытаюсь объединить мое бесплатное приложение и платное приложение. Продукт 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?

Вот скриншот моей структуры проекта:

enter image description here

Каждый файл AndroidManifest.xml представляет собой полный и полный манифест - согласно документации манифест в главном дереве должен полностью перезаписать версию аромата продукта. Хотя это явно не происходит, потому что активность, которую следует запустить, и контент-провайдеры не перезаписываются.

Любое понимание того, что я делаю неправильно, было бы самым ценным. Это должно быть очень распространенной ситуацией, с которой столкнулся бы любой, кто переопределит имя пакета. Я пытался понять это примерно через неделю и не могу, кажется, туда попасть сам.

Спасибо,

-Aaron

Ответ 1

Под андроидом gradle плагин 0.7.3 сгенерированный R.java файл только создан для src/main имени пакета. Он содержит все ресурсы для разных вкусов, он просто помещает их в один сгенерированный файл R.java. Я слышал это от сообщения IO.

Какое имя вашего пакета в src/main/AndroidManifest.xml? Я предполагаю, что он com.flyingspheres.android

Попробуйте импортировать R в свои классы, которые должны обращаться к ресурсам программно, используя ваше имя пакета src/main.

например.

import com.flyingspheres.android.R;