Как реализовать несколько версий Android для использования разных библиотек?

Я знаю, что есть много вопросов о нескольких версиях Android, относящихся к бесплатным/платным версиям, но это может немного отличаться.

В настоящее время мое приложение использует AdMob для рекламы и опубликовано на Android Market и в Samsung App Store. К сожалению, в будущем магазин Samsung потребует от всех перейти на собственную рекламную сеть Samsung AdHub. И у AdMob, и у AdHub есть свои библиотеки, свои SDK.

Я ищу решение для создания 2 разных версий, одна из которых включает AdMob, а другая включает AdHub (и весь необходимый код). Какие решения у меня есть, чтобы легко собрать 2 версии без особых хлопот, когда придет время для выпуска новой версии?

Многие решения рекомендуют переместить основной проект в проект библиотеки, а затем создать 2 других приложения, которые включают проект библиотеки (базовый проект). Но мне не очень нравится это решение (я предпочитаю, если это возможно, держать свое приложение в одном проекте), и я пытаюсь найти альтернативы, а затем решить, какой из них лучше для моих нужд.


person rfgamaral    schedule 06.01.2012    source источник
comment
В качестве побочного запроса, кто бы ни ответил на этот вопрос, пожалуйста, также примите во внимание возможность создания нескольких приложений из одного и того же источника, то есть облегченного и премиум-класса, где исходный код один и тот же, но активирован только переключатель времени компиляции. Это похоже на вопрос муравья :-/   -  person Richard Green    schedule 06.01.2012
comment
Если вы пойдете по пути библиотеки, вы можете просто сохранить весь свой код и ресурсы в библиотеке и просто иметь другой файл манифеста в конечных проектах. Затем код может проверить это для любого другого способа, которым он должен себя вести. Это предотвращает все проблемы, с которыми вы можете столкнуться из-за ошибок и просто организации разбросанного кода, но при этом позволяет создавать отдельные приложения поведения без необходимости настраивать константу при каждой сборке.   -  person Lance Nanek    schedule 11.10.2012


Ответы (4)


Я думаю, вы должны сделать это возможным в своем коде, используя шаблон проектирования Strategy. Он хорошо подходит и может быть переключен при любом триггере (даже во время выполнения). Если вы создадите фасад для каждого jar-файла, вы сможете изменять зависимости во время сборки, имея тот же исходный код.

Другой вариант этого метода — просто выполнить некоторую настройку в вашем приложении, которая определяет, какую библиотеку использовать.

person Jordi    schedule 06.01.2012

Некоторые интересные решения можно найти здесь:

https://groups.google.com/d/topic/android-developers/8pRugcnzR_E/discussion

person rfgamaral    schedule 18.08.2012

Теперь можно использовать Android Studio и разные варианты Gradle для каждого приложения. Таким образом, если вы исправите основной функционал, вы сможете быстро сделать сборку для каждого магазина приложений с собственной рекламной сетью.

person Mulder    schedule 25.10.2014

Библиотечные проекты — это то, что вам нужно. Создайте базовый проект, в котором вы реализуете все общие вещи, а затем создайте два отдельных проекта, которые используют общий как «Библиотеку». затем просто реализуйте все остальное, необходимое для того, чтобы приложения вели себя по-другому.

person Carlos Silva    schedule 06.01.2012
comment
Или просто импортируйте две библиотеки и создайте ресурс флага. Когда этот флаг равен 1, загрузите рекламу AdMob, если он равен 2, загрузите рекламу Samsung. Простой... - person Carlos Silva; 06.01.2012
comment
Как я уже сказал, мне не нравится это решение. Я ищу альтернативы... Если это единственное разумное решение, я соглашусь с ним. Но сначала мне нужно иметь больше вариантов на столе, чтобы я мог изучить плюсы и минусы каждого из них. - person rfgamaral; 06.01.2012