Related
I know that there are a good number of Atrix users who are new to android, new to theming with android, or like me - both. It can take hours to find the right information to make the changes that you want to make, only to find out that those types of changes are phone specific and that guide that you finally found after hours of searching doesn't even apply. I ask that all Atrix themers contribute to this thread with their knowledge, processes, and best practices for theming the Atrix. This way, we can share knowledge amongst each other as well as set up some accurate guide for other Atrix themers just getting started.
Contents:
Post 1 of this thread:
apk Manager Guide
Framework Assistant - tool to push/pull framework-res.apk
Editing OR removing the status bar clock color in services.jar
Post 2 of this thread:
Setting the notification dropdown shade to transparent
I'll start off with a post that I made yesterday in response to someone's question about apk Manager.
1. apk Manager Atrix Guide
The file I am going to discuss here is /system/framework/framework-res.apk. This file contains most of the elements involved in theming your phone. There are many other smaller locations to edit, but this file contains the bulk.
Before we get started on using apk Manager, we should understand a few things about framework-res apk. This file consists of a few important elements:
regular png image files - these are standard png images and can be edited with your image editing program and saved without any problems.
draw-9 png image files - these are special types of png images denoted by a .9.png in the filename. The android system reads these filenames and recognizes the image as a stretchable image. The system knows how to stretch the image based on a 1px wide border that the image has. This border contains black dots/lines along each of the four edges that tell the system how to stretch it - if you mess with this border then the way the image stretches will changes and you may not be able to decompile/recompile the apk. The following link provides info on editing draw-9s, but I found it easiest to extract them with apk Manager, edit in gimp without touching the border, and then recompiling with apk M. More info on draw-9 pngs
xml files - these files are in binary code in the framework-res.apk. The apk needs to be decompiled in order to return these to human readable code. Also, many of your xml files are hidden within the resources.arsc file in the framework-res.apk and cannot be accessed unless you decompile.
In order to make any changes to the xml files or the draw-9 pngs within framework-res.apk you need to decompile it rather than extract it. Extracting the framework-res.apk with a program like winzip simply unzips the file and does not break the code back down to an editable format. Decompiling the framework-res.apk with a program like apk Manager will actually break down the resources.arsc file into the sepereate xmls folders (values, etc.) and also restore the instructions border to draw-9 pngs.
Draw-9 images not edited correctly will not stretch properly in the system and may cause decompilation/recompilation errors. XML files not edited correctly may also cause recompilation errors. It is very important to pay attention to the log.txt file for any errors that may be occurring during your decompilation/recompilation process.
Download apk Manager
Now here is what I've learned about apk Manager:
put framework-res.apk in the place-apk-here-for-modding folder
run the script
enter 22 to select an apk, then 1 to select your apk
press 9 to decompile the apk
go into the projects/framework-res.apk/res/drawable-hdpi folder and edit your pngs or xmls (maintain the border)
go back to the script once your done editing and enter 11 to compile
when asked if it is a system apk enter y
when asked if you want to extract other files too enter y Do not skip this step, apk Manager will seem to produce a working framework-res.apk if you skip this step but when I did it soft bricked my phone
go into the keep folder that was created and delete any pngs that you changed in the projects folder
if you change any xml files, you will also need to delete the resources.arsc file from the keep folder (this is because mane of the xml files are compiled into this resources.arsc, so to tell apk manager to rebuild it with the new xml, we need to delete the original)
go back to the script and press any key to continue
your recompiled framework-res will be in the place-apk-here-for-modding as unsigned-framework-res.apk
extract unsigned-framework-res.apk using winzip, or similar program (this is being it is compressed incorrectly)
go into the folder where you just unzipped the framework and zip it up with the compression mode set to Store - call it framework-res.apk
you are ready to go with a properly editing framework-res.apk, put it on your phone any way you like
Make sure that you have no errors when de-compiling or re-compiling. It might seem like everything is going ok, but you could end up soft bricking your phone if you don't check the log.txt in the apk Manager main folder. Check the log.txt after every decompile and recompile to ensure that you don't have a damaged framework-res.apk.
The output in log.txt should like like this for a proper decompile:
Code:
--------------------------------------------------------------------------
|Sun 05/01/2011 -- 20:11:47.57|
--------------------------------------------------------------------------
java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode)
Could Not Find C:\Users\jbush\Documents\Custom Atrix\Programs\apk_manager_4.9\place-apk-here-for-modding\../place-apk-here-for-modding/signedframework-res.apk
I: Loading resource table...
I: Decoding resources...
I: Copying assets and libs...
And like this for a proper recompile:
Code:
W: Could not find sources
I: Checking whether resources has changed...
I: Building resources...
I: Building apk file...
(skipping index file 'C:\Users\jbush\Documents\Custom Atrix\Programs\apk_manager_4.9\other\..\projects\framework-res.apk\assets\images\Thumbs.db')
(skipping index file 'C:\Users\jbush\Documents\Custom Atrix\Programs\apk_manager_4.9\other\..\projects\framework-res.apk\assets\webkit\Thumbs.db')
The system cannot find the file specified.
If you get any errors about your images or xml then you need to fix them before you can recompile.
#framework-assistant2. Framework-res.apk Assistant
Here is a tool which I use regularly to pull the current framework-res.apk from my phone, as well as to push any updated framework-res.apk to my phone. To use this batch program you need to:
Download the View attachment 584667
Extract the zip to whereever you want the program to reside
To pull your current framework-res.apk - run the Framework-Assistant.bat and tell it to pull
To push an updated framework-res.apk - place the updated framework-res.apk in the bin/push folder, run the Framework-Assistant.bat and tell it to push the updated framework-res.apk
It is always a good idea to tell it to back up the current before pushing a new
As with any and all framework-res.apk pushes, this has the ability to soft brick your phone depending on the framework-res.apk you push, or anything else for that matter. Use at your own risk.
Here are my steps to edit framework-res.apk from start to finish which might help those unfamiliar with the process:
Run Framework-Assistant.bat and answer y to pull the current framework-res.apk from the phone, but n to push the latest version (this will simply retrieve the current framework-res.apk from your phone)
Copy that framework-res.apk from the Framework Assistant/bin/pull fodler into the place-apk-here-for-modding folder of apk Manager
rename framework-res.apk to something distinguishable, I add the current time (ex: framework-res-1016.apk). Trust me, things can get messy if you end up making a few passes with different edits, you need to keep your stuff straight.
Run Script.bat in the apk Manager folder, 22 to select which apk to use, then 9 to decompile
Go into the projects/framework-res-1016.apk folder and make any changes you wish. Most png changes will be in drawable-hdpi, xmls are pimarily located in the values and layout folders.
Once I've finished making updates, run Script.bat again, 22 to select the proper apk, then compile with 11 - follow all compilation steps above all the way through zipping it as store.
Place the new framework-res.apk in the Framework Assistant/bin/push folder and run Framework-Assistant.bat
Choose y to both pull and push the framework-res.apk (I find its always a good idea to pull your latest working framework-res.apk from the phone before dropping a new one in)
If you anticipate more edits, go back to apk Manager and paste the new framework-res.apk in the place-apk-here-for-modding fodler of apk Manager and rename it with the current time attached (ex: framework-res-1023.apk)
Delete the unsignedframework-res-1016.apk and the unsignedframework-res.apk fodler (just to keep things clean)
You now have an edited framework-res.apk on your phone and are set to fix this little issues you missed on this pass, just run the apk Manager Script.bat again, enter 22 to access your latest framework-res.apk (framework-res-1023.apk) and repeat the process.
#framework-assistant3. Editing OR removing the status bar clock in services.jar
You will need:
Some zip program, I use winrar
JDK - Java Development Kit Get the JDK
baksmali to decompile and recompile the classes.dex file - View attachment baksmali.zip
Notepad++ free editor for code editing (I recommend this program for any/all code editing, apart from hex)
Here is how to change the status bar clock color:
Install the JDK
Extract baksmali to your computer
Retrieve services.jar from the /system/framework folder
Extract services.jar using your zip program (right click on the file and choose to extract)
One of the extracted files is classes.dex, copy it into the baksmali folder
Run decompile.bat in the baksmali folder - this will decompile classes.dex and place the contents in a new folder called classout
Navigate to classout\com\android\server\status
The next step involves changing clock color:
open StatusBarIcon.smali with Notepadd++ and find this entry
Code:
.line 61
const v6, -0x1
invoke-virtual {v4, v6}, Landroid/widget/TextView;->setTextColor(I)V
const v6, -0x1 identifies the color of the status bar clock. I changed this value to "const v6, -0xff000000 to set my clock to black. Essentially the last 6 digits of this entry will determine the color of the clock. Set the last six to any html color code (google it) to set your clock color. I have only tried black here as it is all I needed, so I can't personally guarantee that anything else will work.
The next step involves removing the clock:
open StatusBarPolicy.smali with Notepadd++ and find this entry
Code:
invoke-direct {p0}, Lcom/android/server/status/StatusBarPolicy;->updateClock()V
It should be under ".line 592", now add this line underneath the line just mentioned:
Code:
invoke-virtual {p2, v3, v6}, Lcom/android/server/status/StatusBarService;->setIconVisibility(Landroid/os/IBinder;Z)V
Once your done editing, save the file
Navigate back to the baksmali folder and run recompile.bat - this will rename the original classes.dex file to orig-classes.dex, and the recompiled file is saved as classes.dex
Zip up the new classes.dex along with the META-INF folder that was extracted from services.jar as, you guessed it, services.jar Leave the compression setting on Normal
Put services.jar back in your system/framework folder
This is all that I know how to do with servies.jar right now, if anyone has some additional good info please post it to this thread and I will add it on.
Can't believe I forgot to thank all those who have contributed both directly and indirectly to my knowledge thus far: Nottach, NyugenHuu, KennethPenn, riral, tonecreationz, gera4eva, HFHimself, and many random threads I found on the wonderful xda forums.
1. Setting the notification dropdown shade to transparent
Instructions:
Download Baksmali Tool - directions for use are at the end of post 1
Open the services.jar file for example with winzip, 7z, winRar, or whatever. Unzip the classes.dex file into the folder with decompile.bat and recompile.bat from the Baksmali Tool zip.
Run decompile.bat - this will decompile classes.dex into a new folder called classout folder. Browse to classout/com/android/server/status and open the file called StatusBarService.smali with a text editor like notepad.
Search for "const/4 v5, 0x2", it should be under ".line 1629". Just change this to "const/4 v5, -0x3" and save the file.
Run recompile.bat - this will recompile the classout folder into classes.dex and rename the original file to orig-classes.dex
Open again the services.jar file with any zip tool and overwrite the classes.dex file with the one just created.
Now search the drawable-hdpi/status_bar_background.png file in the framework-res.apk and make it transparent.
Push the updated framework-res.apk and services.jar back to the /system/framework/ directory on your phone.
- credit for this info goes to tonecreationz
Much more information is available from The Ultimate Android Themeing Guide By Jairomeo, Manup456, ArmyRanger251, Stericson, Brandenk, SirMez, Beagz, david1171_ - link provided by nottach
the resources file was never rebuilt after it gets recompiled after I delete it from the keep folder. does yours?
Yes, if your resources.arsc is not being rebuilt then it means that you have errors in your process. Post the contents of your log.txt here.
jimbush3 said:
Yes, if your resources.arsc is not being rebuilt then it means that you have errors in your process. Post the contents of your log.txt here.
Click to expand...
Click to collapse
There is a ton of errors. I think reason could be because of the way the original framework was built? i am using gingerblur as a base. Here is my log: http://conceptvisionz.net/uploader/images/log.txt
After I delete the files from the keep folder, they're never replaced w/ my new files when the apk is compiled. What happened??
NguyenHuu said:
There is a ton of errors. I think reason could be because of the way the original framework was built? i am using gingerblur as a base. Here is my log: http://conceptvisionz.net/uploader/images/log.txt
Click to expand...
Click to collapse
Problems start here for you:
Code:
W: Cant find 9patch chunk in file: "drawable-hdpi/statusbar_background.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "drawable-hdpi/title_bar_portrait.9.png". Renaming it to *.png.
I: Copying assets and libs...
W: Could not find sources
I: Checking whether resources has changed...
I: Building resources...
libpng error: Read Error
ERROR: Failure processing PNG image C:\Android\tools\apk_manager\other\..\projects\framework-res.apk\res\drawable-hdpi\statusbar_background.9.png
libpng error: Read Error
ERROR: Failure processing PNG image C:\Android\tools\apk_manager\other\..\projects\framework-res.apk\res\drawable-hdpi\title_bar_portrait.9.png
statusbar_background and title_bar_portrait are not proper draw-9 pngs. You will need to fix these before you can recompile. This error will keep apk Manager from using anything in your projects folder when it compiles.
Here are valid pngs for those two images. If you are unable to fix yours, try replacing your with these in the projects/framework-res.apk/res/drawable-hdpi folder and then try to compile again.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
- statusbar_background.9.png
- title_bar_portrait.9.png
calvin398 said:
After I delete the files from the keep folder, they're never replaced w/ my new files when the apk is compiled. What happened??
Click to expand...
Click to collapse
Check your log.txt, chances are that there are some draw-9 pngs that are causing apk Manager to fail its processes. Post the log here if you would like me to look at it.
jimbush3 said:
Problems start here for you: statusbar_background and title_bar_portrait are not proper draw-9 pngs. You will need to fix these before you can recompile. This error will keep apk Manager from using anything in your projects folder when it compiles.
Here are valid pngs for those two images. If you are unable to fix yours, try replacing your with these in the projects/framework-res.apk/res/drawable-hdpi folder and then try to compile again.
View attachment 584896 - statusbar_background.9.png
View attachment 584897 - title_bar_portrait.9.png
Click to expand...
Click to collapse
Thanks, I am still experimenting with it. I manage to recompile fine now. Reading logs really does help. I manage to get my menu to show the color I want. Now just need to work on the secondary menu when when you press more. It is tricky because the main menu popup you can use standard color codes #ff808080 is the gray I used and works fine. But for the secondary menu you cant use color codes, it fails compilation.
EDIT: so i finally got it to work (the secondary menu) but adding in textColor and remove text appearance item.
So for main popup bottom menu, this is the field to edit: TextAppearance.Widget.IconMenu.Item, change the textColor directly to a color of your choice in this format #ffffffff (white), mines is #ff808080 (dark gray).
For the secondary menu for areas that has a "more", find this field: Theme.ExpandedMenu, and just add in a textColor entry. You can copy and paste the one from TextAppearance.Widget.IconMenu.Item. remove the text appearance item.
3 days work finally solved, thanks everyone. Now the theme is a bit more flush with certain third party apps.
NguyenHuu said:
Thanks, I am still experimenting with it. I manage to recompile fine now. Reading logs really does help. I manage to get my menu to show the color I want. Now just need to work on the secondary menu when when you press more. It is tricky because the main menu popup you can use standard color codes #ff808080 is the gray I used and works fine. But for the secondary menu you cant use color codes, it fails compilation.
Click to expand...
Click to collapse
Nicely done and thanks for the guides, we need more of that.
jimbush3 said:
Where are you editing to change the colors displayed? I'm not sure what secondary menu you are referring to.
Click to expand...
Click to collapse
i got it, look at my posted, i edited above.
I've been able to track down most of the colors that I want to adjust in the xml files, however I cannot seem to find where the corporate email is getting its color from. The image below shows the white text that I can't find out how to change. Had anyone been able to locate the source for this?
Also, does anyone know where to edit the clock in the status bar's color?
jimbush3 said:
Also, does anyone know where to edit the clock in the status bar's color?
Click to expand...
Click to collapse
yeah it's in services.jar, http://forum.xda-developers.com/showthread.php?t=549309
Thanks Nguyen, I had actually decompiled the classes.dex from services.jar a little while back; but without a guide I had absolutely no idea what I was looking at. Its a bit more complicated than framework-res. Once I get in there and make the changes I'll add something about editing services.jar to the first post of this thread.
Look for the .line 61
The below changes it to green from white
Code:
.line 61
const v6, -0x1
to
.line 61
const v6, 0xFF4CFF00
0xFF4CFF00 - wouldn't a straight white be 0xFFFFFFFF?
I'm coming from an html background and through all the xml edits I've done and whatnot, the white color code is FFFFFFFF. So, to go to black my code should be 0xFF000000, right?
**edit, actually I just threw that second code you posted, 4CFF00, into gimp and it gave me a bright green. Maybe you meant the bloew code changes from white to green?
jimbush3 said:
0xFF4CFF00 - wouldn't a straight white be 0xFFFFFFFF?
I'm coming from an html background and through all the xml edits I've done and whatnot, the white color code is FFFFFFFF. So, to go to black my code should be 0xFF000000, right?
**edit, actually I just threw that second code you posted, 4CFF00, into gimp and it gave me a bright green. Maybe you meant the bloew code changes from white to green?
Click to expand...
Click to collapse
I worded it weird. Guess I shouldve said from white to green instead of to green from white.
jimbush3 said:
0xFF4CFF00 - wouldn't a straight white be 0xFFFFFFFF?
I'm coming from an html background and through all the xml edits I've done and whatnot, the white color code is FFFFFFFF. So, to go to black my code should be 0xFF000000, right?
**edit, actually I just threw that second code you posted, 4CFF00, into gimp and it gave me a bright green. Maybe you meant the bloew code changes from white to green?
Click to expand...
Click to collapse
yeah that would be white all Fs. The first two FFs control alpha, while the ohter 6 are just like html hex colors.
I got in there today and blacked out my clock, thank you both for the help. I've also added the steps and some useful tools to the first post for editing the status bar clock.
I'm so damn close to having my phone the way I want, for this week at least, but I've run into a new snag and don't know where to look yet. I edited the following code in styles.xml:
<item name="windowBackground">@drawable/screen_background_dark</item> under <style name="Theme">
and I changed it to @drawable/menu_bg, which referenced a background image I created and replaces the screen_background_dark which points to the black color in the drawables.xml file. For the most part this works perfectly, as seen here:
The only problem is, and this really is the only one I've found, is my alarm settings screen:
If I change that one value back to black then the alarms screen show up perfectly fine, black background, white alarm text, etc. I'm not ever sure where to start to look for the solution to this one. Maybe I should just sleep:
HOW TO THEME SAMSUNG ROMS (GALAXY 3 MAYBE OTHERS)
Hello guys. I have had many requests to do this so here it is.
Let' s just get started.
NOTE : - THIS GUIDE CONTAINS VARIOUS METHODS WHICH I PERSONALLY USE TO THEME. THERE ARE SOME OTHER DIFFERENT WAYS IN WHICH YOU CAN DO THIS.
WHAT ALL YOU NEED TO THEME??
APK Manager 5.0.2 : - Will be used for decompiling/compiling frameworks. Please don' t use the new version APKMulti-Tool 1.0.1 for now..
APKTool : - This you need to place in your \windows\ folder.
Java SDK : - This is necessary for the decompiling/compiling process. Also required in many patches for frameworks.
GIMP : - This is the image editing software which we are going to use to edit/resize PNGs.
Android SDK : - Again not of much use in this guide but always good to have for learning.
WinRAR : - This will be used for opening the APKs for adding PNGs after editing.
Notepad++ : - This we will use for opening the various XML/smali files for editing code.
Unedited base framework : - Its necessary that its unedited because it may lead to errors(like error compiling .9.PNGs)
Hex Colours : - You' ll need hex colour values for using them in various XMLs. This here is a nice website for that.
Lots of patience : - Now this skill you have to develop on your own.
HOW TO SETUP EVERYTHING FOR MAKING/PORTING THEME??
1) Download APK Manager 5.0.2(Not APK Multi Tool 1.0.1) from the above mentioned link. Extract the contents to any of your drives.
2) Download APKTool (Main program as well as the dependancies for you respective OS). Extract both the .tars contents to :\windows\.
3) Download the latest version (7u2 currently) of JDK(Java SDK) from the site mentioned above and install it.
4) GIMP, Notepad++ : - Download from above mentioned site and install them.
5) WinRAR : - I guess you should be able to get this on your own.
6) Unedited base framework : - If you already have then good. If you don' t then please download from above link.
7) Android SDK : - Download either the zip or .exe from above mentioned site and set it up accordingly. (Note : - This step can be skipped)
CHECK WHETHER THE FRAMEWORK YOU HAVE IS COMPILE-ABLE (UNEDITED) OR NOT.
Before starting, always check. For this, place the framework-res.apk in \apkmanager\place-apk-here-for-modding\. Now start the script. Select Option 22(Set current project) and then select the project. Then select Option 9(Decompile apk). Let it decompile. After that, select Option 11(Compile apk). Select "YES" for "Whether it is system app". Select "YES" for "Whether you want to include original files". Let it compile.
If the compilation process goes smoothly without any errors, then you have the correct(unedited) framework which can be used for theming.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
EDITING VARIOUS XMLS : -
For information purpose, if you want to know what is an XML, then here is a nice read.
Decompile first : -
Place your framework-res.apk(should not be renamed after decompiling, so please rename before only) in the folder place-apk-here-for-modding. Start up script and decompile it(option 9). After decompiling, goto Projects folder. You will find your decompiled framework there.
Similarly, using the above method, decompile your twframework-res.apk(should not be renamed after decompiling, so please rename before only).
If you are porting a theme, then decompile the framework-res.apk and twframeowrk-res.apk from the theme to be ported also.
1) Editing Notification colour in notification drawer.
Files to be edited : - status_bar_latest_content_event.xml in \projects\framework_name\res\layout\.
* Goto \projects\framework_name\res\layout\.
* Open status_bar_latest_content_event in Notepad++.
* You will find 3 lines for editing the colour of the notifications.
1) android:id="@id/title". This is the title of the notification
2) android:id="@id/text". This is the description of the notification.
3) android:id="@id/time". This is the time of the notification
*Edit HEX value for "android:textColor" instance for the 3 above lines as per your likings. Or if you are porting from a theme, then just open the same XML file(i.e. status_bar_latest_content_event) of theme which you are porting in Notepad++ and copy paste the various HEX values to XML in your framework.
2) Colour of horizontal progress bars : -
Files to be edited : - progress_horizhontal.xml in \projects\framework_name\res\drawables\.
* Goto \projects\framework_name\res\drawables\.
* Open progress_horizontal in notepad++.
* The progress bar uses 3 colours to set the colour which goes from top to bottom. You have to set three colors: start, end and middle.
1) <item android:id="@id/background"> is for the unused part of the progress bar.
2) <item android:id="@id/progress"> is for the used part of the progress bar.
* Edit all the HEX values as per you linkings. Or if you are porting from another theme, then just open the same XML file(i.e. status_bar_latest_content_event) of theme which you are porting in Notepad++ and copy paste the various HEX values to XML in your framework.
3) Changing secondary font colour : -
Files to be edited : - zzz_tw_secondary_text_sub.xml in \projects\framework_name\res\color\
* Goto \projects\framework_name\res\color\.
* Open zzz_tw_secondary_text_sub.xml in notepad++.
* Look for the following instance,
Code:
<item android:state_window_focused="false" android:color="#HEXCOLOR_VALUE" />
<item android:color="#HEXCOLOR_VALUE" />
* Replace the HEXCOLOR_VALUE that is already there with the one of your choice.
* Note : - The default colour is blue in Samsung ROMs. Hex value #FF81BEE1.
4) Setting menu text colour to white in menus for black background : -
Files to be edited : - styles.xml in \projects\framework_name\res\values\.
* Goto \projects\framework_name\res\values.
* Open styles.xml in notepad++.
* Press CTRL+F and search for "TextAppearance.Widget.IconMenu.Item".
* The searched part will be like as shown in the following : -
Code:
<style name="TextAppearance.Widget.IconMenu.Item" parent="@style/TextAppearance.Small">
<item name="textColor">[B]?textColorPrimaryInverse[/B]</item>
</style>
**Change the above code to as shown below : -
Code:
<style name="TextAppearance.Widget.IconMenu.Item" parent="@style/TextAppearance.Small">
<item name="textColor">[B]@color/bright_foreground_dark[/B]</item>
</style>
* Then for text colour in "MORE" menu lists, press CTRL+F and search for "Theme.ExpandedMenu".
* The searched part will be as shown in the following : -
Code:
<style name="Theme.ExpandedMenu" parent="@style/Theme">
<item name="listViewStyle">@style/Widget.ListView.Menu</item>
<item name="windowAnimationStyle">@style/Animation.OptionsPanel</item>
<item name="background">@null</item>
<item name="itemTextAppearance">[B]?textAppearanceLargeInverse[/B]</item>
<style>
** Change the above code to as shown below : -
Code:
<style name="Theme.ExpandedMenu" parent="@style/Theme">
<item name="listViewStyle">@style/Widget.ListView.Menu</item>
<item name="windowAnimationStyle">@style/Animation.OptionsPanel</item>
<item name="background">@null</item>
<item name="itemTextAppearance">[B]?textAppearanceLarge[/B]</item>
<style>
5) Adding 1 percent battery mod to theme : -
Files to be edited : - stat_sys_battery.xml and stat_sys_batery_charge.xml in \projects\framework_name\res\drawable\.
* Goto \projects\framework_name\res\deawable\.
* Open stat_sys_battery.xml in notepad++. If there are no drawable values for 1% batterymod PNGs then, delete everything in that XML and copy paste the following code : -
Code:
[URL="http://pastebin.com/qRMqS2sy"]Click here for the pastebin data[/URL].
* Now open stat_sys_battery_charge.xml in notepad++. Check if there are drawable values for 1% battery mod. If there isn' t, then delete everything in that XML and add the following link : -
Code:
[URL="http://pastebin.com/pUxknPci"]Click here for the pastebin data[/URL].
6) Provider, Carrier, Ongoing-Title, Notifications-Title, Clear-Button, noNotificationsTitle : -
Files to be edited : - status_bar_expanded.xml in \projects\twframe_name\res\layout\
* Goto \projects\twframe_name\res\layout\.
* Open status_bar_expanded.xml in notepad++.
* Search for the lines : -
1) android:id="@id/plmnLabel". This is the Carrier name.
2) android:id="@id/spnLabel". This is the Provider name.
3) android:id="@id/ongoingTitle". This is the Ongoing-Title.
4) android:id="@id/latestTitle". This is the Notifications-Title.
5) android:id="@id/clear_all_button". This is the text of the Clear-Button.
6) android:id="@id/noNotificationsTitle". This is the text when no notification is displayed
* For each of the IDs above, there will be attribute android:textColor="<HEX_VALUE>". Edit the hex value as per your requirement. Or if you are porting from another theme, then just open the same XML file(i.e. status_bar_expanded) of theme which you are porting in Notepad++ and copy paste the various HEX values to XML in your framework.
7) Colour of the text when the text fiels is selected : -
Files to be edited : - styles.xml in \projects\framework_name\res\values\.
* Goto \projects\framework_name\res\values\.
* Open styles.xml in notepad++.
* Press CTRL+F and search for "<style name="TextAppearance">". There you will find "textColorHighlight" attribute just below.
* Change the HEX value for the attribute as per your requirement.
HOW TO COMPILE THE .APK BACK
Well here comes the big part. The part which usually causes the problems. You should consider the following points for this. The compilation process will go smoothly only if : -
You have not resized, replaced any .9.PNGs in the decompiled framework. If you want to you will have to do as I have described below in second post or else you will get compile errors. Lots of them.
You have not added any extra lines in XMLs which redirect to the PNGs(drawables) in the framework. If you have, make sure you have added the extra PNG to the framework as well.
**HOW TO COMPILE USING APKMANAGER : -
After you have made all the necessary edits to the framework, open up the script again.
Select option 22 and the select the project which you want to compile.
Then select option 19(Compression level for APKs) and select 0 for that.
You should see the compression level and the name of the project displayed above in the first line of the window.
After all that, select option 11(Compile APK). Select "Y" when it asks if its system APK. Select "Y" if it asks to include original files from APK or not.
Let it build the APK. If it builds successfully, then the most difficult part is finished.
[*]Minimize the script for a while. You will see a new folder named as "keep". Go to this folder and delete all the XMLs and the PNGs that you have edited. Don' t worry about the XMLs that you had edited in "values" folder. And also delete "resource.arsc" from the keep folder (Only if you have edited XMLs).
After you have done all that, maximize the script and press enter. Let it compile.
You will see your new compiled APK in the folder "place-apk-here-for-modding" in the form of unsigned<FILE_NAME>.
THIS WILL BE CONTINUED. STILL SOME MORE LEFT.
THEMING RELATED WITH PNGs
1) Popups :-
Figure 2.1
Present in : - framework_name\res\drawables-mdpi\
Name of the PNGs are : -
popup_bottom_bright.9.png
popup_bottom_dark.9.png
popup_bottom_medium.9.png
popup_center.dark.9.png
popup_center_medium.9.png
popup_full_bright.9.png
popup_top_bright.9.png
popup_top_dark.9.png
Please note that these are .9.PNGs. And they need to be .9.PNGs only. Normal PNGs will not work.
How to port from another ROM : - These .9.PNGs don' t require porting usually. Just take it from the theme you are trying to port and place it in your \res\drawable-mdpi\ folder using WinRAR.
Note : - This is to be done after you have completed editing and compiling the APK. Using WinRAR.
2) Backgrounds of menus : -
Figure 2.2
Present in : - framework_name\res\drawable-mdpi : -
Name of the PNGs are : -
menu_background.9.png : - This the background for one grid element.
menu_background_fill_parent_width.9.png : - This is the background of the whole grid element.
menu_more_bg.9.png : - The background of the menus when you select "More" menu.
menu_separator.9.png : - The separators(grid lines) between the various menus.
Please note that these are .9.PNGs. And they need to be .9.PNGs only. Normal PNGs will not work.
How to port from another ROM : - These .9.PNGs don' t require porting usually. Just take it from the theme you are trying to port and place it in your \res\drawable-mdpi\ folder using WinRAR.
Note : - This is to be done after you have completed editing and compiling the APK. Using WinRAR.
3) Notification bar and notification background(All related PNGs) : -
Figure 2.3
First six PNGs present in : - framework_name\res\drawable-ldpi except divider_horizontal_bright which is in framework_name\res\drawable-mdpi.
Last six PNGs present in : - twframe_name\res\drawable-ldpi or drawable-mdpi.
Names of the PNGs are : -
statusbar_background.9.png : - Can be a normal or a .9.PNG. Preferably a .9. As its black in most themes, no need to port. But if you want to you will have to follow method described below(Give me some time for the method).
status_bar_item_background_normal.9.png : - Background of the notifications on statusbar in idle condition. If you want to you will have to follow method described below.
status_bar_item_background_pressed.9.png : - Background of the notifications on the statusbar when the notification is selected. If you want to you will have to follow method described below.
divider_horizontal_bright.9.png : - The line which divides the notifications. Can be copied directly from the theme to be ported.
stat_sys_battery_[XX] : - These are the battery PNGs during normal use. Where [XX] refers to number between 0 and 100.
stat_sys_battery_chargeanim[XX] : - These are the battery charging PNGs. Here [XX] refers to a number between 0 and 100.
Other status bar PNGs : - All of them are of the form stat_sys_[X]_[Y]. By looking at the PNG itself you can identify which is for what.
quick_panel_music_bg.9.png : - This PNG is in twframework-res.apk\drawable-mdpi. This is the PNG for the music quick panel in the notification drawer. If you want to port this PNG from other theme then you will have to follow method described below.
quick_panel_list_bg_01.9.png : - This PNG is in twframework-res.apk\drawable-mdpi. This is the background for the titles such as "Ongoing", "NoNotifications", etc. It is a .9.PNG. Can be directly resized and used.
Quick panel icons : - These PNGs are in twframework-res.apk\drawable-ldpi. These are of the form quick_panel_icon_[NAME]_on/off. Are normal PNGs. Can be resized directly and placed in APK using WinRAR.
status_bar_header_background_01 : - This is present in twframework-res.apk\drawable-ldpi. This is the background for the quick panel. Is a normal PNG. Can be resized directly and placed in APK using WinRAR.
Unused notification drawer area : - The unused area in the notifications drawer is covered by status_bar_background.9.png.This is present in twframework-res.apk\drawable-ldpi. If porting from a theme, then you will have to use the method described below.
status_bar_close_on : - Present in twframewor-res.apk\drawable-ldpi. This is the PNG which defines the bottom of the notifications drawer.
EDITING/PORTING .9.PNGS
Let' s start off with the basics of what is a .9.PNG. Well there is a nice quick read about it here.
So what is the problem with .9.PNGs?? You will get info about it in my pastebin here.
**HOW TO EDIT (DECOMPILE METHOD) : -
Firstly, if you want to edit properly these PNGs, then you have to do it when the APK is in decompiled form. So decompile APK first.
Also, if you are porting a theme, decompile the APK from that theme also.
I am assuming the name of the PNG to be "btn_default_pressed.9.png". Open btn_default_pressed.9.png from the base theme using GIMP and also open the same PNG from the theme you want to port.
Note the the dimensions of the btn_default_pressed.9.png of our theme and the resize the same PNG from the theme you want to port accordingly.
Notice the borders of the .9.PNG of our base theme. You will notice some black solid lines. Now these are the lines that define the PNG. And these should not be touched or edited.
Now go to the PNG that you resized earlier. Using the rectangular select tool in GIMP, select the area of the PNG excluding the 1 px borders. And then copy it.(Figure 2.4 and 2.5).
Then go to the "btn_default_pressed.9.png" of our framework and then select the same area (i.e. excluding the 1 px borders) and press DELETE. The area will become empty.(Figure 2.6).
Then press CTRL+V(Paste).(Figure 2.6).
Save it. While saving you will be asked to export image. Select "Merge visible layers" and save.
There you have it. 1 PNG ported. Similarly, you can port other .9.PNGs. The important ones. Capish??
Figure 2.4
Figure 2.5
Figure 2.6
Reserved 2.
Finally.. Cool bro... Gonna Learn from this once you add info on smali editing..
Thanks for this tutorial!
akoshun said:
Thanks for this tutorial!
Click to expand...
Click to collapse
There is still lot more to go. Its late here so I will continue tomorrow.
wow man. This is like spoon feeding
Thanks a lot
vikraam said:
wow man. This is like spoon feeding
Thanks a lot
Click to expand...
Click to collapse
Well this will be big I guess. I already ran out of characters in first post.
could u also post wat languages do we need to know to start porting ? like XML etc
good job,i can not waiting to try.
Thread stuck
AacidD said:
could u also post wat languages do we need to know to start porting ? like XML etc
Click to expand...
Click to collapse
Well you don t need much prerequisite. Yeah XML would be good. The basics of it.
dhirend_6d said:
<QUOTE SNIPPED>
Click to expand...
Click to collapse
AWESOME!!
Really nice work, I would never have the patience to do sth. like this.
One thing I noticed in your APK Multitool picture though is, that the compression level is set to 9. That never worked for me while editing system apks, I think it is better to set it to 0.
Ghost In The Ruins said:
Really nice work, I would never have the patience to do sth. like this.
One thing I noticed in your APK Multitool picture though is, that the compression level is set to 9. That never worked for me while editing system apks, I think it is better to set it to 0.
Click to expand...
Click to collapse
Thanks. Actually, it should work though. What I do in the end is extract the resources.arsc from the .apk in the end and then again place it in the .apk using WinRAR with compression level "Store". So only the PNGs remain compressed.
dhirend_6d said:
Thanks. Actually, it should work though. What I do in the end is extract the resources.arsc from the .apk in the end and then again place it in the .apk using WinRAR with compression level "Store". So only the PNGs remain compressed.
Click to expand...
Click to collapse
Never thought of it doing it this way. I usually use different apk tool versions, one for decompiling and one for compiling. Took ages to get it work that way ^^
Compiling really should be the next part of your tutorial, it was always the most frustating thing to me and I imagine newbies might feel the same way.
Anyway, keep up the good work
Hi, I see a different picture in APK Multi-Tool, may be it's the problem of version, right?and can you tell me what's wrong after I selected Option 11?
(Sorry, I can't attach a picture like you...)
Arlisdoder said:
Hi, I see a different picture in APK Multi-Tool, may be it's the problem of version, right?and can you tell me what's wrong after I selected Option 11?
(Sorry, I can't attach a picture like you...)
Click to expand...
Click to collapse
Yep, different version. Something is wrong with your project. Most likely a .9.png is wrong formated. Check your log. There should be dozens of public.xml and language errors. You can ignore these. On top of these there should be the real problem. "*.9.png malformed" or something like this.
Arlisdoder said:
Hi, I see a different picture in APK Multi-Tool, may be it's the problem of version, right?and can you tell me what's wrong after I selected Option 11?
(Sorry, I can't attach a picture like you...)
Click to expand...
Click to collapse
I don t know which version of APKMultitool you are using. That s very different layout. But check the log that is there in APKManager folder. If you could attach the log then maybe I could say what the problem is.
EDIT : - Mot probably it is .9.PNG error as said by GhostInTheRuins above.
OK, now I attach my log and hope you can tell me what problem it is. Thanks.
Good Day Guys!I present this small guide on how to modify your SystemUI.apk (ICS only)Things yah need:APK Manager (http://forum.xda-developers.com/showthread.php?t=695701)Java (Oh... You know where to find it)A Windows or Linux PC.Lets Get Started!Decompiling:
1. Extract APK Manager from the .zip file.
2. Run Setup.bat
3. Grab the untouched framework-res.apk and SystemUI.apk from the Base ROM.
4. Place them both in "place-apk-here-for-modding" folder
5. Double click on Script.bat
6. type in 24 and type the corresponding number for framework-res.apk
7. type 9 and it should decompile (If you don't decompile framework-res.apk first you'll have serious problems.)
8. Now type in 24 again and type in the corresponding number for SystemUI.apk
9 Type in 9 and decompile.
10. Now make your modifications in "projects folder"
Click to expand...
Click to collapse
Recompiling:
1. Once your Done go back to script.bat
2.Make sure the "Current Project" is set to SystemUI.apk
3.Type in 11 ENTER to compile apk
4.Type "y" again to confirm you DO want to add additional files that you didnt modify from thee ORIGINAL apk
5.Go into where Apkmanager is installed, and you should see a new folder called KEEP
6.Open "KEEP" folder and whatever you modified, delete the stock version of it I.e: if you inserted new battery icon png's, delete the STOCK battery icon pngs, and if you also edited any xml(s), DELETE the resources.arsc from the KEEP folder
7.Once done, go back into Script.bat and press ENTER to continue
Click to expand...
Click to collapse
Well Good Luck! , Happy Modding!
Reserved for the Manual
Nice tutorial, man! You're back! http://bancomicsans.com/
Great! I believe lots of users will love this good to have you back
Sent from my awesome fridge
TAM
I respect your knowledge no doubt..However I have just opened systemui.apk by 7-zip>replaced png which I want>closed 7-zip..Thats it..Replace sytemui.apk at phone>Changed persmission.
R: [TUTORIAL]How to modify SysemUI.apk
KSKHH said:
TAM
I respect your knowledge no doubt..However I have just opened systemui.apk by 7-zip>replaced png which I want>closed 7-zip..Thats it..Replace sytemui.apk at phone>Changed persmission.
Click to expand...
Click to collapse
In fact only pngs you can replace without decompiling but if you want to edit smali or XML files you have to decompile like Tam wrote.
xpirt
Suppose you want to place a png on status_bar_expanded but do not want to keep in SystemUI/res/drawable-ldpi/ as that would cause transportation issues and increase risk of stealing pngs even if you give the SystemUI.apk to anyone only for study. Or have color xmls that if stolen can spoil your Rom surprises or TUTS
Well what would you want to do,, modify some smalis and place it in your own res.apk like lidroid-res,, etc,, but that would be too bulky and big hell of a job
It would be much better only if we could place these drawable xmls,, color xmls,, drawable pngs etc in framework-res.apk,, Well that is a trick only manufacturers use generally,, Well But since the developers/modders/themers works also need to safe guard their work, heres how we can place color xmls,, drawable xmls and drawable pngs in framework-res.apk and still make it work for other apps like SysUI, etc
-=--------Let us begin simple ----=-----------------------How to safe guard status_bar_tracking background png----------------------------------------------------------
1) decompile SystemUI.apk
2) Open status_bar_tracking.xml in res/layout
3) find its background attribute ( android:background="@drawable/x" )
4) now change it to android:background="@android:drawable/x"
5) Now delete x png from drawable-ldpi (<----------skip if u facing error recompiling)
6) Now open ur framework-res.apk with winrar and place x.png in drawable-ldpi
7) pUSH BOTH
--------------------------===---------------------------------------------------Safe guard a color xml------------------------__-==------------------------------------------------------------
Suppose you have seen my last tut regarding how to make any text change its color when you put your finger on it,, now similarly you perform the work on some other text,, say the quick panel toggle text so it turns blue when toggle is on and white when off,,, etc Now your problem is that if you give your lidroid-res.apk to anyone even for study,, he/she may steal ur color folder xml regarding toggle text dynamics and release it as his own TUT,, so what do you do,, hide the color xml regarding toggle text dynamics in framework-res.apk
1) Decompile lidroid-res.apk
2) copy the <toggle text dynamics xml name>.xml to somewhere safe
3) Open the xml that has android:textColor="@color/<toggle text dynamics xml name>"
and change it to android:textColor="@android:color/<toggle text dynamics xml name>"
4) Now decompile framework-res.apk,, place <toggle text dynamics xml name>.xml in color folder and recompile properly
This way,, safeguard whatever the hell you want
Just remember,, decompile framework-res for xmls and open using and archive opener for pngs
------------------------------------------------------------Remember to press thanks if i helped you---------------------------------------------------------------------------------------:good:
Nice bro :good:
Nice idea for ROM/Theme devs...
Regards,
Ganesh
" This thread will cover various useful guides starting from how to Decompile/Recompile Apk & Jar files. Me & my friend Aneel will provide new guides/tutorial day by day so that you guys can get many handy guidance in one place. Please Suggest us If you need any guide & we will try to post it If we actually can. Also If you find our guides useful then support us my giving feedback, hitting thanks & adding in credits section "
1st Let's start with [How to decompile & recompile with Apk Multitool]:
*Requirements*
Latest Java
Latest JDK+JRE (get everything from http://www.oracle.com/technetwork/java/javase/downloads/index.html)
Apk Multi Tool (Download from attachment)
Steps
1. Unzip Apk Multi Tool into a folder
2. Now run Setup.bat. It will look like this
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
3. Now choose 3. Setup Directories & press enter
4. This will create the folders needed. It will look like this
5. Now place the apk you want to decompile in place-apk-here-for-modding
6. Place a framework-res.apk, SemcGenericUxpRes.apk & SystemUI.apk in other folder. Preferebly it should be from the same package of apk/same apks of a Rom which you placed in the place-apk-here-for-modding folder. If there is no corresponding apks then you can try with other framework & systemUI apks also.
7. Now again run Setup.bat & press enter & choose 2. Installing Framework-Res. It will look like this
8. Now choose option 1 & enter to install framework & again option 4 & enter to install SystemUI
9. Now run Script.bat & press enter to activate various menu. Choose option 9 to decompile the apk. Then press enter. It will look like this
10. Once decompile is complete close the script & go to projects folder
11. Do the necessary changes you want to
12. When editing is done again run Script.bat
13. Choose option 11 to recompile & press enter. It will prompt a message after sometimes, Aside from the signatures....of errors (y/n)
14. Input y & press enter
15. Now after sometimes, it will again ask you to delete everything you have modified from keep folder & also delete resources.arsc if you have modified any xml. Minimize the script, delete the xml(s) you have modified (other than from values folder, it won't appear in keep folder) & also resources.arsc. If you have modified any png (not added) then delete it too. Then press enter when you are ready.
16. Now your new apk is ready. You can find it in place-apk-here-for-modding folder. Note that, your original apk will also be in the same folder with original name. Your modified apk will have System_ attached in the name.
17. Copy it to some other place & rename to original apk name & enjoy.
18. When you want to work on the next project then delete everything from place-apk-here-for-modding & projects folder. Now follow the same steps again from Number 5 of this guide.
[How to decompile & recompile Jar Files]:
*Requirements*
Winrar/7zip
Deodexed Jar files
smali.jar
baksmali.jar (both are in the attachment)
Command Prompt/Terminal
0. Take the classes.dex from jar file by opening it with 7zip/Winrar.
1. Open a new folder in Desktop named suppose "Jar"
2. Place smali.jar & baksmali.jar in the folder
2. Open Command Prompt. On windows type cmd in Run
3. cd to your directory where you have opened the new folder. In my case it is
Code:
C:\Documents and Settings\USER\Desktop\Jar
4. Write
Code:
cd C:\Documents and Settings\USER\Desktop\Jar
& press enter. Note that, on your case the directory will be different from mines. So get the correct directory by going into that directory from C:
5. Now type this to Decompile. Note that, there is a "space" before "classes.dex"
Code:
java -jar baksmali.jar -o classout\ classes.dex
& press enter
6. When Decompiling is done there will a folder named "classout" be placed in Jar folder. Minimize the cmd.
7. Now make the necessary changes inside the classout folder
8. When done,type this to recompile & press enter. Remember, there is a "space" before "new-classes.dex"
Code:
java -Xmx512M -jar smali.jar classout\ -o new-classes.dex
9. When recompiling is done there will be a new file in the folder named "new-classes.dex"
10. Now rename new-classes.dex to classes.dex & put it in the jar file with 7zip/Winrar
..............That's All. Thank You.................
Credits:
@raziel23x for Apk Multitool
@iONEx for teaching me about Apk Multitool when I was a noob
@Hero for Decomping jar files concept
How to Add Any App in Anywhere in Settings
This Guide will help you to add any application/options to Settings.apk. Well earlier My friend @sandy7 published a guide on how to add various options in Settings. So this extended guide will provide you the necessary knowledge on how to get resources about any app which needed to be added in Settings to include it as an option.
Requirements:
Any Tool that can Decompile & Recompile with it's requirements
Notepad++
1. How to add options/apps in main/general settings :
To add an app in Settings we need some resources of the app. This resources can be found by decompiling the app which we want to add & look for those in AndroidManifest.xml
Now, to add an app we need this resources to be added:
*android:targetPackage - the unique & original package name of the app
*android:action - the On click event of an app & it finds the activity of the app
*android:targetClass - the class which is called on calling Onclick action which opens the app when it is clicked
*android:title - the entry of the app in header & also in strings.xml
*android:icon - the icon which will be displayed for the app entry
Notes: android:targetClass, android:targetPackage & android:action can be found in AndroidManifest of the app. For some apps android:targetClass is not given directly. So it should be searched to find. I will tell you how to do that. android:title & android:icon can be written as per user.
As I explained a bit about the resources I will now move onto the main guide. I will take an app from playstore named "Rom Toolbox" as example & describe the ongoing process
i. 1st we need to decompile the Rom toolbox app & find the resources in AndroidManifest.xml
as we can see from the picture that I marked the android:targetPackage & android:targetClass. The target package is easy to find. Sometimes target class is also given directly. If it's not given directly like this app we will find it by searching for it in the lines which starts with <activity. Now if there's more than one activity search for the activity that matches with the target package to some extent. & one more thing I should make you clear about. In some apps you will find android:targetClass will just be a one word phrase. Like if we take Serajr's SystemUI Preference as example you will see that android:targetClass is ".SystemUIPreferencesActivity". In those cases we need to add the whole android:targetPackage before targetClass. For Serajr's SystemUI preference the android:targetPackage="com.serajr.systemui.preferences". So the android:targetClass="com.serajr.systemui.preferences.SystemUIPreferencesActivity".
So here for Rom Toolbox app we find
Code:
android:targetPackage="com.jrummy.liberty.toolbox"
android:targetClass="com.jrummy.apps.rom.toolbox.RomToolboxActivity"
android:action="android.intent.action.MAIN"
android:action doesn't always needed to be found, you can always use "android.intent.action.MAIN" as the on click event
ii. Now decompile Settings.xml & go to res\xml & open settings_header.xml with notepad++. Now chose a place where you want to make the entry. If we want to add the app under advanced settings then we need to create a header 1st. We also need to create an android:title & android:icon entry for the app. So this will be the entry in settings_header
Code:
</header>
<header android:title="@string/header_category_advanced" />
<header android:icon="@drawable/ic_settings_rom" android:title="@string/rom_toolbox">
<intent android:targetPackage="com.jrummy.liberty.toolbox" android:action="android.intent.action.MAIN" android:targetClass="com.jrummy.apps.rom.toolbox.RomToolboxActivity" />
The 1st header is for the advanced settings header. We need to make an entry of the same name in strings.xml.
The 2nd header is for the app & icon. We need to write the exact entry as title in strings.xml like I wrote "rom_toolbox". You can write anything as title just make sure it matches the app itself so that you can find it easily. So the settings_header will look like this
Now save it
iii. Now go to res\values & open strings.xml. We need to create two strings here. One for the advanced settings & another for the app. We already chose the string name for header as "header_category_advanced" & "rom_toolbox" for the Rom Toolbox app. So the entries in strings.xml will be
Code:
<string name="header_category_advanced">ADVANCED SETTINGS</string>
<string name="rom_toolbox">ROM Toolbox</string>
You can write anything where I wrote "ADVANCED SETTINGS" & "ROM Toolbox" It depends on you what you would like to see in settings as header.
So the strings.xml should be like this
Now save it.
iv. Now we need to place a png for the app in drawable folder with the name "ic_settings_rom" as it is given in the header of android:icon. Depending on your settings you either should have drawable hdpi or drawable mdpi folder. On my case I have drawable hdpi folder. 1st we need to look at the resolutions of the pngs which starts with ic_settings name. Well generally for drawable hdpi it is 48x48 & for drawable mdpi it is 32x32. So we need to resize the png in any of this resolutions depending on our drawable folder. You can take the png from the original app & resize it. In my case I resized it in 48x48 & placed it in drawable-hdpi folder.
v. Now you are ready to recompile again. Then try your newly modified settings. I will post a screenshot of mine
2. How to add options/apps in sub settings for example in display settings :
Here I will take On-screen-buttons app for an example in the ongoing process. We will add it in display_settings. Now, we need an extra resource called android:key when we want to add any app in sub settings. android:key is the keystore when the app is extracted using any app tool when created by the developer. As we cannot find the original android:key of the app, we will enter a value as android:key & give it's reference in the ids.xml
i. 1st decompile the On screen button app & search for resources in AndroidManifest.xml.
So we find android:targetPackage="cn.kyle.gn.NavBar" & as only one line here starts with <activity it is really easy to find android:targetClass="cn.kyle.gn.NavBar.GnNavBarActivity". android:action="com.android.intent.MAIN" even if it is not written in the manifest.
Now we need to make android:title which can be anything,we just need to refer it into strings.xml, android:key can be anything, we need to refer it in ids.xml & another entry is optional here which is android:summary which is the sub-header of the app. I give you my example what I have written as values of those resources
Code:
android:title="navienable_title"
android:key="on_screen"
android:summary="on_screen_summary"
Now as we fixed every resource & their values we will put the entry in res\xml in display_settings.xml. The entry will look like this
Code:
<PreferenceScreen android:title="@string/navienable_title" android:key="on_screen" android:summary="@string/on_screen_summary">
<intent android:targetPackage="cn.kyle.gn.NavBar" android:action="android.intent.action.MAIN" android:targetClass="cn.kyle.gn.NavBar.GnNavBarActivity" />
</PreferenceScreen>
The display_settings will look like this
Now save it
ii. Now go to res/values & open strings.xml. We need to make two entries here. One for the android:title="@string/navienable_title" & another for the android:summary="@string/on_screen_summary". Now we make the entries
Code:
<string name="navienable_title">On-Screen-Buttons</string>
<string name="on_screen_summary">Enable/Disable On-Screen-Buttons</string>
as I said before you can write anything inside >......</string> it depends on you what text you would like to be seen
The screenshot from strings.xml
Now save it.
iii. Now go to res\values\ids.xml & open it. We need to make an entry for the entry we made in display_settings as android:key. So the entry will be with the same value
Code:
<item type="id" name="on_screen">false</item>
So the ids.xml should be like this
Save it & recompile your edited Settings.apk. Here is a screenshot of the Settings I edited
2. How to add headers in Settings/about to display Developer Name & Rom Name :
i. Decompile Settings.apk & go to res\xml & open device_info_settings.xml. Now choose a place where you want to show your Rom Name & Developer name. The entries you need here are similar with the one's that already exist in the xml. So you can copy one line of entry & press enter then paste it & you can edit it to make the new entries. We need android:title & android:summary which will be shown in strings.xml. We need android:key which you can keep same as android:title to eliminate difficulties, but we don't need an entry in ids.xml this time as it is not an app for which we are making the entry for. Last of all we need a style entry which will be the same as others. So I will write my Rom name & developer name under Kernel_version entry here. The entries will be
Code:
<Preference android:title="@string/rom_header" android:key="rom_header" android:summary="@string/rom_name" style="?android:preferenceInformationStyle" />
<Preference android:title="@string/author_header" android:key="author_header" android:summary="@string/author_name" style="?android:preferenceInformationStyle" />
The device_info_settings.xml will look like this
Now save it.
ii. Now go to res\values\strings.xml to make the entries here. We need two entries for the Rom Name, one is for "@string/rom_header" & another for "@string/rom_name". Same we need for Devloper name, one entry for "@string/author_header" & another for "@string/author_name". So the entries will be
Code:
<string name="rom_header">Rom Name</string>
<string name="rom_name">X Rom</string>
<string name="author_header">Developed By</string>
<string name="author_name">Saqib Nazm</string>
I give my Rom name as "X Rom" for example. You can type anything as you like on rom_name & author_name
The strings.xml should look like this
Now save it & recompile. Enjoy your freshly made new Settings.apk. Here is a screenshot about how it looks
.........................................................................................................................................
At the end I want to say, I will try to explain it more by adding more examples so that you can add anything. Kindly give me credits for my work If it helps you in anyway possible. Like I am gonna give credits to those respective people for whom I could share this guide to you.
Credits:
Neroyoung - for always helping me & clearing my ideas
jerrytan93 - for helping me alot whenever I need him
gagan.u20 - for always saving me if I get stuck somewhere
singh_dd93 - for giving me a clear idea on some resources
sandy7 - who doesn't know his thread from where everyone can learn
A guide how to add OSB for your ROM...!!!
Credits:
1. Attitude.SSJ for the DIY of OSB
2. LoneWanderer for the tut for HDPI devices
3.atticus182 for the beautiful icons of OSB
4. Serajr for the superb system UI mod
5. Tickle Fish for TICKLE MY ANDROID
Click to expand...
Click to collapse
Before we begin ask yourselves a question..!!
1.Do we really need OSB for mdpi devices??
Ans: i feel yes, "PREVENTION IS BETTER THAN CURE" its better we use our touch rather than using the soft keys for such along time and eventually get them busted! :silly:
2. Do we really need to follow this guide to make my own OSB??
Ans: Well it depends on your requirements......
3. will it support ICS, JB and even CM???
Ans: Hell yeah..!! it does work!!! sorry GB users
Click to expand...
Click to collapse
Tools Required:
1.framework-res.apk
2.SystemUI.apk
3.Winrar or 7zip
4.Notepad++
5.Apktool or Apkmanager or Apkmultitool
6.JAVA & JDK already installed in your PC
last but not the least required thing is a fully functioning human brain..!!
STEP1:
Framework Part:
1) Take the framework-res.apk and SystemUI.apk from rom and paste it in "place-apk-here-for-modding" folder in Apktool
2) Decompile the framework-res.apk using
Code:
apktool d framework-res.apk
Click to expand...
Click to collapse
3)Once decompiled you'll obtain a folder "framework-res"
4) Open it ..goto 'res\values' folder...find bools and right click to edit with notepad++ and by using ctrl+f search for
Code:
<bool name="config_showNavigationBar">[COLOR="Red"]false[/COLOR]</bool>
Click to expand...
Click to collapse
5)Rename falseto true...save file.
6) Open 'dimens' file in the same folder res\values and using ctrl+f search for navigation bar height and width and change them to whatever dpi you want and save file
7) Thats it!! compile the framework-res using the code
Code:
apktool b framework-res
Click to expand...
Click to collapse
8)Now you will get the new apk file of framwork-res.apk in the dist folder of framework-res folder if you are using the apktool and for other tools it will be in the respective output folder
9) Now we have to sign the framework-res.apk using any apk signing software or simply use TICKLE MY ANDROID by TICKLE FISH to sign your apk by placing it in the out folder of Tickle my android and sign it by pressing button 15 to sign apk file under theming menu(2)
10)thats it now your rom will have OSB
Note: If you dont want OSB in landscape view also..then type 0.0dip like this... in res\values\dimens
Code:
<dimen name="navigation_bar_height_landscape">0.0dip</dimen>
Click to expand...
Click to collapse
STEP2:
System UI part:
1. using 7zip or winrar OPEN the SystemUI.apk and navigate to res>drawable_mdpi (if drawable_mdpi is not present go to drawable_hdpi) and just drag and drop this folder "drawable_mdpi (or) hdpi"where you are working
2. search for these png files in the folder
Code:
ic_sysbar_back
ic_sysbar_back_ime
ic_sysbar_home
ic_sysbar_menu
ic_sysbar_recent
if they are present thats done if they are not present you'll have to add them into the folder with dimensions of your choice
3. Thats it NOW you have OSB in your ROM
WANT TO ASK ANYTHING???
How do i add them man...??
Well that's very simple go to this page http://forum.xda-developers.com/showthread.php?t=1413582 and download the required OSB styles you want to add to your ROM
but hey this brother who is a Recognized contributor @atticus182 should deserve a THANKS for such beautiful icons
Once downloaded you must re-size the pngs as far as i know for mdpi devices in portrait mode the image should be scaled around width:80px and height:48px (80x48) and in landscape mode width:48px and height:80px (40x80) is recommended
after they are re-sized they should be copy pasted to the folder we dragged and dropped from SystemUI.apk
once they are copy pasted again open SystemUI.apk in 7zip or Winrar and open the res folder and now just drag and drop the folder in which we added the png files and save the compression level to store if asked and now decompile SystemUI.apk and check whether the files which we drag and dropped are present in the res folder and even check for the png files the res>drawable mdpi(or)hdpi folder... if they are present then it is well and good if they arenot present then you have done something wrong post your problem i'll help you out or there are lot of devs here in XDA they'll help
Click to expand...
Click to collapse
STEP3:
CREATING A FLASHABLE ZIP
1) Download Sample.zip but dont extract it..just open the sample provided with winrar...you will see 2 folders META-INF and system.
View attachment 2027370
2) In system there will be two folders framework and app...
Drag the new framework-res.apk to framework folder...
and the SystemUI.apk folder to app..
3) META-INF has info about flashing...goto com..google..android and open update-script file with notepad++...you can edit whatever you want in
ui_print (" ") ...it will be displayed while installing...Save file..
Done your flashable zip is also ready to be flashed using CWM recovery
Feel free to ask questions if you have any coz this tutorila/guide is n-o-o-b friendly :victory: :angel:
P.S add me to your credits if you manage to get OSB working in your rom using this GUIDE/TUT
Dont ever forget to Click :good:button
Aneel said:
Amazing guide awesome..... bro :good: :beer: can we also add our guides here so that we all together can make it a sticky??
One more request bro we'll have this thread but all the comments and requests in Q&A. Forum so that all the questions can be handled there and here everyone can refer....
Sent from my Xperia Z using xda premium
Click to expand...
Click to collapse
yeah sure bro why not. but how will you add your guide here I don't know & I don't get what you meant by the request.hehe
I will copy all my contents from my guides and paste here along with the codes.... so that this thread will become a place where you can possibly find any guide irrespective of android version what say??
Regarding the request what I say is post a disclaimer not to comment here with problems or requests in this thread... I will create a thread in Q&A section specially for this thread so that they can question,comment,request,etc there.....
Sent from my Xperia Z using xda premium
Aneel said:
I will copy all my contents from my guides and paste here along with the codes.... so that this thread will become a place where you can possibly find any guide irrespective of android version what say??
Sent from my Xperia Mini Pro using xda premium
Click to expand...
Click to collapse
yeah sure that would be great. But let's do it tomorrow let's just call it a day. I am tired
@saqib nazm Yeah till then I'll edit this message after you see saying not to comment here since the thread is updating
Sent from my Xperia Z using xda premium
Some more tutorials are coming. I will post one more tutorial on how to add any app into anywhere in settings. Meanwhile my friend @Aneel will post some useful tutorials/guides.
reserved for next guide
this thread is open for comments guys
Thanks Gentle Men , 2 of nice Devs are Here
saqib nazm said:
this thread is open for comments guys
Click to expand...
Click to collapse
Add signing and zipaligning to your guide.
XperienceD said:
Add signing and zipaligning to your guide.
Click to expand...
Click to collapse
yeah sure man thanks for the suggestion. Will add it
saqib nazm said:
yeah sure man thanks for the suggestion. Will add it
Click to expand...
Click to collapse
nicely explained guide :good::good:
sandy7 said:
nicely explained guide :good::good:
Click to expand...
Click to collapse
thanks sandy :highfive:
Guys new & very useful guide about settings has been added in the 2nd post :good:
Both of you guys are just aweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeesome.
Thanks for these gudies.
Exellent work.
:good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good:
Wow great man, awesome guide.
Sent from my Zelly creamWT19i
Mankotialovely said:
Both of you guys are just aweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeesome.
Thanks for these gudies.
Exellent work.
:good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good: :good:
Click to expand...
Click to collapse
ChhunkaDavid said:
Wow great man, awesome guide.
Sent from my Zelly creamWT19i
Click to expand...
Click to collapse
Thanks to both of you & please let me know whoever followed my guide if it is understandably good or If I need to make it better
I'm looking for guide how add kill back button, can you make it?
godlesplay said:
I'm looking for guide how add kill back button, can you make it?
Click to expand...
Click to collapse
hmm...that would take a lot of time & lots of work but I can try though. Let's see