Well Im not great at directions so this is the best i can do.
Summary
There are 2 ways that I know to port a theme to your device.
1. Using the metamorph app if its a metamorph theme.
2. Using 7zip ect.. if its a flashable theme. (most common)
Metamorph Instructions
1. First things first is to download the theme that you want to port.
2. Your theme will be a zip file containing only image files from apk's
3. Put the zip file on your sd card
4. Make sure your device is set to 320x480 resolution or metamorph app will not work.
5. Open metamorph app and start a new project.
6. Locate your zip file and let all the apks load up.
7. Install each apk one at a time. Do not install any jar files as they will cause your phone not to boot.
8. Reboot and your Theme should be working on your phone.
Flashable Theme Porting Instructions
Its not that difficult, once you get the hang of how 7zip works it will be your best freind. Its just a process of dragging and dropping images from one apk to another all within 7zip.
What the metamorph app does is takes themed images and places them into the correct apks res\drawable folders in your system.
Knowing what metamorph does as an app, you can do this manually using 7zip.
1. Download the theme that you want to port. It will be a system folder with an app,framework, and font folder inside of it.
2. Open up that system folder with 7zip
3. Make a copy of the system folder of your current rom and open up that system with 7zip as well. You should now have 2 different 7zips open. Make sure to keep track of witch is witch.
4. Open up the app folder of the themed system and open up the first apk thats in there.
5. Go into the res\drawable folder in the apk in both your system and the themed system.
6. highlight and drag and drop only the images from that folder to the same folder in the other base apk. Make sure to NOT highlight any xmls.
7. Do the same for any images in any other drawable folders the are mdpi.
8. If there are only hdpi folders and no mdpi folders than you will have to convert those images to mdpi size before using them. If there are both, than only use the mdpi images.
9. When finished overwriting those images in that first apk, go back to the other apks in the app folder and do the same thing. You can do all of this from with in 7zip. No need to exit 7zip in this entire process.
10. Open up the themed framework folder and you will see a framework-res.apk file. Open up that file, you will see the same res\drawable folders.
11. Also open up the framework-res.apk from the base theme in the other 7zip as well. And overwrite the images just like the other apks making sure not to overwrite any xmls.
12. Back out of that back into the framework folder itself, if there is a services.jar in the theme than you will want to use overwrite that file as well.
13. Back out of the framework folder, If there is a fonts folder in the theme, You will want to overwrite those files as well.
14. Now you are done modifying your base theme with all the images from the theme.
15. You can now close the themed 7zip that you downloaded and leave open the 7zip containing you newly modified apks. Create a folder on your desktop called "system". Inside that, create a folder called "app", "framework", and "fonts"
16. Move only the modified apks that you replaced images in into the correct folders in your new system folder.
17. Make an androidupdate.tar with 7zip out of your new system folder and you are ready to flash it using nomorootfs method.
Tips:
Using the shift button to highlight mutiple images saves time.
Using the ctrl button to highlight images with xmls between them aaves time.
Switching views to have all images at the top and xmls at the bottom saves time.
If i forgot steps, I appologize.
Excellent guide.
The only thing I would mention is that most of the time services.jar is specific to a particular rom and as such may not work correctly with the target rom. As services.jar really only contains themed elements for the titlebar, you are better off using colorChanger's, apkTool or a hex editior to manually change the titlebar colors.
Also, in some cases (Like ProLauncher) the apk's must be signed. I prefer to use the test keys and this handy context menu here.
simple direct and effective. thanks again for all you do sir.
myn said:
Excellent guide.
The only thing I would mention is that most of the time services.jar is specific to a particular rom and as such may not work correctly with the target rom. As services.jar really only contains themed elements for the titlebar, you are better off using colorChanger's, apkTool or a hex editior to manually change the titlebar colors.
Also, in some cases (Like ProLauncher) the apk's must be signed. I prefer to use the test keys and this handy context menu here.
Click to expand...
Click to collapse
Thanks for the info man.
BTW, HAPPY BIRTHDAY MYN
Dzo Odex sample with standard theme
Thanks for this info. This will help a million. Could you also put light on how to odex it?
Eg: Dzo's odexed sample of donut has plastic theme, can it be changed to a standard android theme using the steps above and then odex it to create a androidinstall.tar?
Nice guide.
Thanks for making this.
Ill probably start trying to theme when i finish school in 2 weeks or so.
how to convert hdpi to mdpi
Hello,
little background. i know my way around ROM installation (changing Kernels,modems, installing themes etc.) and read about how to use apk manager.
one of the things i still can't figure out, and seems to me like the next step is modifiyng themes.
i am currently using Perception 10.2, with stock theme. i really like the paragon basic theme + few more icons and items from phoneix and other themes.
i wend ahead and decompiled framework-res.apk from all the themes, and tried to copy over the images from the paragon drawable-hdpi folder to the same folder in Perception.
importent note, i know that there might be an issue with editing a .9.png file, but i assumed copying over a file that works in another rom is acceptable.
hope some of you are still with me.. here is the catch... tried to Compile the apk... and errors...
here is a parital log:
--------
|Sat 01/22/2011 -- 17:23:37.28|
--------------------------------------------------------------------------
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)
'adb' is not recognized as an internal or external command,
operable program or batch file.
W: Could not find sources
I: Checking whether resources has changed...
I: Building resources...
libpng error: Read Error
ERROR: Failure processing PNG image Z:\F\kombinator work\android hack and hebrew\Developer\Tools\apk_manager_4.9\other\..\projects\framework-res.apk\res\drawable-hdpi\btn_zoom_down_disabled.9.png
libpng error: Read Error
ERROR: Failure processing PNG image Z:\F\kombinator work\android hack and hebrew\Developer\Tools\apk_manager_4.9\other\..\projects\framework-res.apk\res\drawable-hdpi\btn_zoom_down_disabled_focused.9.png
libpng error: Read Error
ERROR: Failure processing PNG image Z:\F\kombinator work\android hack and hebrew\Developer\Tools\apk_manager_4.9\other\..\projects\framework-res.apk\res\drawable-hdpi\btn_zoom_down_normal.9.png
libpng error: Read Error
ERROR: Failure processing PNG image Z:\F\kombinator work\android hack and hebrew\Developer\Tools\apk_manager_4.9\other\..\projects\framework-res.apk\res\drawable-hdpi\btn_zoom_down_pressed.9.png
libpng error: Read Error
ERROR: Failure processing PNG image Z:\F\kombinator work\android hack and hebrew\Developer\Tools\apk_manager_4.9\other\..\projects\framework-res.apk\res\drawable-hdpi\btn_zoom_down_selected.9.png
libpng error: Read Error
Click to expand...
Click to collapse
different error:
Z:\F\kombinator work\android hack and hebrew\Developer\Tools\apk_manager_4.9\other\..\projects\framework-res.apk\res\values\public.xml:3756: error: Public symbol drawable/zzzzz_tw_quickcontact_slider_grip_left declared here is not defined.
Z:\F\kombinator work\android hack and hebrew\Developer\Tools\apk_manager_4.9\other\..\projects\framework-res.apk\res\values\public.xml:3757: error: Public symbol drawable/zzzzz_tw_quickcontact_slider_grip_right declared here is not defined.
Click to expand...
Click to collapse
i hope someone can make sense out of this... i thought it would be a simple proccess, hope i did something wrong and it will be an easy fix...
Thank you so much for reading this far, your help will be appreciated!
Yossi
The problem you're having is with semi-transparent .9 files. The Android SDK png handler can't decompile them, so when you look at them in explorer they'll have a default image meaning they're corrupt.
The easiest way to deal with them is to not decompile and recompile.
PNG Only: With apk manager, take the original framework files from the ROM (or phone if stock) and drop them into place-apk-here-for-modding, then take the themed frameworks, rename them (something like framework-resParagon.apk) and drop those into place-apk-here-for-modding.
Select each one and extract (not decompile).
Open the drawable-hdpi folders side-by-side of the original and the theme, and drag (Copy) the ones you want to the original.
Then Zip the original and select System APK, and you're done. The reason this work is because the .9 files are still in their compiled state.
If you need to copy xml files, do this first, then the first step for png files: Decompile the two, copy the XML files, and recompile. Compiled XML files convert the png names to IDs which may be different between two roms. If you already have .9.png files that don't decompile, here's the fun part and I guess I'm doing all of this out of order, sorry...
Have an orginal apk decompiled with a different name, extract your modded apk, drag the drawable-hdpi out to say desktop, delete that project, decompile, drag the original decompiled drawable-hdpi into your modded one, and now you can edit/copy XML files and recompile. Then delete the project, extract, delete drawable-hdpi and drag the desktop drawable-hdpi to the project and zip it up. Done.
Or quick version.. 7zip helps.
right click the apk you want the images from, extract it.
right click open archive the apk you want the images in.
navage down to the folder that the images are stored in while in 7zip.
go back to the extracted folder and navagate down to the folder the images you want are in.
drag and drop them into the open archive 7zip window.
close archive
push
whiteguypl said:
Or quick version.. 7zip helps.
right click the apk you want the images from, extract it.
right click open archive the apk you want the images in.
navage down to the folder that the images are stored in while in 7zip.
go back to the extracted folder and navagate down to the folder the images you want are in.
drag and drop them into the open archive 7zip window.
close archive
push
Click to expand...
Click to collapse
CuriousTech said:
The problem you're having is with semi-transparent .9 files. The Android SDK png handler can't decompile them, so when you look at them in explorer they'll have a default image meaning they're corrupt.
The easiest way to deal with them is to not decompile and recompile.
PNG Only: With apk manager, take the original framework files from the ROM (or phone if stock) and drop them into place-apk-here-for-modding, then take the themed frameworks, rename them (something like framework-resParagon.apk) and drop those into place-apk-here-for-modding.
Select each one and extract (not decompile).
Open the drawable-hdpi folders side-by-side of the original and the theme, and drag (Copy) the ones you want to the original.
Then Zip the original and select System APK, and you're done. The reason this work is because the .9 files are still in their compiled state.
If you need to copy xml files, do this first, then the first step for png files: Decompile the two, copy the XML files, and recompile. Compiled XML files convert the png names to IDs which may be different between two roms. If you already have .9.png files that don't decompile, here's the fun part and I guess I'm doing all of this out of order, sorry...
Have an orginal apk decompiled with a different name, extract your modded apk, drag the drawable-hdpi out to say desktop, delete that project, decompile, drag the original decompiled drawable-hdpi into your modded one, and now you can edit/copy XML files and recompile. Then delete the project, extract, delete drawable-hdpi and drag the desktop drawable-hdpi to the project and zip it up. Done.
Click to expand...
Click to collapse
Thanks guys! i knew there should be a simple solution!
will try this soon. and post results!
Yossi
Also make sure to double check the sizes, the height and width my be different and give you issues if you copy and past the pngs
Sent from my SGH-I897 using XDA App
Also with 2.2.1 there's a problem with compressed apk files, so in apk manager, you need to set compression to 0. It's not a problem when dropping them into an apk with 7zip.
Different sized png files are usually the expanded notification bar switches. The darkness theme for example uses smaller ones. The size change is in twframework-res.apk/res/layout/status_bar_expanded.xml so those should be copied together (decompiled).
Another way to customize just 1 or a few .xml or .9.png files is to decompile the original, edit the xml or .9.png (with your modified one in mind), then compile. Then rip the compiled files from it and drop them into the themed one, assuming you already used the original the first time.
CuriousTech said:
Also with 2.2.1 there's a problem with compressed apk files, so in apk manager, you need to set compression to 0. It's not a problem when dropping them into an apk with 7zip.
Different sized png files are usually the expanded notification bar switches. The darkness theme for example uses smaller ones. The size change is in twframework-res.apk/res/layout/status_bar_expanded.xml so those should be copied together (decompiled).
Another way to customize just 1 or a few .xml or .9.png files is to decompile the original, edit the xml or .9.png (with your modified one in mind), then compile. Then rip the compiled files from it and drop them into the themed one, assuming you already used the original the first time.
Click to expand...
Click to collapse
so, double - checking that i understood...
method1: replacing images (same size) using copmpiled source and destination.
if i want to copy iver png's from one theme to another, i only decompress (or 7ZIP - open) the apk's - Replace the pics, and compress bacl (with compression set to 0).
method 2 : replacing images of different sizes
if the images are of different sizes, i should decompile both apk's, than i should copy the corrosponding XML from the new image's source, and drop in the original drawable directory, compile the apk, than copy over the image using method 1.
am i correct?
Thank you all for your help!!!
Yossi
In method 1, don't decompress it when using 7zip (or any other), just open the apk, drop the files in where they go, leaving the apk (zip) intact. If you extract the full apk, modify the files, and compress it back to a new apk it will lose the signature. That's what apk manager does when you zip it and select "system APK". It copies the signature from the original to the new one. Think of it like a zip comment. It's not a file, but a chunk of data attached to the zip that can't be copied from one zip to another.
Method 2: Too complicated. Just use method 1 to do as much as you can.
Whoever put the theme together originally did it incorrectly/lazily.
If you want to spend the time fixing it, then you need to decompile the same version of the .apk (the Samsung stock version, for example) and copypasta the themed one on top of it, while keeping the 1 pixel border.
One more question...or maybe two
when i decompile a framework-res.apk, i only get one drawable-hdpi folder.
if i open the apk using 7zip...i have a 2 folders: one is the same... and and another one that have this name: drawable-hdpi-v4
i replaced all the items i wanted in the drawable-hdpi folder..uploaded to the phone...and nothing happend... than i tried copying over some items to the drawable-hdpi-v4 foder..than i saw the changes.... the question is... do i have to copy the files to both follders? or just the drawable-hdpi-v4 folder?
another question tha poped into my mind right now, is it common that after i replace the framework-res.apk, my accounts data gets erased? (gmail account, facebook, etc)?
Thanks!
Yossi
Get the apktool in this thread and rename your old one just in case:
http://forum.xda-developers.com/showthread.php?t=864424&page=5
Oh, read the thread too. Good info!
The -v4 folders are higher resolution, or supposed to be. They take priority over the others, so if the image is only in drawable-hdpi it will be used, if it's in both the -v4 is used, or if it's only in -v4 it's used. I just leave the non-v4 alone, but it might save space to empty it, just scared to try.
You shouldn't lose account data though. That might indicate a problem. Not sure?
MikeyMike01 said:
Whoever put the theme together originally did it incorrectly/lazily.
Click to expand...
Click to collapse
I don't think the theme makers are to blame. Try decompiling a stock apk, then set the opacity of any .9.png to anything but 100%, draw9patch it again, then compile, then decompile and try to view that png. It's going to be damaged.
Well, it's actually easier to photoshop a compiled one, then remove the .9 and drop in draw9patch but you know what I mean.
I just don't think apktool can handle the extra info in a png.
NOTE: If you want to edit framework-res.apk or systemui.apk, follow this guide, it's the best available:good:
http://forum.xda-developers.com/showthread.php?t=2086771
Now, lets start
smali, dex....whaaat?
It's simple our odexed ROMs have .apk which use .odex files which contain cache. When the ROM is deodexed the .apk contains classes.dex which now contains information present in the .odex files!:good:
Smali is nothing but disassembled .dex file! The .dex file is disassembled into java code which can be edited via Notepad ++( simple notepad works too)
WHY?
Why do you need to edit classes.dex !
For me, i was trying to make CRT on/off animation which required editing classes.dex in service.jar!
More edits where classes.dex inside services.jar is needed
- Changing status bar clock color
- Changing text color in notification bar
- More? Tell Me!:highfive:
HOW?
Requirements: Java SDK!
I have APK Multi Tool, although it decompiles .apk and .dex files inside the apk, it doesn't provide option to decompile a separate classes.dex!
Still it's best software for decompiling apks and more!
Smali-Me 1.0
Download and Instructions:
http://www.wrapcode.com/android/baksmali-smali-dex-files/
ROM Tools by iamareebjamal - More noob friendly
http://forum.xda-developers.com/showthread.php?t=2163286
Once you have decompiled classes.dex, you'll get various folder with various files. Edit the files required and then recompile!
So after generating new classes.dex, put it back to services.jar by opening the file in winzip!:good:
ONE MORE THING
Make your own flashable zip
The recompiled systemui.apk or framework-res.apk, when pushed via root explorer give lot of force closes. This is normal, however if u wish to avoid it u can create a cwm flashable zip for the same!:good:
I'm attaching the sample.zip here and u can add your files in the specified folders. For more details read the source forum:
http://forum.xda-developers.com/showthread.php?t=1721680
Reserved- for more stuff!
Subscribed.. will see what it is later
Hey, add this to your guide, i far more easier and nice to look at too than smali me
http://forum.xda-developers.com/showthread.php?p=40435351#post40435351
There are alot of great resources here to get started theming, so I won't go into the basics here. This thread is a how-to structure a .ctz theme for Chameleon OS, a new ROM that uses a theme engine similar to MIUI. Theming for ChaOS is easy compared to the theme chooser, no xml mapping or any of that. It is very straight-forward.
So I will do my best not to overcomplicate it.
Someone is usually available for support on IRC Freenode #chameleonos
Theme structure
The Chameleon OS theme is made up of 3 components
1. Individual app or icon archives containing a res folder and a theme_values.xml
2. A description.xml that contains the basic info like theme name and author
3. Folders for Media
Archives
The Chameleon OS theme archives are for individual apps and an icon archive. They are labeled by app, for example, com.android.systemui, framework-res, com.android.settings, and so on.
The app archives contain a res folder and a theme_values.xml(if you are changing any values). The res folder will have subfolders for each resolution you are theming,i.e., drawable-hdpi, drawable-xhdpi, drawable-mdpi, drawable-nodpi and so on, your decompiled apk will show you what images go in which folder.
In addition: you can override framework images on a per-app basis. Simply include the framework images you want to override in the appropriate drawable-folder. This comes in handy for fixing text/background issues in individual apps, without having to re-theme the app. Simply add the backgrounds(or whatever) you want to change to the proper drawable folder and *BAM* its fixed. You have this option with theme-values also. Another way this comes in handy is because of the theme mixing feature, certain drawables are taken from framework for each app. Example: when someone mixes a dark status bar with a light framework, the proper notification backgrounds will show if you include them with the systemui archive.
The icons archive just contains the res folder and drawable subfolders containing the icons you are using with your theme.
Description xml
The description.xml is a xml file containing basic info that the Theme Manager uses. Here is an example:
Code:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<ChaOS-Theme><title>*</title><themer>*</themer><author>*</author><version>*</version><uiVersion>2</uiVersion></ChaOS-Theme>
Where you see * is where you enter the info for your theme, title, themer, author, version
Other folders for media(previews, ringtones, wallpaper, boot animation)
previews folder - contains screenshots that show up in the theme manager. Images are labeled as follows: preview_0.png, preview_1.png, ect. Also, you can specify an image for each category: preview_launcher_0.png, preview_statusbar_0.png, preview_contact_0.png, preview_icons_0.png, preview_mms_0.png.
You can have as many images as you want, just change the number at the end from 0 to 1,2,3, etc.
wallpaper folder - contains your default wallpaper labeled default_wallpaper.jpg or .png
ringtones folder - you can include a ringtone and a notification tone that can be applied with theme manager they should be mp3 format and are labeled as follows: notification.mp3, ringtone.mp3
boots folder - contains the bootanimation.zip you want to use with your theme
Theme_values
The Chameleon OS theme engine allows for the changing of many of the things found in the values folder of your decompiled apk: arrays, attrs, bools, colors, dimens, and strings.
Mostly themers just use colors to fix text readability issues, but all are available for your themes. In addition, the theme engine allows you to override framework values on a per-app basis. this allows you to correct text issues within a single apk, without impacting other apks that use the same value.
Example: Say I wanted to change the color value holo_blue_light to an orange color, in an apk.
File name - theme_values.xml
Code:
<?xml version="1.0" encoding="utf-8" ?>
<ChaOS_Theme_Values>
<color name="holo_blue_light">#ffff8800</color>
</ChaOS_Theme_Values>
You can include as many values as you like in between the <ChaOS_Theme_Values> and </ChaOS_Theme_Values>
This file goes with the res folder for your apk when making the archive.
Archiving the theme
This is important if you want your theme to work. I am using windows and winrar(zip format not rar) to archive. If you are on Mac or linux it may differ slightly
Select the res folder and theme_values.xml together, right-click->Add to archive. Name the archive appropriately, i.e. com.android.systemui
Repeat for each apk that you are theming.
Put all of your archives with the media folders and the description.xml and select all, right-click->Add to archive
Name your archive themename.ctz
Push to your device and apply then go back and do it 50 more times until it looks the way you want