вставлять детали версии в Android APK - PullRequest
9 голосов
/ 29 января 2010

Мой код хранится в системе контроля версий SVN. Я использую Eclipse для создания своего приложения для Android.

В моем приложении у меня есть о-поле. Я хочу показать правильную версию исходного кода / тег / что угодно в этом.

Есть ли способ автоматизировать это так, чтобы моя строка версии в поле about была всегда правильной, или это то, что я должен редактировать вручную каждый раз, когда я фиксирую?

Спасибо за ранние ответы о ключевых словах $.

Установка свойства SVN svn:keywords на Rev действительно расширяет private String m_svn_rev = "$Rev:$" каждый раз, когда я отправляю этот файл.

SVN - система контроля версий для каждого файла.

Что заставляет задуматься, могу ли я каким-то образом предварительно обработать некоторые файлы в сборке Android, чтобы добавить вывод svnversion?

Ответы [ 4 ]

7 голосов
/ 29 января 2010

Один из возможных подходов. В вашем AndroidManifest.xml добавьте метаданные в свои действия, чтобы сохранить ревизию или что вы хотите использовать

<activity android:name="SampleActivity">
    <meta-data android:value="$Rev: 164 $" android:name="com.example.version" />
</activity>

тогда в вашей деятельности

try {
    final ActivityInfo ai = getPackageManager().getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
    final String version = (String)ai.metaData.get("com.example.version");
    System.out.println("version: " + version);
} catch (NameNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Вы также можете установить android:versionName="$Rev$" в своем манифесте.

Чтобы автоматизировать процесс увеличения номера версии в android:versionCode и фиксации AndroidManifest.xml, существуют различные варианты, построение с использованием maven или ant может быть альтернативой, но давайте сделаем это, используя Eclipse и ADT.

Сначала добавьте в ваш проект конструктор ( Мой проект -> Свойства -> Строители )

alt text

этот конструктор должен вызывать android-increment-manifest-version, используя AndroidManifest.xml проекта в качестве аргумента

alt text

Сценарий android-increment-manifest-version похож на

#! /bin/bash
# android-increment-manifest-version:
# increment the version number found in the AndroidManifest.xml file
# (android:versionCode="n") in place and commit it to subversion.
#
# Copyright (C) 2010 Diego Torres Milano - http://dtmilano.blogspot.com

usage() {
    echo "usage: $PROGNAME AndroidManifest.xml" >&2
    exit 1
}

PROGNAME=$(basename $0)

if [ "$#" -ne 1 ]
then
    usage
fi

MANIFEST="$1"

perl -npi -e 's/^(.*android:versionCode=")(\d+)(".*)$/"$1" . ($2+1) . "$3"/e;' $MANIFEST
svn ci -m "Version incremented" $MANIFEST
1 голос
/ 26 ноября 2011

По идее dtmilano.blogspot.com ... но с использованием только версии SVN:

#! /bin/bash
# The first argument is full path of AndroidManifest.xml file
usage() {
    echo "usage: $PROGNAME AndroidManifest.xml" >&2
    exit 1
}

if [ "$#" -ne 1 ]
then
    usage
fi

PROGNAME=$(basename $0)
MANIFEST="$1"
SVNREVISION=$(svn info | sed -n '5p' | sed -e 's/.*[^0-9]\([0-9]*\).*/\1/g')

if [ -f $MANIFEST ]; then
   sed "s/android:versionCode=\"[0-9]*\"/android:versionCode=\"${SVNREVISION}\"/" $MANIFEST > $MANIFEST.tmp
   mv $FULLPATH.tmp $MANIFEST
   echo "The android:versionCode properties of file ${MANIFEST} is ${SVNREVISION}";
fi;
#svn commit -m "Update version in $MANIFEST" $MANIFEST

Номер версии изменяется только при изменении редакции SVN, т.е. только при выполнении exec svn commit.

Если хотите, вы можете добавить проверку для Измененной ревизии, если это так, выполнить sed для alter file. Также возможно изменить Revision на последнюю версию SVN на сервере.

1 голос
/ 29 января 2010

только общие советы, вы не упоминаете свою систему контроля версий.

вставьте соответствующий заголовок (что-то вроде $ Version: $) в текст для поля about. Когда вы фиксируете, новая версия # будет сохранена, а при сборке будет показано значение.

[править]
1. Создайте свой блок about как отдельный источник, устанавливайте его только при увеличении версии.
2. встроить свою собственную версию в заголовочный файл (и не забудьте изменить ее), а затем использовать эту строку версии в поле about (например, extern string *)
[/ Править]

0 голосов
/ 29 января 2010

Это может касаться, но я использую тег $ label Cruse Control, чтобы поднять версию на моем экране about. Каждый раз, когда я что-то проверяю, CC делает обновление и выкладывает сборку. Один из шагов в моем скрипте ant вводит значение $ label из системы круиз-контроля в значение в strings.xml. Это дает мне новый номер версии с каждым коммитом. Я могу проверить журналы CC и сопоставить номер сборки с номером ревизии SVN.

Вероятно, больше работы, чем вы заинтересованы в выполнении чего-то такого простого. Держу пари, что любая другая система сборки будет иметь аналогичную функцию.

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