Как использовать настраиваемые исходные наборы в файле Gradle Build с Android Studio

Я пытаюсь перенести приложение Android с Eclipse на Android Studio. Приложение, естественно, имеет 3 вкусовых измерения, что-то вроде:

flavorDimensions("skin", "cost", "market")
productFlavors {
    skin1 {
        flavorDimension "skin"
    }
    skin2 {
        flavorDimension "skin"
    }
    free {
        flavorDimension "cost"
    }
    paid {
        flavorDimension "cost"
    }
    google {
        flavorDimension "market"
    }
    samsung {
        flavorDimension "market"
    }
    amazon {
        flavorDimension "market"
    }

С этим у меня есть три несколько связанных проблемы, для которых я не могу найти четкого решения.

Первая проблема заключается в том, что «applicationId» зависит от 2 из 3 параметров, скина и стоимости. Из приведенного выше примера, если я создам skin1PaidGoogle, у меня будет «com.example.skin1», если я создам skin2FreeAmazon, мне понадобится «com.example.skin2_free». Это живое приложение, поэтому здесь нет возможности что-то изменить. Как этого можно достичь.

Вторая проблема заключается в необходимости пользовательских наборов src/res. По умолчанию у меня есть папки для каждого вкуса и для всех комбинаций ВСЕХ вкусов. Итак, я получаю папки для «skin1», «skin2», «free», «Google» и т. д., а также папки для «skin1FreeGoogle» и «skin1PaidAmazon» и т. д. Я знаю, что также получаю варианты типа сборки. Мне также нужны папки типа «skin1Free», «freeAmazon», «FreeGoogle». Мне нужно только небольшое подмножество множества возможностей здесь. Как можно добавить эти дополнительные папки в соответствующие srcSets? Я знаю порядок приоритетов, влияющий на слияние, но я могу справиться с этим, если просто добавлю папки.

Третья проблема связана с зависимостями. У меня могут быть строки «компилировать», и у меня могут быть строки «freeCompile», но мне также нужны строки типа «freeAmazonCompile».

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


person user3621075    schedule 13.01.2015    source источник
comment
Для вопроса № 1 посмотрите здесь stackoverflow.com/questions/20973259/   -  person Eugen Martynov    schedule 14.01.2015
comment
Что касается вопроса № 2, можете ли вы объяснить, что вы храните в разных папках?   -  person Eugen Martynov    schedule 14.01.2015
comment
На вопрос №3 какую зависимость нужно указать?   -  person Eugen Martynov    schedule 14.01.2015
comment
Что касается вопроса 2, если, например, я использую биллинг в приложении во всех бесплатных вариантах, тогда, когда для рынка Google freeGoogle будет содержать код биллинга в приложении Google. Для рынка Amazon freeAmazon будет содержать платежный код Amazon в приложении.   -  person user3621075    schedule 14.01.2015
comment
Что касается вопроса 3, аналогично моему комментарию к вопросу 2 выше. Для всех бесплатных версий, в зависимости от рынка, необходимо включить соответствующие библиотеки, например. файлы freeAmazonCompile('libs/in-app-purchasing-2.0.1.jar')   -  person user3621075    schedule 14.01.2015
comment
Похоже, вы могли бы включить выставление счетов Google и Amazon в бесплатное и платное приложение. У меня были бы интерфейсы для биллинга и рекламы в основном коде и просто разные реализации в кодовых базах Google и Amazon. Я бы также отключил что-то в бесплатной или платной версии на основе флага сборки. Рассматривали ли вы возможность иметь одно приложение, которое становится платным, как только пользователь совершает покупку приложения?   -  person Eugen Martynov    schedule 16.01.2015
comment
Евгений, я действительно мог бы сделать, как вы предлагаете. Это означало бы, что apk, содержащий код библиотеки, не нужен, но это может быть терпимо. Основная проблема заключается в том, что это добавит новые разрешения для полных версий наших существующих приложений, чего я не хочу делать. Также у меня все еще были бы проблемы с бесплатными/платными ресурсами для каждого из «скинов». У меня есть 8 «скинов», бесплатные версии которых имеют некоторые ресурсы (значки запуска и т. д.), отличные от платных версий.   -  person user3621075    schedule 16.01.2015