2011-02-08 11 views
9

Mam aplikację, która została przesłana do repozytorium Subversion/SVN. Czy można użyć skryptu, aby jakoś zmienić kod wersji aplikacji przechowywany w AndroidManifest? Mam na myśli podczas/po kasie/aktualizacji?Jak zautomatyzować zwiększanie kodu wersji w AndroidManifest?

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="mypackage" 
      android:versionCode="100000" 
      android:versionName="1.0"> 

Odpowiedz

4

SVN ma keyword substitution, za pomocą którego można umieścić numer wersji w pliku. Jednakże spowoduje to zmianę, gdy plik manifestu został ostatnio zmieniony, co nie jest tym, czego potrzebujesz.

Najlepszym sposobem na osiągnięcie tego, co chcesz, jest wywołanie svnversion ze skryptu kompilacji i osadzenie danych wyjściowych w pliku manifestu. Możesz mieć plik manifest.template pod kontrolą wersji, który może być użyty przez skrypt kompilacji do wygenerowania prawdziwego pliku manifestu. Umieść element zastępczy w szablonie i zastąp go numerem wersji uzyskanym za pomocą svnversion.

edycja: w Eclipse prawdopodobnie byłby use an Ant script, and invoke it before the normal build. Połączony przykład generuje plik klasy z numerem wersji, ale można również wygenerować plik manifestu w bardzo podobny sposób.

+0

Wszelkie pomysły, jak można by to zrobić, jeśli były przy użyciu Eclipse? – Felix

+0

Chciałbym również wiedzieć, jak to zrobić, używając Intellij IDEA – barmaley

+0

@barmaley: IDEA ma podobne wsparcie dla wykonywania skryptów ant, zobacz [Intellij And and Maven Integration] (http: //www.jetbrains.com/idea/features/ant_maven.html) –

0

Możesz to zrobić w czasie kompilacji, używając celu xpath Ant dostarczonego przez domyślne skrypty budowania Androida, aby uzyskać aktualną wartość, a następnie użyj opcji Ant replace.

+0

Podaj mi link – barmaley

4

Zrobiłem to, dodając dodatkowy cel kompilacji - więc kod wersji jest zwiększany podczas budowania projektu, a nie po zatwierdzeniu na SVN. Są to instrukcje, aby uruchomić to w IntelliJ IDEA.

pierwsze, dodać nowy plik w katalogu głównym projektu o nazwie svn-revision.build.xml o następującej treści:

<project default="svn-revision"> 
    <target name="svn-revision"> 
     <exec executable="sh" outputproperty="revision"> 
      <arg value="-c" /> 
      <arg value="svnversion | sed -e 's/^[^:]*://;s/[A-Za-z]//'" /> 
     </exec> 
     <echo>Revision (app): ${revision}</echo> 
     <replaceregexp file="AndroidManifest.xml" match='android:versionCode="([^".]+)(\.[^"]*)?"' replace='android:versionCode="${revision}"' /> 
    </target> 
</project> 

Następnie w menu przejść do View > Tools > Ant Build, a następnie naciśnij trochę + przycisk w oknie i dodaj nowo utworzony plik. Kliknięcie zielonego przycisku "Uruchom" w oknie Ant Build spowoduje natychmiastowe uruchomienie skryptu. Aby skrypt działał przy każdej kompilacji, musisz ustawić cel "svn-rewizji" jako domyślny cel.

0

Podejście SVN jest w porządku, ale niekoniecznie jest odpowiednie dla wszystkich. Ja wolę mieć kontrolę nad aplikacjami i versionCode versionName przyrostu więc zrobiłem mój własny Java prosta aplikacja do zrobienia, że ​​

Cechy:

  • versionName ma być major.minor.point (według zaleceń Android dOC)
  • versionName mogą być zachowane, powraca do 1.0.0, lub zwiększony (jeden część i tylną część (y) jest/są ustawione na 0)
  • versionCode zostanie zastąpiony przez Unix Time

Dostępne tutaj: android manifest build number

Powiązane problemy