MojAndroid
(x) hirdetés

Miután megkaptam a HTC Desire-t, egyből azon kezdtem el gondolkodni, hogy hogyan lehet saját alkalmazást írni erre kis kütyüre. Semmit sem tudtam róla, csak azt, hogy az Android gyakorlatilag egy ARM-re portolt linux. Néhány napos olvasgatás után kezdett eloszlani a köd (egy része), és tisztábban láttam az egész koncepciót.

Fejlesztésről magyarul nem sok olvasnivalót találtam, az alábbi leírást is külföldi oldalakról és egy-két nap teszteléssel sikerült összehozni. A célom az volt, hogy csak a szükséges dolgokat tegyem fel a fejlesztéshez, és szeretném tudni mi történik.

Fejlesztői környezet: Windows 7 Professional 64 bit. Figyelem, a leírás kissé specifikus az adott szoftverkörnyezetre (SDK és Android verziók, App), így lehetnek eltérések. Továbbá a leírás csak egy példaalkalmazással lett tesztelve.

Szükséges szoftverek: Java SDK (jdk-6u23-windows-i586.exe), Android SDK (andriod-sdk-installer_r08-windows.exe).

SDK helye: d:workandroidsdk
Appok helye: d:workandroid

Az Android SDK-ból én csak a saját verziómhoz való csomagokat tettem fel (A2.2, API8), ízlés szerint felrakható a többi is (zavarni nem fog).

Ahhoz, hogy a saját fejlesztésű alkalmazásokat a telefon fel tudja installálni, szükség lesz egy tanúsítványra (cert, keystore). A hivatalos oldal elég sok mindent részletesen taglal, így itt azt most kihagynám. Lehetséges saját aláírású certtel (self-signed certificate) fejlesztési célra bármilyen appot aláírni és feltenni.

A tanúsítvány generálására a JDK ad egy remek szoftvert: keytool.

Így használjuk:

"c:Program Files (x86)Javajdk1.6.0_23binkeytool.exe" -genkey -v -keystore android.keystore -alias android -keyalg RSA -keysize 2048 -validity 10000

Enter keystore password: (legalább 6 karakter)
Re-enter new password:
What is your first and last name?
[Unknown]: Elso Certem
What is the name of your organizational unit?
[Unknown]: Egyseg
What is the name of your organization?
[Unknown]: Szervezet
What is the name of your City or Locality?
[Unknown]: Varos
What is the name of your State or Province?
[Unknown]: Megye
What is the two-letter country code for this unit?
[Unknown]: HU
Is CN=Elso Certem, OU=Egyseg, O=Szervezet, L=Varos, ST=Megye, C=HU correct?
[no]: yes

Generating 2 048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10 000 days
for: CN=Elso Certem, OU=Egyseg, O=Szervezet, L=Varos, ST=Megye, C=HU
Enter key password for
(RETURN if same as keystore password):
[Storing android.keystore]

A létrejött android.keystore fájlt elhelyeztem a d:workandroid könyvtáramba.

A tesztalkalmazás most a NotePad lesz, mert ez tűnt a neve alapján a legegyszerűbbnek. A d:workandroidsdksamplesandroid-8 könyvtárból átmásoltam a d:workandroid könyvtárba.

A fordításhoz a neten található leírások alapján az alábbi batch fájlt készítettem:

@echo off

set APP=notepad
set CLASS=notepad
set HOME=D:/work/android
set SDKROOT=D:/work/androidsdk

set SDK=%SDKROOT%/platforms/android-8
set BIN=%SDK%/tools
set PATH=%PATH%;%BIN%;C:/Program Files (x86)/Java/jdk1.6.0_23/bin;%SDKROOT%/tools

cd %HOME%/%APP%
md binclasses
aapt p -m -J src -M AndroidManifest.xml -S res -I %SDK%/android.jar
call javac -encoding ascii -d %HOME%/%APP%/bin/classes -bootclasspath %SDK%/android.jar %HOME%/%APP%/src/com/example/android/%CLASS%/*
call dx --dex --output=%HOME%/%APP%/bin/classes.dex %HOME%/%APP%/bin/classes
aapt p -f -M AndroidManifest.xml -S res -I %SDK%/android.jar -F %HOME%/%APP%/bin/%APP%.unaligned.apk
cd bin
aapt a %HOME%/%APP%/bin/%APP%.unaligned.apk classes.dex
cd ..
jarsigner -verbose -keystore %HOME%/android.keystore %HOME%/%APP%/bin/%APP%.unaligned.apk android
zipalign -f -v 4 %HOME%/%APP%/bin/%APP%.unaligned.apk %HOME%/%APP%/bin/%APP%.apk

A batch fájlt lefuttatva egy kérdésre kell válaszolni, hogy mi a keystore jelszava, remélhetőleg emlékszünk rá :)
A folyamat végeztével jó eséllyel találhatunk egy notepad.apk fájl a D:workandroidNotePadbin könyvtárban, amit ízlés szerinti eszközzel fel is rakhatunk az “telefonunkra”.

Ha az installálás mégsem sikerülne, a következő dolgokat érdemes megnézni (az apk gyakorlatilag egy zip, bármilyen erre alkalmas eszközzel bele lehet nézni):

  • a notepad.apk-ban létezik-e classes.dex fájl
  • a notepad.apk-ban van-e META-INF könyvtár, és annak van-e tartalma

Ha az alkalmazás futtatásával vannak problémák (indítás után egyből hibával leáll), semmi pánik, a szoftver egy nem létező könyvtárba szeretne írni egy SQLite adatbázist, ettől függetlenül a fordítás és az installálás megy, ez a lényeg.

2010.12.30.

+