Fragen zum selbsterstellen von Themes / Aendern von Icons

  • 19 Antworten
  • Letztes Antwortdatum
Benny1988

Benny1988

Erfahrenes Mitglied
118
Hey Theme'ler,
Ich hab' schon gegooglet nach 'nem Tutorial, wie man eigene Themes erstellt, aber leider nicht wirklich was gefunden. Auch die Anleitung hier im Forum, wie man einzelne Apps modifiziert, hilft mir nicht wirklich viel.
Hab's bisher lediglich geschafft, den Standard-Launcher farbig fuer mich - angepasst zum Theme 'DesignerX - zu veraendern. Allerdings auch nur die Standard-.png's, da ich bei den .9.png's echt nicht durchblicke. Hab' gestern mal testweise die .9.png's der GoogleSearchbar (enthalten in der Launcher.apk) farblich veraendert und durch den draw9patch des Android-SDKs gejagt. Die Suchleiste als Widget sah danach aus wie hingek**zt. Voellig misslungene Stretchung etc., obwohl's im draw9patch eig. recht normal aussah. Das mit Eclipse versteh' ich mal ueberhaupt nicht.

Noch dazu kam mir heute die - vllt. bloede - Idee, alle Icons die im Launcher zu seh'n sind (es sind 76 Icons) zu aendern. Wie bewerkstellige ich sowas? Die Icons der Standard-Apps (die im Ordner /system/app) finde ich, aber wo sind die der Market-Apps? Ich hab' zB. an erster Stelle im Launcher den 4PlayerReactor. Wo finde ich das Icon der App? Ist es ueberhaupt moeglich alle Icons zu aendern?
Wenn ich soweit alle Standard-Apps farblich anpassen wuerde, wuerde es naemlich ziemlich bloed ausseh'n, wenn die ersten, zB. drei, Icons angepasst sind, aber danach im Wechsel immer ein buntes App-Icon zu seh'n ist.

Ueber jede Hilfestellung bin ich sehr dankbar und verteile "Danke"-Klicks. :D

MfG Benny.
 
Die apps findest im Ordner data/app. Von dem Rest habe ich null Ahnung. ^^;;
 
  • Danke
Reaktionen: Benny1988
recynt schrieb:
Die apps findest im Ordner data/app. Von dem Rest habe ich null Ahnung. ^^;;
Danke, die hab' ich nun erstmal gefunden. :)
Bleibt nur noch der Rest zu klaeren. Und dann muss ich noch seh'n, ob ich das nicht mit Titanium Backup regeln kann, weil ansonsten sind die Market-Verlinkungen bzgl. der Updates auch verschwunden.

Wie signiere ich die Apps wieder, nachdem ich sie bearbeitet habe? Oder kann Titanium backup auch die bearbeiteten unsignierten Apps wieder einspielen? :confused:
 
Finntroll82 schrieb:
Was? Das signieren oder die Bearbeitung der Icons?
Und wieso wuerdest du's lassen? :(

EDIT:
OMG steht da viel. x.x Und dann auch noch alles in Englisch. :(
Wie wuerde es ausseh'n, wenn ich die in /system/app reinhau'? Dann nimmt der die als System-Apps oder wie?! Werden die dann automatisch wieder verschoben? Wahrscheinlich nicht, oder? Ich mag doch nur die Icons tauschen. :(
 
Zuletzt bearbeitet:
Benny1988 schrieb:
Was? Das signieren oder die Bearbeitung der Icons?
Und wieso wuerdest du's lassen? :(

Naja das eine führt zum anderen. Willst du wirklich jede App neu signieren? Zumal es ja auch nicht deine Apps sind. Und nach nem Update gehts wieder von Vorne los und die App muss bearbeitet werden.
 
Benny1988 schrieb:
Was? Das signieren oder die Bearbeitung der Icons?
Und wieso wuerdest du's lassen? :(

EDIT:
OMG steht da viel. x.x Und dann auch noch alles in Englisch. :(
Wie wuerde es ausseh'n, wenn ich die in /system/app reinhau'? Dann nimmt der die als System-Apps oder wie?! Werden die dann automatisch wieder verschoben? Wahrscheinlich nicht, oder? Ich mag doch nur die Icons tauschen. :(

In /system/app kannste reinhauen was du willst. Aber im Marktplatz werden die Apps dann nicht mehr als installiert angezeigt.
 
Finntroll82 schrieb:
In /system/app kannste reinhauen was du willst. Aber im Marktplatz werden die Apps dann nicht mehr als installiert angezeigt.
Naja, das werden die ja nach 'ner Neuinstallation ja auch nicht mehr?! Oder brauch's nach 'ner Aenderung inkl. Signierung und wieder zurueckschiebung in den /data/app-Ordner keine Neuinstallation? Bleiben die Apps eigentlich einfach so in dem Ordner und werden gar nicht grossartig entpackt, sondern immer erst bei Gebrauch?! Wenn Letzteres so waere, braeuchte man die ja nichtmal signieren, weil die Neuinstallation mit der Pruefung ja wegfallen wuerde, oder?!

Und zu dem Anderen:
Naja, jedes Mal das Icon auszutauschen waere nicht SO das Problem, zumal bei mir eh "nur" Apps drauf sind, wo es eher seltener Updates gibt. Ausserdem hat man nach 'ner Zeit bestimmt schon Routine im signen. :D
Wenn ich nur das ganze Englisch da so sicher verstehen wuerde, dass ich auch keinen Fehler machen wuerde, hachja... :(
 
Hattest Du mal hier reingeschaut?

https://www.android-hilfe.de/forum/...sehen-einer-apk-modding-einsteiger.23724.html

Ich werde das irgendwann eh mal erweitern, da das noch aus meinen "Anfänger" Zeiten stammt. Wenn Du .9pngs verändern willst, bleibt Dir nichts anderes übrig, als Dich mit draw9patch (im tools Ordner des SDK) und Eclipse auseinanderzusetzen. Das ist im obigen Thread auch beschrieben. Generell musst Du beim Markieren in draw9patch immer wissen, das links und oben verantwortlich ist für die Verzerrungen und unten sowie rechts für den Inhalt (z.B. Text). Wenn Du z.B. ein Textfeld mit Outline markierst, darfst Du natürlich nicht bis über die Outlines markieren, sonst strecken die sich mit bei grossen Feldern und sehen aus, wie eine schlecht geschminkte Frau :D

Genauso musst Du wissen, von wo nis wo Inhalte dargestellt werden sollen vertikal und horizontal. Du kannst dadurch z.B. bei einem Widget beeinflussen, an welcher Stelle Texte auftauchen können. Am besten schaust Du Dir mal die source pngs im SDK im Ordner platforms/android7/data/res/drawable-hdpi an, dort sind noch alle Markierungen sichtbar. Dann lernst Du schnell, wie die gemeint sind.

Es gibt natürlich dann für Fortgeschrittene noch feine Tricks. Bei neuen Formen muss ich natürlich immer den ganzen Weg gehen, aber es gibt auch immer einige Elemente, bei denen ich nur farben ändern will. Wenn ich die alle via draw9 patche (was ich bei meinen ersten themes gemacht habe), wirst Du irgendwann blöd, da es alleine in der framework über 100 9.pngs gibt. Da hilft dann aber dekompilieren mit dem apktool, welches die 9.pngs wieder in den source Zustand inkl. Marker versetzt. Dann kannst Du z.B. in Photoshop eine Farbe verändern, das als Aktion aufzeichnen und dann mit einer Stapelverarbeitung diese alle gesammelt anpassen. Dann musst Du diese anschl. nur noch in Eclipse patchen und schon ist extrem viel Zeit gespart im Vergleich zur traditionellen Methode. Das hilft mir bei ganz neuen Themes natürlich nicht komplett, da ich dann immer neue Formen und Widgets entwerfe, aber vor allem Farbvarianten (siehe DroidX und DroidX Blue) gehen so weit schneller.

Leider ist das beim Heavy Themen noch der einfachste Part - sehr lustig wird es in der Welt der xmls - auch da hilft apktool durch dekompilieren und Übersetzung in lesbaren Text. Vor allem werden auch die wichtigen resources mit aufgebrezelt und erst dadurch kann man wirklich tiefe Eingriffe vornehmen. Aber das würde jetzt zu weit führen...
 
  • Danke
Reaktionen: mista und Benny1988
Ich glaub', ich bin zu bloed dafuer...
Hab' nun Eclipse und Co. extra alles installiert etc. und dann mal testweise so vorgegangen wie du in deinem Thema (welches ich vorher schon las, ja). Zieh' ich Bilder darein, die ich, ohne dortige Veraenderung, durch den Draw9Patch gespeichert hatte, hab' ich nur Fehler in Eclipse. Veraender' ich das Bild allerdings und zieh' einmal rund rum so 'ne 1 Pixel breite schwarze Linie, speicher' und zieh's dann in Eclipse, hab' ich keinen Fehler. Aber nun hab' ich um das Bild rum 'nen schwarzen Rahmen. -.- :(

Siehe Anhang. Was mach' ich Falsch? :(
 

Anhänge

  • box_launcher_top_selected.9.png
    box_launcher_top_selected.9.png
    857 Bytes · Aufrufe: 691
Du darfst nicht rund herum markieren, das hast Du offensichtlich in PS und nicht draw9patch gemacht (wobei es in PS auch geht). Hier mal 2 Beispiele anhand des Tabs (erscheint z.B. in den KOntakt Tabs) und des kleinen Buttons:

Bei beiden reicht jeweils ein Punkt für die Verzerrung, da es keine extremen Verläufe oder Muster sind und ich beim Strecken im Zweifel den Farb Mittel Punkt gestereckt sehen will. Kann man aber theoretisch auch länger ziehen.

Bzgl. der Inhalte muss ich darauf achten, das z.B. der Strich rechts nicht ganz runter geht, da ich ja keinen Text mehr auf der Linie unten haben will. Beim Button sollte die Textmarkierung auch vor den Runungen aufhören, da es sonst zu Überlappungen kommen würde. Wichtig - wenn Du ein .9.png nicht markierst, motzt Eclipse zu Recht. Wenn Du generell mehr machen willst, würde ich Dir aber zum apktool raten, da dies Dir die apps dekompiliert und Du dann nicht mehr markieren musst, sondern nur noch in Eclipse patchen (allerdings darfst Du den farbwert 000000 der Markierungen bei Anpassen nicht verändern).

tab_focus.9.png
btn_default_small_normal_disable_focused.9.png
 
  • Danke
Reaktionen: Benny1988
Mit Photoshop hab' ich bisher noch gar nichts gemacht, die rundrum Markierung hab' ich mit Draw9Patch gemacht.
Also ein Punkt in der Mitte (links und oben) und ein Strich bis vor den Rundungen der jeweiligen Grafik sollten reichen?! Hab' ich dann nicht aber irgendwelche "BadPatches" (rote, transparente Rahmen ueber der Grafik)?
Generell mehr? Naja, ich hatte vor mir'n eigenes Theme zu machen, also ist das ja schon mehr, hm? :D Aber mich jetzt auch noch gleichzeitig in's apktool einzuarbeiten, waere mir gerade zu viel auf einmal. Dann mach' ich lieber 100+-Files "per Hand", wenn ich's denn mal hinbekommen sollte.
Aber nochmal zu den schwarzen Streifen...
Geh'n die dann wenigstens weg? Weil wenn ich 'ne .apk entpacke und mir die .9.png's dort anschaue, sind da nirgends schwarze Umrandungen, nur, wenn ich die mache und so mit dem draw9patch patche / abspeicher'. :(

Und noch 'ne Frage zum Eclipse:
Wenn ich die dann als unsignierte apk gespeichert habe, kann ich mir die Grafik ruhig aus der apk holen und in meine eigene apk reinschmeissen, oder muss ich mit Eclipse dann meine KOMPLETTE apk erstellen?! Ich mein', das geht ja schon ansich nicht, da ich die Grafiken bisher nur in schon vorhandenen Apk's austausche / austauschen moechte. Ich bin verwirrt. :eek::confused:

EDIT:
Hoehoe, ich grins' mir gerade Ein' auf's Ergebnis. :D Die schwarzen Rahmen geh'n weg nachdem ich's mit Eclipse als apk gespeichert und mir die Grafik wieder daraus geklaut hab'. Tooooll. :) Ich danke dir.

Jetzt muss ich nur nochmal meine Googlewidget-Suchleiste mit den .9.png's machen und testen, ob's nun auch wirklich "richtig" aussieht und nicht - wie sagst du noch gleich - wie 'ne ueberschminkte Frau. :D
 
Zuletzt bearbeitet:
Jetzt hab' ich ein Problem mit dem signieren. :(
Hab' gerade mal zum probieren mit TitaniumBackup 'nen Backup all meiner Apps gemacht. Zum Test hab' ich mir dann die .apk von eFile genommen, das Icon ausgetauscht, wieder zusammengepappt, auf's Milestone geschoben und wollte es mit der Restore-Funktion wieder installieren. "Konnte nicht installiert werden." Ja, kein Wunder, war ja noch nicht signiert. Wie signier' ich die veraenderte .apk nun?

Wollte 'ne komplett neue .apk in Eclipse machen, indem ich einfach den ganzen Inhalt der "alten" / originale .apk in das neue Projekt schmeiss' und dann als signierte .apk abspeicher'... Pustekuchen. Eclipse meckert schon, wenn ich die .xml's reinschiebe von wegen "not allowed content in blabla.xml"... Und nun? :eek::confused:

Ich denke mal, das liegt daran, dass die xml's verschluesselt sind?! Wie mach' ich die nun zu "Eclipse-konformen" xml's? Oder geht das irgendwie noch 'nen Schritt einfacher?

Och, soviele Probleme mit dem Zeugs, ey. Unglaublich. :(
 
Du brauchst Sie bei 2.1 nicht zu signieren, wenn Du nur pngs und xmls getauscht hast. Einfach mit permission 644 in system app, rebooten und gut ist.

Siegnieren musst Du nur, wenn Du die apk dekompilieren musstest z.B. mit apktool und dann wieder kompiliert hast. Selbst da kannst Du es Dir sparen, wenn Du anschl. die Meta-Inf und Android Manifest aus der Original apk reinpackst.
 
  • Danke
Reaktionen: Benny1988
Nee nee, ich wollte sie ja schon so wieder drin haben, dass ich im Market die Updates seh'n kann etc. dafuer muss ich sie signieren, weil TitaniumBackup sie sonst nicht restoren kann (alle 3 Methoden getestet), inkl. dem Market-Link. Hab' aber nun 'ne einfachere Methode gefunden die Apps zu signieren, dass ich sie inkl. Market-Link wieder mit TitaniumBackup restoren kann. :) Jetzt hab' ich also noch ca. 80 Apps uebrig. :D Super. x)
Aber danke trotzdem. :)
 
Dann ist ja fein - welches tool nutzt Du denn jetzt?
 
he_stheone64 schrieb:
Dann ist ja fein - welches tool nutzt Du denn jetzt?
Aeh, zum signieren? Einfach Auto-Sign. Hab' ich hier irgendwo in 'nem Beitrag gefunden, als google mich hierher leitete. Hab' mir ettliche Anleitungen durchgelesen zum signen. Hab' mir mit dem Keytool des Java JDK sogar 'nen Keystore angelegt. Mit dem Android-SDK in Verbindung mit Eclipse die Signation versucht. Mit dem Java JDK und dem jarsigner signiert (Laut Java erfolgreich, aber nicht brauchbar fuer Android). Bis ich schlussendlich zu dem Auto-Sign-Tool gekommen bin, wo man weder 'nen Keystore noch Sonstiges braucht. Haette mir DAS jemand vorher vorgeschlagen / mich drauf verwiesen, waeren mir einige Stunden erspart geblieben. :D

Hab' sogar, wo mir vllt. doch noch jmd. helfen koennte...
Die apk's auch dekompilieren lassen. Dabei ist 'nen extra Ordner rausgekommen mit 'ner Menge .smali-Dateien. Wollte die eig., fuer 'nen eigenes Theme, auch mal angucken - vllt. steig' ich ja da auch durch -, aber wie kann ich die bearbeiten? Muss ich die noch extra mal entschluesseln? Hab' das mit dem apktool gemacht, glaub' ich. Auf jeden Fall mit 'nem "decode" in der CMD-Zeile. Hab' hier immer Baksmali und Smali gelesen. Hab' mir das auch runtergeladen. Rausgekommen ist 'ne .jar-Datei. Wie oeffne ich das Programm nun? Wenn ich's in der CMD eintippse, dass der das oeffnen soll, kommt nur irgendwas mit "Befehl nicht gefunden" oder so Aehnlich. :eek:

Naja, vllt. findet sich dafuer ja auch noch jmd. der's mir erklaeren kann. :)

MfG Benny.
 
Hatte ich mir gedacht - nutze auch auto-sign, brauch es aber selten, das es für Themes nicht benötigt wird.

Wenn Du mit apktool dekompiliert hast, sind die smalis lediglich die dekompilierten files aus der classes.dex.

Hier mal ein XDA Auszug von stericsson zu dem Thema - viel Freude - smalis rocken :D

Edit - Du hast sicher mit apktool mit java -jar apktool.jar d deineapp.apk deineapp.apk-decoded dekompiliert (deineapp steht für den Namen deiner app wie z.B. launcher)

Nach dem kompilieren findest Du die Änderungen dann in der classes.dex

5. Smali Files

Commands for using smali and baksmali –



java -jar baksmali-0.93.jar -o <output directory> <.dex file, typically classes.dex>

For example: java -jar baksmali-0.93.jar -o out/rogers/dexout/ rogers-classes.dex

java -Xmx512M -jar smali-0.92.jar <output directory from above step> -o <name for new .dex output file>

For example: java -Xmx512M -jar smali-0.92.jar out/rogers/dexout/ -o new-rogers.dex

First smali file to edit \com\android\server\status\StatusBarIcon.smali


.line 46
const/high16 v6, -0x100
invoke-virtual {v4, v6}, Landroid/widget/TextView;->setTextColor(I)V


This is the change for the clock color. The -0x100 indicates black as the color, change this to:



const v6, -0x1


Where -0x1 indicates white. If you want to use colors, you can use HEX color codes, however the code in the small is 1’s complement of the RRGGBB code. I have provided a brief lesson in Hex, Binary and 1’s complement in Section 4.1

The following are located in \com\android\server\status\StatusBarService.smali


// date coloriput-object v7, p0, Lcom/android/server/status/StatusBarService;->mDateView:Lcom/android/server/status/DateView;
// ongoing coloriput-object v7, p0, Lcom/android/server/status/StatusBarService;->mOngoingTitle:Landroid/widget/TextView;
// latest coloriput-object v7, p0, Lcom/android/server/status/StatusBarService;->mLatestTitle:Landroid/widget/TextView;
// no notifications color
iput-object v7, p0, Lcom/android/server/status/StatusBarService;->mNoNotificationsTitle:Landroid/widget/TextView;
// roam text color
iput-object v7, p0, Lcom/android/server/status/StatusBarService;->mSpnLabel:Landroid/widget/TextView;
// network text color
iput-object v7, p0, Lcom/android/server/status/StatusBarService;->mPlmnLabel:Landroid/widget/TextView;


Above each of these lines you will want to add:


const v8, -0x1
invoke-virtual {v7, v8}, Landroid/widget/TextView;->setTextColor(I)V


Where -0x1 is giving it a white text property. Again, you can make this a color, given the instructions below.
xda-developers - View Single Post - How to use baksmali/smali?
Tips for editing smali xda-developers - View Single Post - Need help with services.jar
Stericson’s video tutorials on smali http://alldroid.org/threads/13647-How-to-Smali-Baksmali?p=512372#post512372
5.1. A lesson in 1’s complement

As stated above, the color codes in smali are 1’s complement Hex codes. This means they are in Hex, but we have to add some math to convert them to be able to use them.
You first start with the Hex color code you want to use. You will have to first convert your number into binary, instead of making you have to look that up, I have included tables below. You will then invert the binary digit (0 becomes 1 and 1 becomes 0) and then you will want to convert this back into Hex. This is the color you want to use in the smali file.


Hex
Code
Binary
Code
1’s
complement
binary
New
Hex​
0
0000
1111
F
1
0001
1110
E
2
0010
1101
D
3
0011
1100
C
4
0100
1011
B
5
0101
1010
A
6
0110
1001
9
7
0111
1000
8
8
1000
0111
7
9
1001
0110
6
A
1010
0101
5
B
1011
0100
4
C
1100
0011
3
D
1101
0010
2
E
1110
0001
1
F
1111
0000
0


To provide an example for you to follow, the Hex code I use is 0DA4F1 to convert this using the table,
· 0 becomes F
· D becomes 2
· A becomes 5
· 4 becomes B
· F becomes 0
· 1 becomes E
So we now have F25B0E, so your smali edit will become -0xF25BOE
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Benny1988
Aeh, danke fuer die Anleitung, klingt logisch... :D
Wofuer braucht man die Smali-Dateien? Weil ich raff' von dem, was da steht, nicht mal die Bohne. :D
xml's schoen und gut, aber smali? Ich denke nicht, nein. :D
Und ja, ich hab' mit dem Befehl da dekompiliert.

MfG Benny.
 
Du brauchst das z.B. um Farbwerte in den classes zu editieren, welche sich nicht in den xmls befinden. Ein Beispiel ist eben die classes.dex in der services.jar (auch wenn es dafür bekannterweise ja eine Abkürzung gibt), in der man u.a. Textfarben in der Statusleiste anpassen kann. Generell finden sich in den classes auch Bezüge, mit der z.B. styles definiert werden können.

Ich bin aber bei Dir - lieber Smarties als Smalis :D
 

Ähnliche Themen

O
  • obafemi-droid
Antworten
2
Aufrufe
1.056
TheSpiritof69
TheSpiritof69
AndroidMember
  • AndroidMember
Antworten
3
Aufrufe
1.116
segelfreund
segelfreund
A
  • anime
2 3
Antworten
43
Aufrufe
8.062
PeeWee
PeeWee
Zurück
Oben Unten