Привет я - начинающееся использование разработчика андроида окна и затмение IDE для разработки приложений андроида Java. Я опубликовал одну игру, но существует бесплатная версия игры и заплаченной версии. Рынок Google настаивает, чтобы различные версии имели различные имена пакета. До сих пор я осуществлял рефакторинг пакет с 2 различными именами и изменялся, файл ресурсов R импортируют каждый раз, когда я создаю различные версии. Код составляет 99% то же для обеих версий. Существует ли лучший путь?
У вас есть различные дискуссии по этой теме здесь и там , но в основном решение похоже на дублирование проекта.
Например (не основано на eclipse):
На этот вопрос сложно ответить, поскольку мы не знаем, в чем разница между бесплатной и платной версиями вашего приложения.
Я собираюсь предположить, что различия могут быть обработаны каким-то глобальным флагом «свободный / несвободный». Под этим я подразумеваю, что один и тот же код будет составлять обе версии приложения, и то, какие части включены или используются, будет зависеть от какого-либо публичного статического элемента данных где-то:
if (SomeClass.IS_PAID_APP) {
// add more stuff to menu, etc.
}
Если вы можете организовать свое приложение таким образом, то вы нужна только одна кодовая база.
Настройте сборку вашего приложения в одном направлении (платном или бесплатном, на ваш выбор) и с использованием соответствующего пакета в манифесте для этой версии приложения.
Затем добавьте задачу Ant, которая выполняет следующие действия:
- Создает древовидную копию каталога вашего проекта во временном месте.
- Переключите копию манифеста на новое имя пакета с помощью search-and-replace
- Переключите все операторы импорта для версии R вашего старого пакета на новый пакет, снова с помощью функции поиска и замены и еще раз для копии, {{ 1}} не ваш оригинал
- Измените IS_PAID_APP (или что-то еще) на противоположное значение (поиск и замена в копии)
- Выполняет сборку Ant для копии проекта
- Копирует двоичные файлы из этой сборки в каталог bin / основного проекта под другим именем (чтобы не повредить другую копию APK)
- Удаляет сделанную копию дерева на шаге №1
Если бы в Java был препроцессор, это было бы несколько проще. Однако основная техника, которую я описал выше, используется уже несколько десятилетий. Это неуклюже, но работает, а это значит, что вам нужно иметь дело только с одним набором исходного кода. Обратите внимание, что задача Ant
прекрасно справится с вашим поиском и заменой.
Это один из недостатков Android Market, хотя я понимаю, почему они так поступили. . Он просто не был разработан для бесплатных и платных версий вашего приложения (они утверждают, что это политика возврата за 24 часа, но вместо этого используется для пиратства) -:
В любом случае, проще всего написать Сценарий сборки Ant (или любой другой язык сценариев, который вы используете). Выполните поисковую замену имени вашего пакета во всех файлах .xml и .java. Затем выполните сборку своего приложения там. Рефакторинг кода - это больше проблем, чем того стоит ИМХО ...