[Howto] Decompilieren und Modifizieren von TW-APKs

M

Marvis

Fortgeschrittenes Mitglied
19
Howto Decompilieren und Modifizieren von APK's (Touchwiz-Launcher, Dialer, usw.)

Komplexität: Einfach
Benötigt: Gerootetes & deodextes Telefon, Android Multitool V3.3, Notepad++, WinRar, und Windows
(Das ist mein Setup wie ich es verwende, funktioniert auch mit APKTool V2, jeder Art Editor und Zip-Programm)

Vorbereitung:

1. Download des Android Multitool XDA-Thread(enthält bereits das APKTool und bietet ein schönes Windows Frontend)
2. Damit das AMT laufen kann müssen aktuelles Java, Microsoft Powerpacks und .NET framework installiert sein.
3. Entpacke das Android Multitool (Ich bevorzuge C:\AMT\ das macht später alles etwas übersichtlicher)
4. Nun brauchen wir noch die zugehörigen Frameworks, zu finden in Rom/Telefon unter /system/framework und evtl. auch /system/app/
5. Je nach APK die wir decompilieren wollen sind das framework-res.apk, twframework-res und SystemUI.apk
6. Natürlich fehlt jetzt noch die APK die wir bearbeiten wollen. In meinem Fall die SecContacts.apk (/system/app)
7. Jetzt kopieren wir diese 4 Dateien in C:\AMT\Files\

Starten der Motoren:

8. Weiter geht es mit dem starten des Android Multitool (C:\AMT\Android Multitool.exe)
9. Ist alles installiert was nötig ist begrüßt euch eine graue Oberfläche mit 4 großen Knöpfen (install, decompile, compile, sign)
10. Wir drücken den kleinen Knopf "..." (3 Punkte) oberhalb von "install" um die nötigen frameworks zu installieren (ohne diese kein decompilieren).
11. Es sollte ein Ordnerfenster öffnen das euch direkt den Inhalt von C:\ATM\Files zeigt. (Abhängig von eurem Pfad öffnet er immer "Files" und die APK's müssen hier liegen!
12. framework-res.apk wählen mit "öffnen" bestätigen und "Install" drücken.
13. Nach ein paar Sekunden erscheint ein Fenster "Finished. Check Log for Errors!", mit "OK" bestätigen. Hat alles geklappt steht nun im "Log:"-Fenster "No errors."
14. Wir wiederholen Schritt 11-13 für twframework-res.apk und SystemUI.apk.

Das erste mal (decompilieren):

15. Es ist soweit, alle Vorbereitungen sind abgeschlossen, die Frameworks installiert. Nun drücken wir die "..." Taste über "decompile".
16. Ich wähle in meinem Fall die SecContacts.apk und bestätige mit "öffnen" und drücke "decompile". Das Multitool startet (Der Vorgang hängt von eurem PC ab und kann dauern.)
17. Es erscheint wieder das Fenster "Finished. Check Log for Errors!"
18. Der erste Schock, im Log stehen bei mir nun wirklich 3 Einträge: 2x "W: Skipping "android" package group" und 1x Cleaning unclosed ZipFile for archiv C:Users\USER\apktool\framework\2.apk (Das sind Warnungen, dass z.B. etwas nicht decompiliert werden konnte.)
19. Hier sind wir erst einmal fertig, abhängig von euerer APK (z.B. SecLauncher) steht hier im idealfall wieder "No errors." Unter C:\ATM\Decompiled_apk findet ihr einen Ordner mit dem Namen eurer APK, darin alle decompilierten Dateien.

Modifizieren (SecLauncher):

Für die unter euch die dem Launcher an den Leib wollen, hier einige Punkte, die ich mir aus vielen verschiedenen "Howto" "Guides" und aus den eigenen Finger gezogen habe.

Aktivieren des Wallpaper scrollens (Hintergrundbild bewegt sich beim Blättern der Seiten (Home/Drawer) (gelesen bei Toss3)
20. Im Verzeichnis Decompiled_apk Launcher\res\values die Datei "bools.xml" mit Notepad++ öffnen.
21. Die Zeile mit dem Wert <bool name="config_fixedWallpaperOffset">true</bool> suchen und true auf false ändern. Das wars!

Ändern des Rasters im Homescreen und App-Drawer (gelesen bei Toss3)
22. Ins Verzeichnis Launcher\res\values-sw359dp-xhdpi (kann auch xxhdpi heißen), hier brauchen wir die integers.xml.
22. Die Zeile home_cellCountX bezeichnet die Anzahl der Icons in X Richtung (Rechts-Links), home_cellCountY dem entsprechend in Y Richtung (Hoch-Runter)
23. manuAppsGird_cellCountX und Y analog für den App-Drawer
24. Weiter geht es in der dimens.xml. Für den Homescreen, Code:
Code:
 "<dimen name="home_cellWidth">90.0dip</dimen>
    <dimen name="home_cellHeight">85.0dip</dimen>
    <dimen name="home_cellGapX">0.0dip</dimen>
    <dimen name="home_cellGapY">0.0dip</dimen>
    <dimen name="home_cellGapMax">18.0dip</dimen>
    <dimen name="home_pageIndicatorGap">12.0dip</dimen>
    <dimen name="home_pageIndicatorTop">520.0dip</dimen>"
Das sind die interessanten Zeilen, die die Abstände zwischen den Icons regeln. Hier heißt es ausprobieren bis es passt.
Tip: Schnappt euch einen schon gemoddeten Launcher, decompiliert und kuckt dort in die Dateien. ;-)
25. Für den App-Drawer, Code:
Code:
  "<dimen name="menuAppsGrid_pageMarginPlusPaddingTop">10.0dip</dimen>
    <dimen name="menuAppsGrid_cellWidth">70.0dip</dimen>
    <dimen name="menuAppsGrid_cellHeight">90.0dip</dimen>
    <dimen name="menuAppsGrid_cellGapX">0.0dip</dimen>
    <dimen name="menuAppsGrid_cellGapY">0.0dip</dimen>
    <dimen name="menuAppsGrid_cellGapMax">18.0dip</dimen>
    <dimen name="menu_pageIndicatorGap">12.0dip</dimen>
    <dimen name="menu_pageIndicatorTop">550.0dip</dimen>"
Weiter geht es mit dem recompilieren!

Recompilieren

Hier hilft auch wieder das Android Multitool. Der Vorgang ist der gleiche wie beim Framework.
26. Die "..." Taste über "compile", hier müssen wir diesmal den Ordner mit den Änderungen auswählen und mit "Ok" bestätigen. (z.B. C:\AMT\decompiled_apk\SecLauncher)
27. "compile" betätigen und schon recompiliert das im Multitool integrierte APKtool die APK wieder.
28. Eine uns bekannte Meldung erscheint. Im "Log" steht (hoffentlich) "No errors".
29. Unter C:\AMT\compiled_apk\SecLauncher\ befindet sich jetzt die gemoddete SecLauncher.APK aber wir sind noch nicht fertig!
30. Damit unser Mod funktioniert müssen jetzt die gemoddeten Dateien in die Originale APK. Also eine Kopie der Original APK mit Winrar öffnen, und die geänderten dateien aus der neuen APk in jeweiligen Verzeichnisse die original APK ziehen.
Wichtig:
Einige Dateien werden in der "resources.arsc" zusammengefasst, diese sollte auch ersetzt werden.


Credits:
Das modden des Launchers und der Contacts waren meine ersten holprigen Versuche mit APKs. Dementsprechend mühsam und aufwendig war es das ganze zusammen zu tragen. Leider weiß ich auch nicht mehr was ich in welchem englischen Forum gelesen habe.
Danke auf jedenfall an Toss3 für diesen Guide. Nicht mehr der aktuellste aber ein guter Einstieg!

Modifizieren (SecContacts):

Das war ein harter Brocken. Benötigt werden hier framework-res.apk, twframework-res.apk und SystemUI.apk als Frameworks.
Beim recompilieren treten auch ohne modifikationen Probleme auf die man erst einmal verstehen muss um sie zu beheben.
Das hat mich einige Stunden suchen gekostet bis es klick gemacht hat. Und zwar müssen fehlende Verknüpfungen entfernt werden.

Code:
C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res\layout-sw359dp-xhdpi\dialpad_fragment_chn_duos.xml:18: error: Error: No resource found that matches the given name (at 'layout' with value '@layout/dialer_app_onehand_chn_duos').
C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res\layout\quickcontact_activity_easymode_for_namecard.xml:7: error: Error: No resource found that matches the given name (at 'layout' with value '@layout/quickcontact_photo_container_for_namecard').
C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res\layout-land\quickcontact_activity_easymode_for_namecard.xml:7: error: Error: No resource found that matches the given name (at 'layout' with value '@layout/quickcontact_photo_container_for_namecard').
C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res\layout\quickcontact_activity_for_namecard.xml:7: error: Error: No resource found that matches the given name (at 'layout' with value '@layout/quickcontact_photo_container_for_namecard').
C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res\layout-land\quickcontact_activity_for_namecard.xml:7: error: Error: No resource found that matches the given name (at 'layout' with value '@layout/quickcontact_photo_container_for_namecard').
Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [C:\Users\Volker\AppData\Local\Temp\brut_util_Jar_2298408425274927714.tmp, p, --forced-package-id, 127, --min-sdk-version, 18, --target-sdk-version, 18, --version-code, 18, --version-name, 4.3-I9300XXUGMJ9, -F, C:\Users\Volker\AppData\Local\Temp\APKTOOL1158300939628008960.tmp, -0, arsc, -I, C:\Users\Volker\apktool\framework\1.apk, -I, C:\Users\Volker\apktool\framework\2.apk, -S, C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res, -M, C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\AndroidManifest.xml]
    at brut.androlib.Androlib.buildResourcesFull(Androlib.java:435)
    at brut.androlib.Androlib.buildResources(Androlib.java:363)
    at brut.androlib.Androlib.build(Androlib.java:286)
    at brut.androlib.Androlib.build(Androlib.java:258)
    at brut.apktool.Main.cmdBuild(Main.java:236)
    at brut.apktool.Main.main(Main.java:88)
Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [C:\Users\Volker\AppData\Local\Temp\brut_util_Jar_2298408425274927714.tmp, p, --forced-package-id, 127, --min-sdk-version, 18, --target-sdk-version, 18, --version-code, 18, --version-name, 4.3-I9300XXUGMJ9, -F, C:\Users\Volker\AppData\Local\Temp\APKTOOL1158300939628008960.tmp, -0, arsc, -I, C:\Users\Volker\apktool\framework\1.apk, -I, C:\Users\Volker\apktool\framework\2.apk, -S, C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res, -M, C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\AndroidManifest.xml]
    at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:470)
    at brut.androlib.Androlib.buildResourcesFull(Androlib.java:416)
    ... 5 more
Caused by: brut.common.BrutException: could not exec command: [C:\Users\Volker\AppData\Local\Temp\brut_util_Jar_2298408425274927714.tmp, p, --forced-package-id, 127, --min-sdk-version, 18, --target-sdk-version, 18, --version-code, 18, --version-name, 4.3-I9300XXUGMJ9, -F, C:\Users\Volker\AppData\Local\Temp\APKTOOL1158300939628008960.tmp, -0, arsc, -I, C:\Users\Volker\apktool\framework\1.apk, -I, C:\Users\Volker\apktool\framework\2.apk, -S, C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res, -M, C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\AndroidManifest.xml]
    at brut.util.OS.exec(OS.java:89)
    at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:464)
    ... 6 more
Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.
So sieht dann die Fehlermeldung aus, die ein recompilieren beim Multitool erzeugt. (Danke an GerdmitPferd :tongue: )
Um das zu beheben interessieren uns nur die ersten 5 Zeilen.
Nehmen wir gleich die Erste Datei:
C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res\layout-sw359dp-xhdpi\dialpad_fragment_chn_duos.xml
Dort passt etwas nicht.
error: Error: No resource found that matches the given name (at 'layout' with value '@layout/dialer_app_onehand_chn_duos').
Der Verweis "layout/dialer_app_onehand_chn_duos" findet sein Ziel nicht. Da ich jetzt kein Chinese bin stört mich das nicht und ich entferne diesen Verweis.
Code:
<include layout="@layout/dialer_app_onehand_chn_duos" />
Ebenso verfahre ich mit den nächsten 4 Fehlern die sich auf den Verweis "@layout/quickcontact_photo_container_for_namecard" beziehen. Nachdem wir die APK so bereinigt haben lässt sich die Datei wieder compilieren. Da wir nach dem modifizieren,
nur die gemoddeten Dateien in die Original-APK übernehmen bleiben diese Fehler erhalten und begrüßen uns beim nächsten kompilieren wieder. Ihr solltet testen ob ihr negative Auswirkungen feststellen könnt, wenn ihr die "bereinigten" Dateien auch mit übernehmt. Bei meinem Mod der SecContacts.apk konnte ich keine Fehler finden und habe die Änderungen dauerhaft übernommen.

- Anpassen der Wähltasten

Nun geht es an die Wähltasten. Da bei meiner gewählten Auflösung von 240dpi leider einiges nicht so skaliert wird wie ich es gerne hätte muss ich Hand anlegen.
Ich wusste aus dem "Guide" von "Toss3", dass es beim Launcher vor allem die dimens.xml war, die "Dimensionen" beeinflusst. Leider liegen die Werte in der SecContacts anders und ich musste etwas suchen.

Fündig wurde ich in
/res/layout-sw359dp-xhdpi

- dialpad.xml ( Tasten 0-9 *# )
- dialpad_additional_buttons.xml ( Tasten Videoanruf, Anruf, Löschen )
- dialpad_land.xml ( Tasten 0-9 *# für gedrehten Bildschirm)
- dialpad_additional_buttons_land.xml ( Tasten Videoanruf, Anruf, Löschen für gedrehten Bildschirm )

Hier müssen nun die dpi Werte angepasst werden. Das ist wenn man es bis hier geschafft hat dann ein Kinderspiel. Abhängig davon was ihr erreichen wollt. Ich wollte die Tasten entsprechend dem Layout bei 320 dpi. Also 320/240 gibt den Faktor 1.333, um diesen nun einfach alle Zahlen multipizieren (z.b. wird aus 4.0dpi 5.2dpi)

- Anpassen der Nummernanzeige (gewählte Nummer)

Beim ändern der DPI auf 240 wird die Anzeige der gewählten Nummer ab der ca 12 Nummer abgeschnitten. Eigentlich sollte sich ab dem Ende der Anzeige die Schriftgröße reduzieren.

Datei:
/res/layout-se359pd-xhdpi/
- dialpad_fragment.xml ( Wert android:layout_width= )

Auch hier einfach wieder die DPI entsprechend anpassen. Faktor für mich war 1.333



Ich werde hier Stück für Stück die von mir gemachten Änderungen ergänzen.
Weiter gehts später.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: gerdmitpferd
Ist das Verfahren auch so an zu wenden wenn man Grafiken modifizieren will?

Bei mir hagelt es da Fehlermeldungen ohne Ende.

Code:
C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res\layout-sw359dp-xhdpi\dialpad_fragment_chn_duos.xml:18: error: Error: No resource found that matches the given name (at 'layout' with value '@layout/dialer_app_onehand_chn_duos').
C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res\layout\quickcontact_activity_easymode_for_namecard.xml:7: error: Error: No resource found that matches the given name (at 'layout' with value '@layout/quickcontact_photo_container_for_namecard').
C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res\layout-land\quickcontact_activity_easymode_for_namecard.xml:7: error: Error: No resource found that matches the given name (at 'layout' with value '@layout/quickcontact_photo_container_for_namecard').
C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res\layout\quickcontact_activity_for_namecard.xml:7: error: Error: No resource found that matches the given name (at 'layout' with value '@layout/quickcontact_photo_container_for_namecard').
C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res\layout-land\quickcontact_activity_for_namecard.xml:7: error: Error: No resource found that matches the given name (at 'layout' with value '@layout/quickcontact_photo_container_for_namecard').
Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [C:\Users\Volker\AppData\Local\Temp\brut_util_Jar_2298408425274927714.tmp, p, --forced-package-id, 127, --min-sdk-version, 18, --target-sdk-version, 18, --version-code, 18, --version-name, 4.3-I9300XXUGMJ9, -F, C:\Users\Volker\AppData\Local\Temp\APKTOOL1158300939628008960.tmp, -0, arsc, -I, C:\Users\Volker\apktool\framework\1.apk, -I, C:\Users\Volker\apktool\framework\2.apk, -S, C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res, -M, C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\AndroidManifest.xml]
    at brut.androlib.Androlib.buildResourcesFull(Androlib.java:435)
    at brut.androlib.Androlib.buildResources(Androlib.java:363)
    at brut.androlib.Androlib.build(Androlib.java:286)
    at brut.androlib.Androlib.build(Androlib.java:258)
    at brut.apktool.Main.cmdBuild(Main.java:236)
    at brut.apktool.Main.main(Main.java:88)
Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [C:\Users\Volker\AppData\Local\Temp\brut_util_Jar_2298408425274927714.tmp, p, --forced-package-id, 127, --min-sdk-version, 18, --target-sdk-version, 18, --version-code, 18, --version-name, 4.3-I9300XXUGMJ9, -F, C:\Users\Volker\AppData\Local\Temp\APKTOOL1158300939628008960.tmp, -0, arsc, -I, C:\Users\Volker\apktool\framework\1.apk, -I, C:\Users\Volker\apktool\framework\2.apk, -S, C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res, -M, C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\AndroidManifest.xml]
    at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:470)
    at brut.androlib.Androlib.buildResourcesFull(Androlib.java:416)
    ... 5 more
Caused by: brut.common.BrutException: could not exec command: [C:\Users\Volker\AppData\Local\Temp\brut_util_Jar_2298408425274927714.tmp, p, --forced-package-id, 127, --min-sdk-version, 18, --target-sdk-version, 18, --version-code, 18, --version-name, 4.3-I9300XXUGMJ9, -F, C:\Users\Volker\AppData\Local\Temp\APKTOOL1158300939628008960.tmp, -0, arsc, -I, C:\Users\Volker\apktool\framework\1.apk, -I, C:\Users\Volker\apktool\framework\2.apk, -S, C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\res, -M, C:\Users\Volker\Downloads\AndroidMultitool\Decompiled_apk\SecContacts\AndroidManifest.xml]
    at brut.util.OS.exec(OS.java:89)
    at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:464)
    ... 6 more
Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.

Habe heute zu viele Termine.

Mach ich was grundsätzlich falsch?

Gruß GerdmitPferd
 
Hey Gerd,
dazu wollte ich jetzt kommen. :biggrin: Gestern hatte ich leider zu tun und konnte es nicht weiter schreiben. :winki:
 
Nur kein Stress :-D

Ich denke, wenn man das Prinzip kapiert hat,......
Da ich aber so grottenschlecht in Englisch bin, bin ich froh über jede gute deutsche Anleitung.

Vielen Dank für Deine tolle Arbeit!

Gesendet von meinem GT-I9300 mit der Android-Hilfe.de App

Der ursprüngliche Beitrag von 18:33 Uhr wurde um 20:05 Uhr ergänzt:

Ich bin noch mal an der SPlannerAppWidget.apk

Dekompilieren geht
Compilieren geht auch, aber es sind längst nicht alle Dateinen da ich habe zb in der
values-sw359dp-land-xhdpi die Datei integers.xml rumgefuhrwerkt.

Aber von den alues-Verzeichnissen ist keine Spur in der erstellten apk.

Ich öffne die mir 7zip ? oder muß ich winrar nehmen?
 
  • Danke
Reaktionen: Marvis
Hey Gerd,

ja das ist so auch richtig. Diese Datei gibt es so direkt auch nicht im Original. Wenn ich das richtig verstanden habe wird sie in die resources.arsc compiliert. Diese muss dann auch im Original ersetzt werden. Ich werde das gleich mal oben ergänzen! :laugh:
 
Hallo zusammen,
Super Anleitung! Nun habe ich endlich auch meine Kontakte und das schreckliche Wahlfeld in schlichten Schwarz-weis. Nur eins habe ich noch nicht hinbekommen: Am rechten Bildrand ist die Alphabetische schnellleiste mit grauer Schrift und dunkelgrauem Hintergrund und ich finde einfach nicht heraus wo ich das ändern kann Die meisten Farben konnte ich in der 'colors.xml' ändern und einige PNGs musste ich "schwärzen".
Weis evtl. jemand wie ich diese schnellleiste schwarz/weis bekomme?

Ich habe ein Galaxy S4 (GT-i9505) mit Echoe-Rom 26. Die SecContacts.apk ist ein S5-port.
Vielen Dank für Eure Hilfe!
 

Anhänge

  • Screenshot_2014-07-12-10-39-01.png
    Screenshot_2014-07-12-10-39-01.png
    73,9 KB · Aufrufe: 194

Ähnliche Themen

2
Antworten
6
Aufrufe
269
24559
2
M
  • MikelKatzengreis
Antworten
5
Aufrufe
136
swa00
swa00
S
Antworten
0
Aufrufe
593
Sergio13
S
Zurück
Oben Unten