Как вы добавляете конфигурацию, специфичную для конкретной сборки, в APK?

У меня есть приложение для Android, которое я распространяю на несколько разных поставщиков рынка; Приложение функционально одинаково для каждого, но требует определенных различных параметров конфигурации. В идеале я хотел бы создать все отдельные APK на одном этапе сборки. Существует ли «официальный» способ достичь этого?

Я рассматриваю подход, в котором у меня есть файл шаблона в структуре проекта, и во время сборки используйте ant для интерполяции значений в выходной файл, такой как res / xml / config.xml.

Заранее спасибо!

Solutions Collecting From Web of "Как вы добавляете конфигурацию, специфичную для конкретной сборки, в APK?"

Есть несколько способов приблизиться к этому:

1) Настройте приложение для Android-приложений (предназначенное для Eclipse)

Это метод, предложенный в документации для Android. С помощью этого метода вы должны настроить приложение как «Проект библиотеки» .

Затем для каждой конкретной сборки, которую вы хотели бы создать, вы бы установили новый проект Android, который ссылается на ранее созданный проект библиотеки. Для этого проекта должен быть свой собственный AndroidManifest, который объявляет компоненты, используемые в приложении библиотеки. Поскольку каждое приложение имеет свой собственный манифест, почти любой тип настройки может быть сделан путем замены компонентов или изменения информации. Однако, учитывая сложные различия, это создает некоторую избыточность в обслуживании, если есть несколько различий.

2) Создал сценарий ANT или другой скрипт сборки для управления конфигурацией

ANT-скрипт мог бы построить время, чтобы манипулировать источниками или XML-файлами, чтобы обеспечить пользовательскую настройку. Самый простой способ сделать это – использовать unix sed или скрипт python / ruby ​​для настройки. Это идеальный вариант, когда настройка ограничивается небольшими изменениями и / или просто текстовыми заменами. В большинстве случаев это мой выбор.

Я рекомендую копировать исходное дерево во временную директорию, прежде чем делать манипуляции таким образом, чтобы их можно было очистить на «ant clean» и не повлиять на рабочую копию источника.

Одно из предупреждений заключается в том, что я бы разработал такие модификации, чтобы источник все еще строился без запуска скрипта (т. Е. Вы можете делать стандартные сборки при разработке в eclipse или любой другой среде без необходимости запуска специального скрипта).

Вы можете просто настроить Maven Android Plugin на основе сборки для вашего apk, который использует фильтрацию ресурсов и профили для ваших различных конфигураций. Проверьте пример morseflash проекта официальных образцов, чтобы увидеть, как все это делается подробно.

После того, как вы настроили профили, вы можете использовать плагин maven invoker для запуска всего этого в одной развертке. И если вы хотите, чтобы он автоматизировал, просто поместите сборку на Hudson.

http://code.google.com/p/maven-android-plugin/

http://code.google.com/p/maven-android-plugin/wiki/Samples

http://www.simpligility.com/2010/11/release-version-management-for-your-android-application/

Я использую скрипт ant, который читает несколько параметров времени сборки и генерирует для меня подходящий APK (appname-1.1_ggl, appname-1.1_amz.apk, который содержит ссылки на рынок Google или рынок Amazon, соответственно). Вручную запустить его дважды не очень.

Это может быть нереалистично, в зависимости от количества перестановок, которые у вас есть (вы не упомянули), но вы можете использовать subant . Используя разные buildpath и последующие build.properties для каждой перестановки, которую вам нужно вызвать.

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

Проект библиотеки имеет файл ресурсов config.xml в папке res, и этот файл переопределяется в других проектах. Таким образом, у меня могут быть разные настройки приложения, и каждая сборка имеет свой собственный manifest.xml, чтобы вы могли реально настроить вещи по-разному для каждого типа сборки.

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