Oldal: Kezdőlap / Android OS, Bemutató, Fejlesztés / Oldal: Android honosítás 2. rész – Az apk csomagok kezelése

Android honosítás 2. rész – Az apk csomagok kezelése

2010. május 18. | 2 hozzászólás | Kategória: Android OS, Bemutató, Fejlesztés

A sorozat előző részében megismerkedtünk az apk csomagok felépítésével, és most eljött az idő, hogy gyakorlatba ültessük az elméleti részt. A fájlok kibontásával kell kezdenünk, amihez egy nagyon ügyes kis programot használunk, az apktoolt. A program ingyenesen letölthető innen. Két fájlra lesz szükségünk, mégpedig magára az apktoolra, és a megfelelő platformra kiadott indító állományára. Nem akarok sok időt vesztegetni, mivel az apktool telepítéséhez minden információ megvan az oldalukon. Aki elakadt, az nyugodtan kérdezzen. Én Linux alapú operációs rendszert használok, és ajánlom mindenkinek, hogy akár virtuális gépben, de mindenképp valamilyen Linux alapú rendszer, esetleg Ubuntu alatt próbálgassa az itt leírtakat. Természetesen Windows és MAC OS alatt is van lehetőség ezekre a dolgokra, ha valaki ragaszkodik ezekhez az operációs rendszerekhez. Próbáljátok értelmezni a használt parancsokat, és alakítsátok őket a megfelelő rendszer parancssorához.

Miután már mindenünk megvan a csomagok kezeléséhez, bontsunk is ki egy APK fájlt. Lássuk hogy is működik az apktool:

$ apktool
Apktool v1.1.1 - a tool for reengineering Android apk files
Copyright 2010 Ryszard Wiśniewski
Usage: apktool [-v|--verbose] COMMAND [...]
COMMANDs are:
    d[ecode] [-s|--no-src][-r|--no-res][-d|--debug] <file.apk> <dir>
        Decode <file.apk> to <dir>.
        -s, --no-src
            Do not decode sources.
        -r, --no-res
            Do not decode resources.
        -d, --debug
            Decode in debug mode. Check project page for more info.
    b[uild] [-f|--force-all][-d|--debug] [<app_path>]
        Build an apk from already decoded application located in <app_path>.
        Apk file will be placed in <app_path>/dist/out.apk.
        It will automatically detect, whether files was changed and perform
        needed steps only.
        If you omit <app_path> then current directory will be used.
        -f, --force-all
            Skip changes detection and build all files.
        -d, --debug
            Build in debug mode. Check project page for more info.
For additional info, see: http://code.google.com/p/android-apktool/

Ha áttanulmányoztuk a súgót, bontsunk ki egy APK fájlt, legyen az a Launcher.apk:

$ apktool d -s Launcher.apk Launcher
I: Copying raw classes.dex file...
I: Decoding resource table...
I: Decoding resources...
I: Copying assets and libs...

Láthatjuk, hogy létrejött egy mappa Launcher néven. Ha belekukkantunk, a következő fájlokat fogjuk látni:

9patch AndroidManifest.xml classes.dex res

A kibontáshoz a “d”, avagy decode és a “-s”, azaz források nélkül kapcsolókat használtuk, így csak a res mappát bontottuk ki, a forrásfájlokhoz nem nyúltunk hozzá. A kibontott/létrejött mappák a következők:

9patch. Az android csomagokban van lehetőségünk amolyan “kimaszkolt” képelemeket létrehozni. Ez azért jó, mert az így létrehozott fájlokat a megfelelő paraméterekkel lehet nyújtani, nem szükséges a képek több méretbeni tárolása. A 9patch mappában tárolt fájlok segítenek a maszkolt képek majdani visszaalakításában, a honosításokhoz nincs szükségünk rá.

AndroidManifest.xml. Az előző cikkben volt róla szó, lapozzatok vissza.

classes.dex. Erről szintén az előző részben olvashattatok és, ahogy sanyiii említette, az src mappában tárolt Java forrásokból fordított bájtkód van benne (mégegyszer köszönöm neki a javítást).

res mappa. Ismét az előző részben került említésre. Nézegessétek, tanulmányozzátok az itt tárolt fájlokat, melyeket a következő, befejező cikkben részletesen is kitárgyalunk.

Térjünk vissza a példánkhoz, ahol ugye már kicsomagoltuk az első APK csomagunkat. A kísérletezni vágyó olvasók csinálhatnak rajta módosításokat, viszont most lássuk, hogy hogyan is lehet újra APK-t varázsolni a könyvtárakból:

$ apktool b Launcher
I: Copying classes.dex file...
I: Checking whether resources has changed...
I: Building resources...
I: Building apk file...

A classes.dex úgy, ahogy van be lett másolva a csomagba, ellenőrizve lettek a módosítások, összepakoltuk a res mappát, és létrehoztuk az apk csomagot. Most a Launcher könyvtárban létrejött egy “dist” mappa, amiben megtalálhatjuk az out.apk fájlt. Ez a most összecsomagolt APK fájlunk, ami viszont még nincs aláírva. Az aláíráshoz először kulcsot kell gyártanunk magunknak. A kulcs létrehozásához telepítve kell legyen a Java JDK a gépünkre. Windows felhasználók innen tölthetik le. Linux felhasználók csak telepítsék repoból (ajánlom az openjdk-t). Amennyiben sikerült feltelepíteni a JDK-t, generáljuk le a kulcsunkat:

keytool -genkey -alias kulcsom.keystore -keyalg RSA -validity 20000 -keystore kulcsom.keystore

Sikeresen létrehoztuk a saját privát kulcsunkat, amivel aláírhatjuk az APK csomagot:

jarsigner -verbose -keystore kulcsom.keystore -signedjar Launcher/dist/Launcher.apk Launcher/dist/out.apk kulcsom.keystore

Most létrejött a Launcher/dist/Launcher.apk, ami már az újonnan lefordított APK fájlunk aláírt verziója.

A következő cikkben a honosítás menetével, és az update csomagok létrehozásával ismerkedünk meg.

Az Android honosításával kapcsolatban bővebb információk és véleménycserék a fórumban.

Szerző: Apoth

Hasonló bejegyzések

Hozzászólások követése

2 hozzászólás ehhez: “Android honosítás 2. rész – Az apk csomagok kezelése”

  1. Apoth hozzászólása:

    Értékeld!  0Thumb upThumb down

    Létrehoztam egy fórumtopicot a felmerülő technikai kérdéseknek: http://forum.androidhungary.com/topic/android-honositas
     

  2. Tamás hozzászólása:

    Értékeld!  0Thumb upThumb down

    Helló
    Az lenne a kérdésem hogy nekem egy kínai MTK androidos készülékem van amine 2.2.1 es rendszer van. Szeretnék bele magyar nyelvet. Az ilyen típusú készülékeket is így kell honosítani?
    Válaszát előre is köszönöm

Hozzászólás írása

Amennyiben szeretnéd, hogy a saját avatárképed megjelenjen a hozzászólásod mellett, regisztrálj a gravatar.com oldalon, majd látogass vissza!