Cum fac un build automat cu Ant in Android – OCB (One Click Build)

12:17 pm in Tutoriale Android de Marius Mailat

Tutorialul de mai jos legat de cum se poate folosi Ant impreuna cu Android incearca sa rezolve urmatoarea problema:

  1. zilnic trebuie trimis un nightly-build cu un installer de Android
  2. trebuie compilata aplicatia cu ultimele surse
  3. trebuie generata o clasa care seteaza valorie de logging, legate de serverul de productie
  4. installerul generat trebuie semnat (codesigning)
  5. numele installerul trebuie sa reflecte un anumit format nume_20100923.apk
  6. instalerul nou creat trebuie copiat pe un server ftp
  7. odata copiat installerul trebuie trimisa o notificare per email catre 3 persoane cu un text predefinit scris in un fisier TXT in care schimbam dinamic url-ul

Solutia presupune ca Elipse nu este folosit in acest proces. Pare complicat insa Ant te ajuta sa faci toti acesti pasi automat, un singur click, asa numitul One Click Build. Am folosit ca si sursa de inspiratie tutorialul de aici. Pentru partea de upload per ftp, email sending, code signing am cautat prin documentatii. Sa o luam progresiv:

Instaleaza Android SDK

Primul parte presupune instalarea Android SDK-ului, pas care nu este parte din acest tutorial. O explicatie pas cu pas cum se poate instala Android SDK se gaseste pe site-ul oficial.

Instalarea Ant

Ant se poate descarca de la aceasta adresa (eu folosesc Ant 1.8.1 fiindca are rezolvate niste probleme fata de versiunile anterioare). Odata descarcata arhiva se dezarhiveaza in un folder ( presupun ca folderul acesta este C:/Ant )

Cateva cuvinte despre Ant

Un script de build in Ant este continut in un fisier XML care de obicei se numeste build.xml. Pasii in un fisier de build se numesc tasks definite de catre targets in acest fisier. Cand vrei sa lansezi un process de build in mod normal folosesti ant release din linia de comanda.

Posibilitatile in Ant sunt practic nelimitate, poti copia fisiere dependinta, trimite emailuri de confirmare, descarca ultimele versiuni din SVN sau incarca un fisier per FTP. Un alt bun exemplu este folosirea unui script Ant pentru a miscora codul si de a il face greu de decompilat folosind ProGuard, urmat de semnarea automata a instalerului.

Pasul initial de a adauga un fisier build.xml in un proiect existent

Daca ai deja un proiect Android la care vrei sa adaugi un fisier de build, trebuie sa deschizi linia de comanda si sa navighezi pana in directorul proiectului unde poti lansa comanda:

android update project –path .

Observatie: Este posibil sa lipseasca comanda android si in acest caz va trebui sa iti actualizezi calea sa includa folderul tools. In Windows, poti folosi set path=%PATH%;c:\WORK\Android\android-sdk-windows\tools sau folosind variabilele de sistem din System Properties. Daca comanda ant nu este gasita atunci va trebui din nou sa actualizezi calea folosind in Windows comanda set path=%PATH%;c:\WORK\Android\Ant\apache-ant-1.8.1\bin sau folosind variabilele de sistem din System Properties.

In acest moment daca lansezi comanda ant release in linia de comanda din directorul proiectului vei obtine un installer .apk in directorul bin/. Verifica sa existe si fiserul local.properties in radacina proiectului.

Probleme in Eclipse

Pentru a evita mesajul de eroare in Eclipse sterge din build.xml bucata default=”help” si eroare nu va mai aparea.

Semneaza automat installer-ul APK

Inainte ca o aplicatia Android sa fie instalata pe un telefon sau inclusa in Android Market ea trebuie semnata. Trebuie sa creezi un keystore folosind Eclipse. Poti face asta in proiect, mouse click dreapta Android Tools –> Export Signed Application Package si mergi ininte cu procesul de semnare.

E preferabil sa construiesti un fisier numit build.properties in care sa adaugi:

# set the keystore properties for signing the application.
key.store=build\\keystore
key.alias=androider.ro
key.store.password=parolasecreta
key.alias.password=parolasecreta

Modifica build.xml sa efectueze si pasi intermediari

Daca nu mai doresti nici un pas in plus te poti opri aici. Insa daca doresti si alte operatii poti merge mai departe. In fisierul build.xml exista deja intructiuni de cum poti sa customizezi pasii de build:

The rules file is imported from
/platforms//templates/android_rules.xml
To customize some build steps for your project:
- copy the content of the main node
from android_rules.xml
- paste it in this build.xml below the task.
- disable the import by changing the setup task below to

Cauta fisierul android_rules.xml file in Android SDK. Al meu se gaseste in c:\WORK\Android\android-sdk-windows\platforms\android-8\templates. Din acest fisier copiaza tot continutul excluzand tagul de inceput (copiaza de sub <project name=”MainActivity”> pana la </project>). Din acest moment poti adauga pasi customizati in build.xml

Redenumeste installerul si adaugai un timpestamp

<echo>Copy the APK in the build folder for FTP upload</echo>
<tstamp>
<format property=”touch.time” pattern=”yyyy_MM_dd”/>
</tstamp>
<copy tofile=”build/exempluandroider_${touch.time}.apk” file=”bin/${ant.project.name}-release.apk” overwrite=”true”/>

Pregateste emailul pentru trimitere

In fisierul build/textemail.txt tin continutul emailului ce il voi trimite si doresc ca numele de fisier sa fie cu timestamp, fac pentru acest lucru un search and replace.

<echo>Prepare the email, replace the build with the new generated one</echo>
<replace dir=”build”>
<include name=”textemail.txt.txt”/>
<replacetoken>buildapk</replacetoken>
<replacevalue>$exempluandroider_${touch.time}.apk</replacevalue>
</replace>

Trimite un email cu Buildul

<echo>Send the email with the new uploaded build</echo>
<mail mailhost=”${mail.mailhost}”
user=”${mail.user}”
password=”${mail.password}”
mailport=”${mail.port}”
subject=”Androider report ${touch.time}”
messagefile=”build/textemail.txt”
cclist=”${mail.cc}”>
<from address=”${mail.from}”/>
<to address=”${mail.to}”/>
<replyto address=”${mail.from}”/>
</mail>

Creeaza un fisier Java dinamic inainte de compilare

<target name=”config” depends=”clean”>
<property name=”config-target-path” value=”${source.dir}/com/androider/samples/antbuild”/>

<!– Copy the configuration file, replacing tokens in the file. –>
<copy file=”build/ConstantsEnviroment.java” todir=”${config-target-path}” overwrite=”true” encoding=”utf-8″>

<filterset>
<filter token=”CONFIG.LOGGING” value=”${config.logging}”/>
<filter token=”CONFIG.SERVER” value=”${config.server}”/>
</filterset>
</copy>

<!– Now set it to read-only, as we don’t want people accidentally
editing the wrong one. NOTE: This step is unnecessary, but I do
it so the developers remember that this is not the original file. –>
<chmod file=”${config-target-path}/ConstantsEnviroment.java” perm=”-w”/>
<attrib file=”${config-target-path}/ConstantsEnviroment.java” readonly=”true”/>

</target>

Pasii pe scurt

  1. In linia de comanda ruleaza android update din directorul aplicatiei
  2. (Optional) Creeaza fisierul build.properties cu datele necesare pentru semnarea installer-ului
  3. (Optional) Daca doresti o customizare mai mare atunci copiaza continutul fisierului /platforms/templates/android_rules.xml in fisierul build.xml
  4. Realizeaza un build a proiectului folosind ant release, APK-ul se va regasi in bin/.

Aplicatie care exemplifica un build Android realizat cu ANT

Am folosit ca exemplificare acelasi exemplu ca si Matt Quigley insa modificata astfel incat sa contina si trimiterea de email si uploadul de ftp. Atasata in arhiva de mai jos se gaseste si fisierele de build pentru aplicatia mea (care contine in plusm trimiterea de email si uploadul per FTP). Inauntru se gasesc 2 aplicatii:

AntBuild – exemplu simplu via Matt Quigley
AntBuild – exemplu mai complex cu email, ftp etc

Avatar of Marius Mailat

Marius Mailat

Marius Mailat creează software comercial din 1999: aplicații enterprise pentru Xerox și Sabre Travel Network precum și aplicații mobile pentru interfețe bancare, shopping, aplicații de securitate. Cursul Android oferit de el pe Androider.ro cât și cursurile internaționale Android pentru clienți precum Intel îl recomandă ca un bun cunoscător al platformelor mobile.

More Posts - Website

Follow Me:
TwitterFacebookLinkedInGoogle Plus