Android и Eclipse 2 разных версии одного и того же приложения

Здравствуйте, я начинаю разработчик Android, используя окна и среду разработки eclipse для разработки приложений java android. Я опубликовал одну игру, но есть бесплатная версия игры и платная версия. Рынок google настаивает на том, что разные версии должны иметь разные имена пакетов. До сих пор я обновлял пакет с двумя разными именами и менял импорт файла ресурса R каждый раз, когда я строил разные версии. Код на 99% одинаковый для обеих версий. Есть ли лучший способ?

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

Например (не основанный на затмении):

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

Я собираюсь предположить, что различия могут быть обработаны каким-то глобальным свободным / несвободным флагом. Под этим я подразумеваю, что один и тот же код будет содержать обе версии приложения, а какие части включены или будут использоваться, будет зависеть от некоторого открытого элемента статических данных где-то:

if (SomeClass.IS_PAID_APP) { // add more stuff to menu, etc. } 

Если вы можете организовать свое приложение таким образом, вам нужна только одна база кода.
Попросите его создать одно приложение (бесплатное или платное, ваш выбор) и соответствующий пакет в манифесте для этой версии приложения.
Затем добавьте задачу Ant, которая выполняет следующие действия:

  1. Делает копию дерева проекта вашего проекта во временное место
  2. Переключить копию манифеста в новое имя пакета с помощью поиска и замены
  3. Переключите все операторы импорта для своего старого пакета R в новый пакет, снова с помощью поиска и замены, и снова на копии, а не на оригинал
  4. Измените свой IS_PAID_APP (или что-то еще) на противоположное значение (поиск и замена в копии)
  5. Выполняет сборку Ant для копии проекта
  6. Копирует двоичные файлы из этой сборки в каталог bin / main основного проекта под определенным именем (поэтому он не сжимает вашу другую копию APK)
  7. Удаляет копию дерева, сделанную в шаге # 1

Если бы у Java был предварительный процессор, это было бы несколько проще. Однако базовая техника, описанная выше, была использована уже несколько десятилетий. Это неуклюже, но это работает, и это означает, что у вас есть только один набор исходных кодов. Обратите внимание, что задача Ant <replace> будет прекрасно обрабатывать ваш поиск и замену.

Это один из недостатков Android Market, хотя я понимаю, почему они это сделали. Это просто не предназначено для бесплатных и платных версий вашего приложения (они утверждают, что 24-часовая политика возврата – это то, для чего это необходимо, но это вместо этого используется для пиратства):

В любом случае, проще всего написать скрипт сборки Ant (или любой язык скриптов, который вы используете). Замените поиск имени своего пакета через все файлы .xml и .java. Затем выполните сборку своего приложения. Рефакторинг вашего кода больше болит, чем это стоит ИМХО …

Intereting Posts