Как включить строку версии в имя файла при сборке Android apk с помощью ant?

Обычно мы собираем пакет Android в режиме отладки с помощью команды

ant debug

и получил имя файла apk AppName-debug.apk.

Есть ли способ создать файл apk в формате AppName-debug-<version-number>.apk напрямую без команды «mv»?

Спасибо.


person stid.smth    schedule 11.03.2011    source источник


Ответы (4)


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

Мой подход состоял в том, чтобы изменить локальный файл проекта ant build.xml, чтобы импортировать пользовательскую копию главного файла build.xml, в последней версии SDK главный файл, который импортируется в ваш локальный файл, находится в <SDK>/tools/ant/build.xml (в предыдущих версиях это был android_rules.xml). версии) Обратите внимание на строку import в файле build.xml по умолчанию, локальном для вашего проекта.

Комментарии в локальном build.xml, созданном инструментами Android, содержат подробную информацию о том, как выполнить настройку, чтобы будущие обновления инструментов не нарушили ваши изменения.

В файле пользовательских правил добавьте:

<xmlproperty file="AndroidManifest.xml" prefix="mymanifest" collapseAttributes="true"/>

Это читается в манифесте как набор свойств ant с пользовательским префиксом, чтобы исключить конфликт имен.

Затем вы можете добавить ${mymanifest.manifest.android:versionName} в любое место, где определено имя apk, просто найдите .apk в файле пользовательских правил.

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

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

person cistearns    schedule 11.03.2011
comment
Спасибо. Ваше предложение работает хорошо. Комментарии в моем файле build.xml немного ошибочны из-за следующих строк: Файл правил импортирован из ‹SDK›/platforms/‹target_platform›/templates/android_rules.xml Вместо включения 'android_rules.xml' вы должны включить '‹SDK›/tools/ant/ant_rules_r3.xml'. В противном случае сборка не удастся. - person stid.smth; 14.03.2011
comment
Есть ли способ автоматизировать это с экспортом APK Eclipse? - person Sney; 05.10.2011
comment
Не то, чтобы я в курсе. ANT предназначен для создания автоматизации. Вы можете отправить его как запрос функции команде ADT. - person cistearns; 21.10.2011
comment
@stid.smth Интересно, что в моей установке SDK для Android в ‹SDK›/tools/ant нет файла ant_rules_r3.xml — должен ли я просто создать его вручную? Если да, то как это должно выглядеть? Я также проверил ‹SDK›/platforms/‹target_platform›/templates/ — там тоже нет файлов правил. - person AgentKnopf; 28.03.2012
comment
На дополнительном узле: начало файла build.xml в ‹SDK›/tools/ant гласит: ‹project name=android_rules default=debug› что заставляет меня задаться вопросом, включены ли правила в файл сборки oO? - person AgentKnopf; 28.03.2012
comment
В последней версии Android SDK изменилась система сборки ANT. Вы захотите посмотреть на клонирование ‹SDK›/tools/ant/build.xml. - person cistearns; 29.03.2012
comment
Может быть, вы можете показать нам свои файлы (build.xml, custom_rules.xml, ant.properties, , поскольку в этом решении у меня вообще нет файла custom_rules.xml. - person JPM; 10.10.2012

Другое, более похожее на Android решение — использовать задачу XPATH, как это делается в ${sdk.dir}/tools/ant/build.xml:

<xpath input="AndroidManifest.xml" expression="/manifest/@android:versionName"
                        output="versionName" default="unknown"/>
<echo message="name: ${versionName}"></echo>

Для этого требуется определение задачи:

<path id="android.antlibs">
    <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
</path>

<taskdef name="xpath"
        classname="com.android.ant.XPathTask"
        classpathref="android.antlibs" />

Я не знаю, какая минимальная версия SDK, но она работает с SDK14.

С уважением, Майкл

person mivola    schedule 09.01.2012
comment
+1 Помог мне интегрировать имя версии в имя apk, созданное ant. - person AgentKnopf; 28.03.2012

Решение, описанное в следующем посте, имеет файл custom_rules.xml, который можно просто скопировать для достижения желаемого результата. http://jeffreysambells.com/2013/02/14/build-your-android-apk-with-the-manifest-version-number

person Jagadeesh    schedule 02.07.2013

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

1-Щелкните правой кнопкой мыши по приложению в проводнике пакетов. 2-Выберите экспорт. 3-выберите Android-приложение 4-выберите экспорт. 5-Создать новое хранилище ключей. 6- заполнить форму. 7-: укажите имя файла apk как хотите 8-: укажите место для хранения apk.

Тогда вы найдете решение вашей проблемы. Я надеюсь, что это помощь.

person Community    schedule 11.03.2011
comment
Извините, но я имею в виду почти не использовать команду «ant» вместо eclipse IDE. В настоящее время я не использую eclipse. - person stid.smth; 11.03.2011
comment
Я также думаю, что вы неправильно поняли вопрос, спрашивающий ищет автоматическое добавление номера версии к имени файла. - person Peterdk; 17.03.2011