[HowTo] SystemUI.apk modifizieren

S

szallah

Dauergast
132
als passender anschluss zu meiner modifizerung mit dem netzbetreiber hier ne anleitung, damit's jeder bei seinem eigenem rom (odexed, also stock quasi, gibt ja im moment glaub ich eh nix anderes) auch entfernen kann wenn er / sie nicht das von mir modifizierte 40er ICS am laufen hat...

warnung:
bla bla bla systemeingriff bla bla bla brick bla bla bla eigene verantwortung bla bla bla

voraussetzungen:
also ich benutze einen windows 7 pc... wenn ihr was vergleichbares habt sollte es schon ausreichen... ach ja, und noch 7zip zum apk-dateien bearbeiten und nen coolen text-editor...
und dann noch diese datei: SysUI-MOD.zip

wozu das ganze?
die SystemUI.apk enthält die dateien die kontrollieren wie die statusleite oben, sowieso navbar unten (die softkeys quasi wo auch der home button ist) aussehen und sich verhalten. desweiteren sind auch die zugehörigen grafiken drin. ich weiß zwar nicht ob meine anleitung und das beschränken auf diese einzelne apk dazu taugt, aber ein bisschen theming dürfte hiermit schon möglich sein. also ggf. ein paar icons ändern, das layout in dem pull-down-menü der statusleiste, oder aber vielleicht auch knöpfe zur navbar hinzufügen. ich weiß es nicht, aber euer feedback darüber was ihr versucht habt und was geht und was nicht ist sehr willkommen. :)

die anleitung:
1. die runtergeladene zipdatei irgendwohin entpacken. heraus kommt dann ein ordner der so aussieht wie hier:
SysUI-mod1.png


2. zieht euch von eurem handy die SystemUI.apk und legt sie in dasselbe verzeichnis. wer adb hat navigiert einfach mit der eingabeaufforderung dorthin wo die zip-datei entpackt wurde und gibt
Code:
adb pull /system/app/SystemUI.apk
ein. ich mache es dann noch so, dass ich mir diese datei ein mal kopiere und das apk am ende durch mod ersetze. so hab ich nen klaren überblick welche datei was ist. die apk ist's original und wird nicht mehr verändert, aber ggf. immer wieder gebraucht um neue apk's zu machen. also einfach unverändert da lassen und bei bedarf kopieren und mit der kopie weiterarbeiten.
wenn ihr's richtig gemacht habt sieht's dann in etwa so aus:
SysUI-mod2.png


3. als nächstes die eingabeaufforderung starten (falls nicht schon längst geschehen) und zu dem ordner navigieren wo alles entpackt wurde. in meinem fall war das D:\Desktop\SysUI-MOD.
dort angelangt dann folgenden befehl ausführen:
Code:
apktool d SystemUI.apk
wenn alles fertig ist sollte es in etwa so bei euch aussehen:
SysUI-mod3.png


4. die für uns in diesem beispiel interessante datei ist die status_bar.xml. in ihr steht drin wie die statusbar, also eben das dings oben mit uhr und icons drin, auszusehen hat. diese datei befindet sich im durch schritt 3 erzeugten ordner SystemUI, und dort dann noch tiefer in res -> layout
so als kleine hilfestellung:
SysUI-mod4.png


5. diese datei nun mit einem text-editor eurer wahl modifizieren. in meinem fall ist das notepad++, aber das notepad von windows tut's auch. sieht nur nicht so schön aus.
in meinem netzbetreiber-mod habe ich im ersten TextView-Element den wert von paddingLeft auf 1.0px gesetzt, sowie den wert von maxLength auf 0... die folge ist, dass das entsprechende textfeld nun maximal 0 stellen lang sein kann und sich 1 pixel vom linken rand befindet. vielleicht geht auch 0px, aber das hab ich nicht ausprobiert. könnte auch sein, dass man sowas bei android anders schreiben würde. probiert's halt aus. am ende einfach abspeichern.
das ganze sieht im übrigen dann etwa so aus:
SysUI-mod5.png


6. wieder zurück zur eingabeaufforderung. dort den befehl
Code:
apktool b SystemUI
eingeben. ja, das .apk fehlt am ende, da in diesem fall nicht die apk verwertet wird, sondern das verzeichnis in dem wir gearbeitet haben wieder kompiliert wird. wenn ihr nicht wisst was "kompilieren" bedeutet ist das nicht weiter schlimm. google hilft hier gerne weiter. :p
das ergebnis des kompilierungsprozesses befindet sich dann im dist-ordner der im SystemUI-ordner erzeugt wurde.
wenn ihr's richtig gemacht habt sieht's etwa so aus:
SysUI-mod6.png


7. nun öffnet ihr die eben neu kompilierte SystemUI.apk mit 7zip. ihr wisst ja noch von vorhin wo sich eure geänderte xml-datei befindet. diese kopiert ihr euch temporär irgendwo hin indem ihr sie im 7zip anklickt und irgendwo hin zieht. desktop oder so.
danach öffnet ihr die, wenn ihr's so macht wie ich, SystemUI.mod (diese datei landet am ende auf dem handy und ist momentan noch eine 100% identische kopie der originalen SystemUI.apk) mit 7zip und navigiert auch hier in das verzeichnis mit den xml-dateien. wählt in der liste der xml-dateien die status_bar.xml aus und drückt oben das rote X zum löschen. oder drückt die ENFT(ernen)-taste auf der tastatur.
da dieser platz nun frei geworden ist zieht ihr noch die xml-datei die ihr irgendwo zwischengespeichert habt (die aus der neu kompilierten SystemUI.apk) in das 7zip-fenster. wenn das geklappt hat habt ihr wieder alle nötigen dateien in der kopie der originalen SystemUI.apk drin.
als kleine visuelle hilfestellung:
SysUI-mod7.png


8. fertig. ihr habt nun hoffentlich eine neue funktionierende SystemUI.apk (die in diesem fall eigentlich SystenUI.mod heißen sollte) die ihr auf eurem handy verwenden könnt. der teil von 4 bis 8 lässt sich im grunde immer wieder wiederholen. die neu kompilierte SystemUI.apk ersetzt immer die vorher dagewesene.

und nun?
dieser teil wurde schon im thead zu meinem mod ausführlich erläutert. daher hier die kurzfassung:
1. SystemUI.mod -> sd-karte
2. /system/app -> rw mounten (also beschreibbar machen)
3. SystemUI.mod (sd-karte) -> /system/app
4. SystemUI.mod auf 644 setzen (also berechtigungen auf rw-r--r--)
5. SystemUI.apk -> SystemUI.bak (umbenennen, backup und so)
6. SystemUI.mod -> SystemUI.apk (umbenennen, und somit die stelle des originals einnehmen)
7. reboot und daumen drücken

was wenn's schief geht?
keine ahnung. hier gibt's genug andere die euch helfen können. im falle der SystemUI.apk sollte aber eigentlich nix schlimmeres passieren, als dass nach dem boot die statusleiste oben fehlt sowie die softkeys unten. was schon ziemlich scheiße ist, aber kein problem darstellt wenn man n backup gemacht hat und sowas wie den root explorer direkt auf'm homescreen hat um die vorgenommenen änderungen wieder rückgängig zu machen. nach erneutem reboot ist dann nämlich alles wieder wie vorher.

irgendwelche fragen? nein? sehr gut! :)
 
  • Danke
Reaktionen: JasonMason, Radagast, TH3LiONKlNG und 5 andere
Schöne Anleitung, ich pinne sie direkt oben an.
 
Ich bekomme bei Schritt 3 folgendes:

cmdaklqf.png


Ist das ein Problem?
 
ich denke mal schon, dass das ein problem ist...
aber ich frag mich wie das kommen kann wenn du dich wirklich stück für stück an die anleitung gehalten hast... der erste unterschied der mir spontan auffällt ist, dass bei dir der ordner "system mod" ein leerzeichen hat... auch wenn's abwegig ist, vielleicht kommt das apktool nicht mir leerzeichen im pfad klar...
alternativ die frage: ist das wirklich die originale SystemUI.apk, oder ist das eine die schon jemand anders gemoddet hat? wenn letzteres, dann dürfte das die ursache sein... der andere modder hat vielleicht deodexed, und das ist dann wieder ne ganz andere geschichte...
 
  • Danke
Reaktionen: jagwar
Ja, ich habe jetzt einfach weiter gemacht und die apk lässt sich nicht kompilieren.

Am Verzeichnis liegt es nicht und die Datei ist original 4.1.2, ohne jeglichen Eingriff.

Hat jemand änhliche Erfahrungen?
 
schau mal ob du diese datei damit entpacken kannst: http://daniel-perna.de/temp/ah/SystemUI.mod
(das ist meine gemoddete SysUI von ICS)... ich hab eben mein zip von hier plus diese mod runtergeladen, alles in ein verzeichnis gepackt und dann den befehl ausgeführt. und ich bin auf der arbeit an einem rechner wo sowas noch nie gemacht wurde. und es hat funktioniert. es muss also mit meiner mod-datei auch bei dir funktionieren. wenn's das nicht tut, dann ist dein pc doof... ^^
 
  • Danke
Reaktionen: jagwar
Mit der gehts problemlos. Ich denke auch es liegt eher am Inhalt, er findet bestimmte Sachen nicht.
 
spontane idee: framework-res.apk noch in denselben ordner packen.
oder lad' mal die SystemUI.apk irgendwo hoch wo ich sie dann runterladen kann. dann schau ich mal ob ich da was zustande bringe. :)
 
Bitte schön: hier war ein Link
Danke für die Mühe
 
Zuletzt bearbeitet:
So langsam wird komisch. Framework fehlt ja jetzt nicht mehr, aber File must be a directory?

fehler6jqww.png
 
ich muss jetzt mal eine doofe frage stellen wo finde ich auf meinem handy die systemui.apk
 
/system/app/SystemUI.apk
 
danke für die schnelle antwort aber entweder sehe ich den wald vor lauter bäuen nicht oder habe einfach nen schlechten tag ich finde nichts :D die apk befindet sich auf dem handy habe ich schon richteg verstanden oder ?

SORRY :D
 
Mit was schast du denn? Rootrechte hast du?
 
ahhhhhhhhhhhhhhhh vergesst alles was ich gefragt habe schäme mich!!!!!!!!!!!
zu blöd zum lesen steht ja alles drin
 
@jagwar

probier' mal die framework-res.apk mit'm apktool zu entpacken... selber befehl wie für's SystemUI.apk... dann entpackt er das genauso wie im tutorial die SystemUI.apk. es entsteht also auch n ordner mit dem ganzen kram drin. so findet's apk-tool dann hoffentlich alles was es braucht. :)

nachtrag:
hier ne gute anleitung was frameworks und so angeht... vielleicht hilft das auch weiter... :)
http://forum.xda-developers.com/showthread.php?t=1891686
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Der_Ulle und jagwar
Ich kopiere mir die dateien immer einfach auf die externe sd und von dort auf den laptop...da öffne (nicht entpacken) ich sie mit winrar, modifiziere und speicher (ohne kompression) sie wieder mit winrar...fertig...
 
Problem gefunden. Irgendwie hat er immer das falsche Framework benutzt. Jetzt mit dem richtigen JB Framework geht es!

Aber wenn ich das angegebene ändere entsteht kein Unterschied!

So sieht die JB Datei mit den geänderten Werten aus:

Code:
<?xml version="1.0" encoding="utf-8"?>
<com.android.systemui.statusbar.phone.PhoneStatusBarView android:orientation="vertical" android:id="@id/status_bar" android:background="@drawable/status_bar_background" android:focusable="true" android:fitsSystemWindows="true" android:descendantFocusability="afterDescendants"
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui">
    <ImageView android:id="@id/notification_lights_out" android:paddingLeft="6.0dip" android:paddingBottom="2.0dip" android:visibility="gone" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="fill_parent" android:src="@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" />
    <LinearLayout android:orientation="horizontal" android:id="@id/icons" android:paddingLeft="6.0dip" android:paddingRight="6.0dip" android:layout_width="fill_parent" android:layout_height="fill_parent">
        <TextView android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:gravity="left|center" android:id="@id/onsText" android:paddingLeft="1.0dip" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" android:maxLength="0" />
        <LinearLayout android:orientation="horizontal" android:id="@id/notification_icon_area" android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="1.0">
            <com.android.systemui.statusbar.StatusBarIconView android:id="@id/moreIcon" android:visibility="gone" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="fill_parent" android:src="@drawable/stat_notify_more" />
            <com.android.systemui.statusbar.phone.IconMerger android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/notificationIcons" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" />
        </LinearLayout>
        <LinearLayout android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/statusIcons" android:layout_width="wrap_content" android:layout_height="fill_parent" />
        <LinearLayout android:gravity="center" android:orientation="horizontal" android:id="@id/signal_battery_cluster" android:paddingLeft="2.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent">
            <include android:id="@id/signal_cluster" android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/signal_cluster_view" />
            <ImageView android:id="@id/battery" android:paddingLeft="4.0dip" android:layout_width="wrap_content" android:layout_height="wrap_content" />
        </LinearLayout>
        <com.android.systemui.statusbar.policy.Clock android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:gravity="left|center" android:id="@id/clock" android:paddingLeft="6.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" />
    </LinearLayout>
    <LinearLayout android:orientation="horizontal" android:id="@id/ticker" android:paddingLeft="6.0dip" android:animationCache="false" android:layout_width="fill_parent" android:layout_height="fill_parent">
        <ImageSwitcher android:id="@id/tickerIcon" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="@dimen/status_bar_icon_size" android:layout_marginRight="4.0dip">
            <com.android.systemui.statusbar.AnimatedImageView android:layout_width="@dimen/status_bar_icon_size" android:layout_height="@dimen/status_bar_icon_size" android:scaleType="center" />
            <com.android.systemui.statusbar.AnimatedImageView android:layout_width="@dimen/status_bar_icon_size" android:layout_height="@dimen/status_bar_icon_size" android:scaleType="center" />
        </ImageSwitcher>
        <com.android.systemui.statusbar.phone.TickerView android:id="@id/tickerText" android:paddingTop="2.0dip" android:paddingRight="10.0dip" android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_weight="1.0">
            <TextView android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker" android:layout_width="fill_parent" android:layout_height="wrap_content" android:singleLine="true" />
            <TextView android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker" android:layout_width="fill_parent" android:layout_height="wrap_content" android:singleLine="true" />
        </com.android.systemui.statusbar.phone.TickerView>
    </LinearLayout>
</com.android.systemui.statusbar.phone.PhoneStatusBarView>
 
@TrippleT
das geht wenn man grafiken austauscht... xml-dateien jedoch sind kompiliert... wenn man die nicht mit'm apktool verwertet sieht man keinen quelltext und muss dann den binären kram bearbeiten... das ist dann nicht mehr ganz so einfach würde ich behaupten... ;-)

@jagwar

merkwürdig... ich frag morgen mal meinen kollegen der auch android apps entwickelt wie man das element sonst noch modifizieren könnte um's auszublenden... komplett rausnehmen (also das textview) hat bei mir nicht funktioniert... vielleicht geht das bei dir... und ich frag halt was er machen würde... morgen abend weiß ich mehr... :)
 
  • Danke
Reaktionen: jagwar

Ähnliche Themen

A
Antworten
25
Aufrufe
5.875
Arkaner
A
F
Antworten
4
Aufrufe
2.594
wwallace1979
wwallace1979
F
Antworten
6
Aufrufe
4.508
docho
D
Zurück
Oben Unten