Рекомендации по поддержке выпуска приложений для Android
Обычно при сборке и отладке приложения для Android в манифесте указывается debuggable=true
, и вы подписываете приложение ключом разработки.
Когда придет время выпустить приложение, вам нужно будет перейти на debuggable=false
, подписать своим ключом, при необходимости запустить ProGuard и, возможно, сделать что-то еще.
Некоторые внешние операции, такие как подписание другим ключом, могут быть легко закодированы с помощью Ant. На самом деле эти задачи выходят из коробки. Однако изменения в AndroidManifest.xml
, по-видимому, требуется ручное вмешательство каждый раз.
Еще одним аспектом является поддержка версий выпуска приложения. Например, из коробки Android tasks не будет использовать информацию о версии. Maven будет использовать версии моментальных снимков и потребует обновления вручную для выпуска.
Решение всех этих проблем довольно утомительно, и некоторая автоматизация весьма желательна. До сих пор мой подход состоял в том, чтобы создать отдельную ветку в git для выпуска, где я буду хранить окончательный манифест, а также poms с правильная версия.
Но я хотел бы получить несколько советов от других людей о лучших практиках для работы с циклом выпуска Android.
Какие-нибудь рекомендации?
1 ответ:
Однако, изменения в AndroidManifest.xml, кажется, требует ручного вмешательства каждый раз.
В тех местах, где нам приходилось вручную обрабатывать xml для наших автоматических сборок Android, мы используем встроенную поддержку XSLT в Ant, используя задачу . Таблица стилей может выглядеть примерно так:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:android="http://schemas.android.com/apk/res/android"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="application[@android:debuggable='true']"> <xsl:copy> <xsl:copy-of select="@*[name(.)!='android:debuggable']" /> <xsl:apply-templates /> </xsl:copy> </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
Что касается цикла выпуска моментальных снимков: автоматизированный процесс сборки и выпуска Jenkins выполняет его с целью maven, которая будет автоматически выполняться следующие действия:
- обновление версий pom (напр.,
android:versionName
/android:versionCode
) чтобы удалить "- SNAPSHOT " -- например,x.y.y-SNAPSHOT
становится простоx.y.y
- зафиксируйте это как "выпуск версии x.y.y"
- тег, который выпускается в репо git
- обновите версии pom до моментального снимка следующего логического выпуска:
x.y.z-SNAPSHOT
- зафиксируйте это в качестве начальной точки "подготовка к следующей версии"
На Шаге #3 он также отправляет этот код на общедоступный сервер git (если применимо), и публикует тег release в репозитории плагинов Jenkins, поэтому он становится доступным в виде обновления.
Я бы предположил, что подобный подход для цикла выпуска Android будет довольно тривиальным для сценария.