Сборка проекта Android для разных пакетов - PullRequest
4 голосов
/ 21 марта 2012

Я пытаюсь найти лучший способ собрать / упаковать приложение для Android для 6+ разных клиентов.Я мог бы использовать разные ветки в SVN для всех клиентов, но единственное различие между приложениями заключается в некоторых значениях в папке ресурсов (Drawables, Strings и т. Д.).

Я написал скрипт Ant, который импортирует стандартAndroid build.xml .Этот скрипт выполняет следующие действия:

  1. Считывает имена клиентов из файла свойств.
  2. Для каждого клиента выполняется следующее:
    1. Имя пакета в AndroidManifest.xml изменяется (путем подключения к цели -pre-build ).
    2. Пользовательские ресурсы копируются в каталог res вbuild (путем подключения к цели -pre-compile ).
    3. Имя пакета возвращается к значению по умолчанию (путем подключения к -post-compile target).
    4. APK-файл копируется в определенное место с именем, похожим на customer-versionno.apk .

Это казалосьработать хорошо, пока я только сейчас не написал часть, которая меняет имя пакета.Из-за изменения имени пакета также изменяется местоположение класса R , что означает, что сборка завершается неудачно, поскольку классы Java импортируют класс R из стандартного пакета.

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

Так ... вопросы действительно:

  1. Есть ли хорошие / простые решения для моей проблемы?
  2. Я неправильно подхожу к этой проблеме?Есть ли лучшие способы легко упаковать одно и то же приложение для 6+ разных клиентов?

Ответы [ 2 ]

4 голосов
/ 21 марта 2012

Вам действительно нужно изменить имя пакета?Изменение имени пакета - это боль, которую нужно делать автоматически.Тем не менее, вот мое решение проблемы:

Мой сценарий состоит в том, что у меня есть одно приложение, которое развертывается в 30-200 различных подписанных APK-файлах, где единственным различием между файлами являются некоторые ресурсы (drawables,строки, значения и т. д.) и имя пакета.

Я делаю это, работая над общей версией приложения, которая служит проектом шаблона.После того, как это сработает, и я готов к развертыванию, я запускаю сценарий bash, который выполняет следующие шаги для каждой цели:

  1. Полная очистка проекта
  2. Смена res dir и имени пакетаиспользование sed.
  3. Создает и подписывает APK

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

И, наконец, небольшой совет: в манифесте Android используйте относительные имена пакетов, такие как ".Application" вместо "com.mycompany.myproject.Application".,Таким образом, вам нужно всего лишь изменить имя пакета в ОДНОМ месте.

1 голос
/ 21 марта 2012

Можно ли решить эту проблему, создав 6+ различных проектов, включающих ваш основной проект. Таким образом, вы можете переопределить ресурсы и сделать различные апк

...