К сожалению, в Android есть своего рода соглашение об изменении потока во время выполнения на основе того, что было бы в C / C ++ - условной компиляции.
Наше приложение должно поддерживать различное поведение для разных уровней API, поэтому мы создали некоторые константы уровня приложения, которые статически инициализируются на основе доступной нам информации уровня API и используются во всем коде. Именно так Google работает в своих примерах (например, см. Библиотеку совместимости ActionBarCompat и, в частности, фабричный метод, используемый здесь ).
Вы можете создать интерфейс CustomBuild и реализовать его в AmazonBuild и GooglePlayBuild, а затем использовать статический метод getBuild () для переключения функций по мере необходимости:
if(getBuild().shouldEnableFeatureX()){
doStuff();
} else {
doDifferentStuff();
}
Тогда все, что вам нужно беспокоиться о переключении между сборками, - это одна или две строки кода на заводе, а также поддержка того, какие вещи вы хотите включить в какие версии. Или вы можете включить разные версии статического класса CustomBuild для каждой сборки.
Я собираюсь поддержать второе предложение выше: перейти на что-то вроде Maven для строительства; это должно сделать вашу жизнь намного проще, как только вы ее настроите.
Я также хочу сказать, что вы должны сделать ядро приложения библиотекой, как предложено выше, и иметь два разных модуля (один для amazon, один для play store), которые зависят от библиотеки, но каждый содержит только один настраиваемый файл фабрики (или просто статический класс для каждого типа сборки, который содержит одинаковые методы «должен ли я это делать?» ... если у вас есть инфраструктура, это просто вопрос предпочтений).