Dopo aver installato correnttamente APKTool, siamo pronti a decompilare il nostro primo APK.
Per esempio, vogliamo aggiungere al menu della nostra custom ROM le shortcust (scorciatoie) per:
-Reboot
-Recovery Mode
-Download Mode
Per fare ciò abbiamo bisogno dei file:
- framework-res.apk
- android.policy.jar
Bene! Cominciamo.
Il primo passo è quello di estrarre la ROM.zip quindi con 7zip o winrar estraiamo la ROM in una qualsiasi cartella del nostro pc ottenendo così (guarda sotto spoiler)
Ora cartella System--->framework--->framework-res.apk
Copiamo il file framework-res.apk nella cartella di APKTool, lanciamo APKTool col metodo indicato nel primo post e dopo andiamo a decompilare il file in questo modo (premettendo che già avete avviato APKTool e siete nella cartella dello stesso) digitate nel cmd (promt dei comandi)
codice:
apktool d framework-res.apk
Se avete fatto tutto nel modo giusto vi dovrà rispondere in questo modo
Abbiamo decompilato il nostro primo apk! E' facile no? Ora invece passiamo alla modifica del codice.
Innanzitutto dobbiamo avere a nostra disposizione 3 immagini che andranno nel menu le immagini dovranno essere formato .png e dovranno chiamarsi
- "ic_lock_reboot.png" per il riavvio
- "ic_lock_recovery.png" per la recovery mode
- "ic_lock_download.png" per la download mode
Queste 3 immagini dovranno essere messe nel percorso : C:\Users\vostronomeutente\apktool\framework-res\res\drawable-hdpi
Dopo aver "depositato" le immagini nella cartella indicata su, possiamo passare alla modifica di alcuni file con estensione .xml
Editiamo il primo file "strings.xml" il file si trova nel seguente percorso "\framework-res.apk\res\values\strings.xml"
Una volta trovato il file possiamo modificarlo con notepad++ , quindi click destro--> Apri con--> Notepad++
Ci ritroveremo un file con all'interno molte stringhe di codice, non dobbiamo fare altro che "scrollare" o meglio scendere fino alla fine ed aggiungere le seguenti 3 stringhe
codice:
<string name="reboot_recovery">Recovery</string>
<string name="reboot_download">Download</string>
<string name="reboot">Reboot</string>
Fate bene attenzione che le tre stringhe aggiunte siano prima di "</resources>" in questo modo
A questo punto potete chiudere e salvare.
Ricompiliamo il file framework-res.apk
Al solito APKTool --> cmd ---> cartella del file; dare il comando
codice:
apktool b nome-apk-da-compilare
A questo punto ci ritroveremo due nuove cartelle:
dist e build. All'interno della cartella "dist" ci sarà il nostro apk.
Ridecompiliamo il file nella cartella dist sta volta andremo a modificare il file public.xml; percorso del file C:\Users\vostronomeutente\apktool\framework-res\res\values
Appena aprirete il file vi accorgerete che per ogni stringa di codice ci sono delle cifre in HEX (esadecimale) ecco queste ci serviranno dopo. Cerchiamo dunque:
codice:
<public type="string" name="reboot" id="0x01040507" />
<public type="string" name="reboot_recovery" id="0x01040508" />
<public type="string" name="reboot_download" id="0x01040509" />
e
codice:
<public type="drawable" name="ic_lock_reboot" id="0x010802da" />
<public type="drawable" name="ic_lock_recovery" id="0x010803d3" />
<public type="drawable" name="ic_lock_download" id="0x010803d4" />
Public.xml viene creato ogni volta che decompiliamo il file con APKTool e quindi i codici (o id) variano quindi ogni volta dobbiamo cercare queste 6 stringhe e segnarle, perché come detto prima ci serviranno dopo. A questo punto dopo aver segnato da qualche parte queste 6 stringhe possiamo chiudere il file e ricompilare il file. Al solito con APKTool.
Finalmente abbiamo finito di lavorare su framework-res.apk. Ora passiamo al secondo file sopracitato ovvero: "android.policy.jar"
Il procedimento per decompilare un file con estensione .jar è lo stesso di un file apk, quindi mettiamolo nella cartella di APKTool e poi dal cmd al solito lo decompiliamo in questo modo
Una volta decompilato quest'altro file dobbiamo andare a modificare un altro file denominato "GlobalActions.smali"
DA NON CONFONDERE CON GlobalActions$Action.Smali
Il percorso del file è : C:\Users\vostronomeutente\apktool\android.policy.j ar.out\smali\com\android\internal\policy\impl\Glob alActions.smali
Apriamolo con notepad++ e cerchiamo la stringa ".method private createDialog()Landroid/app/AlertDialog;"
Questa stringa indica il numero di opzioni che possiamo avere nel menu di "boot" del device ovvero quando teniamo premuto il tasto di accensione/spegnimento del medesimo.
Adesso andiamo a modificare ""const/4 v9, 0x4" con "const/4 v9, 0x7"
Dopo troviamo la stringa
codice:
invoke-static {v0}, Lcom/google/android/collect/Lists;->newArrayList([Ljava/lang/Object;)Ljava/util/ArrayList;
e inseriamo sopra ad essa:
codice:
const/4 v1, 0x4
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$8;
const v3, 0x10803d2
const v4, 0x1040488
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$8;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
aput-object v2, v0, v1
const/4 v1, 0x5
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$9;
const v3, 0x10803d3
const v4, 0x1040489
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$9;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
aput-object v2, v0, v1
const/4 v1, 0x6
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$10;
const v3, 0x10803d4
const v4, 0x104048a
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$10;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
aput-object v2, v0, v1
Gli "id" in hex devono essere cambiati con quelli che abbiamo segnato prima durante la ricompilazione del file framework-res.apk.
Dovremmo ottenere una cosa del genere
Salviamo e ricompiliamo il file! Con questo abbiamo finito.
PS: Se volete il procedimento per non avere lo "scroll" nel menu e quindi averlo tutto intero senza bisogno di scorrerlo chiedetemelo e lo aggiungerò alla guida.
PS2: Ci sono miriadi di guide su xda, ma nessuna in italiano e quindi ho pensato di farne una in italiano appunto per aiutare i nuovi modder.
Spero di esservi stato utili e se ci sono cose che non capite/scritte male e/o sbagliate segnalate e risolverò il problema!