Android и Eclipse 2 разные версии одного и того же приложения - PullRequest
7 голосов
/ 16 мая 2010

Здравствуйте, я начинающий Android-разработчик, использующий Windows и Eclipse IDE для разработки Java-приложений для Android. Я опубликовал одну игру, но есть бесплатная версия игры и платная версия. Рынок Google настаивает на том, что разные версии должны иметь разные имена пакетов. До сих пор я проводил рефакторинг пакета с двумя разными именами и менял импорт файла ресурсов R каждый раз, когда собирал разные версии. Код на 99% одинаков для обеих версий. Есть ли лучший способ?

Ответы [ 2 ]

2 голосов
/ 16 мая 2010

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

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

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

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

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

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

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

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

1 голос
/ 03 июня 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...