Related
Hi there,
I am trying to learn all this theming and have started with the basics, the notification bar icons in framework-res.apk.
I can pull it from the phone, I can decompile it but I am having a challenge putting it all back together as I changed the number of images in a specific animation and then edited the XML file regarding that, but I think there must be other references to the files as now there are less files and the error log is saying it can't find the ones I removed (both the png's and the references in the one xml file) when trying to recompile.
Is there a master XML listing all the files expected or something.
many thanks in advance
David P
Let me guess you are using apktool?
What you need to do is take a clean version of the apk you want to edit. For arguments sake let's say you are editing framework-res.apk.
Decompile using apktool and make your edits to .xml files ONLY. Once done recompile using,
apktool b -f [foldername] framework-res.apk
Now this recompiled apk will probably not work. However the xml files will be properly recompiled. So now you extract the edited .xml files, add them to a clean unedited framework-res.apk (not a de and re copmpiled one) without extracting the .apk. Just add and replace the files using WinRar or whatever.
Also add your edited images to necessary folder in the clean .apk too. So the end result is a clean framework-res.apk that you have updated with your edited .xml files and edited images. This apk should function just fine!!
Sorry if this is a big mess but it makes sense to me and it works for me.
Thanks for the suggestion. I am not quite sure what I am using, I have tried ThemePro for windows and APKManager, both of which are just scripted batch files so I would need to check what they use to extract or decompile with.
So Basically, I decompile, edit the xml (while textual) then recompile so the XML's are binary again. Then pull the BINARY XML#'s from the APK and use those with all the appropriate files and folders which I then create a new clean APK from by zipping it and renaming to .apk, correct?
David P
ephumuris said:
Let me guess you are using apktool?
What you need to do is take a clean version of the apk you want to edit. For arguments sake let's say you are editing framework-res.apk.
Decompile using apktool and make your edits to .xml files ONLY. Once done recompile using,
apktool b -f [foldername] framework-res.apk
Now this recompiled apk will probably not work. However the xml files will be properly recompiled. So now you extract the edited .xml files, add them to a clean unedited framework-res.apk (not a de and re copmpiled one) without extracting the .apk. Just add and replace the files using WinRar or whatever.
Also add your edited images to necessary folder in the clean .apk too. So the end result is a clean framework-res.apk that you have updated with your edited .xml files and edited images. This apk should function just fine!!
Sorry if this is a big mess but it makes sense to me and it works for me.
Click to expand...
Click to collapse
A lot of thanks!!! I'm looking for an explanation like this, all that I try give me an unusable framework-res.apk and now I know why.
ephumuris said:
Now this recompiled apk will probably not work.
Click to expand...
Click to collapse
Apktool creates "clean" apks as you name them. There is almost no difference between application built from sources or using apktool. And almost no logical difference between original apk and rebuilt one (for most apps, of course apktool doesn't support some of them).
If you are talking about system apps, then your problems are most probably related to incorrect way of installing resulting apk, not to it's structure. You can't reinstall system app easily and one of workarounds is to copy AndroidManifest.xml and META-INF from original file and push it to a device. Actually you did this using your method and I think this is the reason, why you think there is something wrong with apks built by apktool.
i decided to make my taskbar and tasktray transparent so i pulled framework-res from my phone, extracted and modified the images, and then made a flashable zip and reflashed it (i used the update-script from a theme i have that replaces the framework-res so i know it works). it flashes and boots fine and doesnt bootloop or anything but any app i open whether it be settings or gmail or root explorer force closes and theres no way to do anything but scroll on my home screen. the only thing that works is the usb connection type picker.
images i modified:
activity_title_bar.9.png
status_bar_background.png
status_bar_close_on.9.png
status_bar_header_background.9.png
status_bar_item_app_background_normal.9.png
status_bar_item_background_focus.9.png
status_bar_item_background_normal.9.png
status_bar_item_background_pressed.9.png
title_bar_portrait.9.png
i have a sneaking suspicion that its either the title_bar_portrait.9.png and/or the activity_title_bar.9.png
or just *.9.png files in general. all are rgb color and between 50% and 75% opacity if it matters
please help
edit- i took out the title_bar_portrait.9.png and the activity_title_bar.9.png and it works now so it was one or both of them. does anyone know why they broke everything and how to make it so they dont?
Id carry this over to the Q & A forum cause u gonna get told lol
Sent from my phone... I think using Tapatalk??
Patch9 files are not normal png files. You may have destroyed the .9 data by editing it. Also, take a clean copy of your original framework-res.apk off your phone and then using 7zip just open the file (don't unzip), and then drag and drop your modified images into the appropriate folders in the apk. Don't try and resign or make a new framework file.
nukedukem said:
Also, take a clean copy of your original framework-res.apk off your phone and then using 7zip just open the file (don't unzip), and then drag and drop your modified images into the appropriate folders in the apk. Don't try and resign or make a new framework file.
Click to expand...
Click to collapse
thats what i did when i broke it but i fixed it doing that too
nukedukem said:
Patch9 files are not normal png files. You may have destroyed the .9 data by editing it.
Click to expand...
Click to collapse
how can i modify them and restore the data? right now though i have the .9 images from above minus activity_title and title_bar modified and the system seems to be working like a charm. all i did was change the opacity in gimp aside from the background which i changed to a digi camo pattern
daktah said:
how can i modify them and restore the data? right now though i have the .9 images from above minus activity_title and title_bar modified and the system seems to be working like a charm. all i did was change the opacity in gimp aside from the background which i changed to a digi camo pattern
Click to expand...
Click to collapse
You could open the images with the 9patch tool in the sdk and double check them. Then save it using the tool.
Sent from your mom's phone.
i never noticed that before
so just open them with it and save them and i should be all good?
You could try just re-saving them. If that doesn't work, you can use the tool to check for problems. Maybe the easiest way to make sure everything is ok would be to open the original 9patch image and look at how the borders are drawn, then make sure you have the same borders in your image. I'm not an expert on 9patch files, but hopefully that will help you.
So I'm a bit of a noob. I'm attempting to create a theme and I cannot figure out where to edit the noti bar as well as the lockscreen image. For the lockscreen, I just want to keep the same tw lockscreen, but I want to change the padlock/background. Any help would be amazing as I am truely stumped.
If this needs to be in general, please move me
The file(s) that you are looking for are located in the framework-res.apk package located in a ROM/Theme. Inside of the .apk is a folder called res, and inside it is a folder called drawable-hdpi. This folder contains the majority of images used to make a theme look a certain way. In order to change the status bar, you need to edit the file statusbar_background.png. The lock screen one is in this folder too.
Nice. Thank you sir
Sent from my SPH-D700 using XDA App
I figured since the question has been answered I could just hijack this thread instead of making a new one. I am pretty new on modifying Android ROMs and would like to know where I should start first if I wanted to create my own theme? I would like to do some simple modifications first like icons and colors. Where can I find the necessary materials to get started? Like a fresh Touchwiz 2.5 template from the epic? Or do I just extract them from the stock ROM, if so, how? Thanks.
The files are accessible from the ROM if you open the zip and go to /system/framework then extract framework-res.apk
From there, you can open the apk with a tool like WinRAR and navigate to /res/drawable-hdpi as thomasskull666 mentioned. You can extract the png files from there and then just drag them back in once modified. Then just drag the framework-res.apk back into the ROM zip and flash it and bask in the glory of your handiwork.
Best advice is organize your workspace. You will have so many folders in folders your head is going to spin! What I do is copy the framework-res.apk, twframework-res.apk into a folder on your PC called STOCK DI18 Theme. *Make sure you pull these files from a deodexed rom or you'll have issues! Drawable-hdpi folder inside of both framework-res.apk files is where the brunt of you mods will be. If you are feeling daring, after changing the images in there you can begin to pull the drawable-hdpi from apps as well as long as you drag out the drawable folder, make your edits, then drag the edited folder right back in the zip, you'll be fine. Don't touch .9.png files if you don't know how to program them, I'm guessing you don't. Don't worry, edit everything else first to get that "feel" for what you are getting into. From there then research the .9.png files.
I highly recommend using 7zip for all of this, it is less of a headache. This is the basics of what you'll be doing to everything. Lets say you were going to do all this right off of your desktop. Make a folder on your desktop called STOCK DI18 Theme. Copy your framework-res.apk and twframework-res.apk into that folder from your deodexed rom. ANY TIME YOU NEED TO TAKE THESE FILES TO EDIT FOR YOUR THEME, COPY THEM FROM THIS FOLDER, NEVER SAVE THE CHANGES BACK INTO THIS FOLDER. This is important because you want easy access to all your stock files. Copy your system/framework and system/apps in here.
Now if you want to work on the framework-res.apk first. copy it to the desktop. Right click and choose 7zip-open archive. You can see the file structure of the apk. Click twice on res and you will see all the folders including drawable, drawable-hdpi, etc. Drag and drop drawable-hdpi to your desktop. Edit anything you want in there except a .9.png. Save the files into that same folder. Then drag and drop the folder right back into the archive where you got it in the first place. Then say your all done. Drag framework-res.apk back into the zip your going to flash on your phone in the same method.
Another quick tip, if you don't have an update zip and you have no idea what you are doing, download any working theme from here. Grab one of mine, and copy your framework-res.apk, twframework-res.apk, apps, etc over what in there. Make sure not to leave nothing it will show up in your theme! Any thing you need clearing up on, PM me, this should be plenty to get you started. To theme an app, right click say alarmclock.apk choose 7zip-open archive and do your magic again. As long as you only change the pictures in there you won't alter the signature on them so don't be afraid to mess with it.
Lastly, the Epic's framework is LOADED with files that it doesn't even use so be careful you not spending too much time editing a file you never seen on your phone before!
dreamsforgotten said:
Lastly, the Epic's framework is LOADED with files that it doesn't even use so be careful you not spending too much time editing a file you never seen on your phone before!
Click to expand...
Click to collapse
Excellent tip, this is especially helpful if you are trying to port a theme as not all of the .png's will match up. Make sure you know what you NEED to be replacing as opposed to what is optional. Also I don't know if it was mentioned before but there are some files (especially in twframework-res) that have a .9 before the .png. These are not your run-of-the-mill png files, and they need to be specially edited to preserve their formatting. I recommend avoiding these if at all possible, but there is a way to edit them if you are feeling really adventurous. Here is the link to that post:
http://forum.xda-developers.com/showthread.php?p=5206698
My suggestions for success: If you really want to make sure you are editing only the files that you need to edit in framework-res.apk, download a few custom themes or ROMs and extract the framework-res.apk from them. Then use a program such as UltraCompare to compare the files and folders inside each to find common files. This will help you pinpoint exactly what needs to be edited and what needs to be left alone. Lastly, like dreamsforgotten stated, be sure to have a good work directory from which to edit these .apks, as you will be working with folder after folder after folder. Organization is key, and patience is required
hey guys.
i'm having a frustrating issue when editing framework-res.apk to include the rectangle battery mod.
this is a long post...please DO NOT POST GENERIC ANSWERS WITHOUT READING THE POST FIRST!!!
i'm used to editing framework-res.apk and all other .apks on my phone for various purposes. i use a combination of 7zip and apkmanager 4.9 to extract, replace, decompile/recompile, etc. depending on what i'm doing.
at this point here's what i'm trying to do:
DaGunn provided me with a modified framework-res.apk which includes a buttonized power control widget (from JsChiSurf's thread). this is v2.0 (on the 3.29 ota). previously i had v1.0 which I had fully customized to my liking.
the file provided to me by DaGunn has the buttonized look, and some smooth sense elements, as well as the super circle battery meter.
i opened framework-res.apk he provided with 7zip and replaced all the 901 images in res/drawable-hdpi with my own 901 image files from my existing framework. these files all have the same exact name and same exact extensions. (hence when I drag and drop into the new framework-res.apk in 7zip i get a direct replacement rather than having extra files).
this has worked countless times in the past. as a matter of fact, it worked 99% of the way this time. all the framework images went back to my customized images. except the battery disappeared.
i narrowed it down to the battery images. if i leave his 101 circle battery .pngs and replace every other file in framework-res, it works just fine. all my images show and the battery shows up in the circle style. if i then just replace his 101 circle battery .pngs with my 101 matted blues rectangle battery .pngs, which are the same exact names (i checked!) and extension, and after I optimized them almost exactly the same file size as well, everything goes to crap. the battery doesn't show up at all in the title bar.
if i plug in the phone, the rectangle charging animation works, the download animation works, all other smooth sense animations that I have replaced with the mattedblues files from my previous framework work. except for the battery.
now, if his .pngs work, and mine replace his directly with the same exact name and extension, why would the battery display suddenly disappear?!
I'm being told it has to do with resource IDs, but here's the problem. I was provided a "guide" on how to properly modify framework-res by one of the guys involved in MattedBlues (beatblaster). in it I was told that I only need to recompile framework-res after adding NEW .pngs, that if the .pngs were already accounted for in resources.arsc then trying to recompile would throw errors and instead I should replace those .pngs with 7zip. that's what i'm trying to do but as I said, then the battery meter doesn't work.
if i decompile DaGunn's original file, I'm able to recompile it just fine. keep in mind this file already has a lot of modifications on it as it is. but if i decompile his framework, and I replace his .pngs with mine, and try to recompile, I get thousands of lines of error in the log. all having to do with public.xml, which I'm being told goes back to resource IDs.
what am i missing here? i know how to remove the battery display from the title bar so I dont have that empty space, but I do enjoy my percentage battery and I would like to get this to work!
any input will be greatly appreciated...
+5 points for you if you read this far!
I'm not clear if you are recompiling or just dropping the images in, but if you are recompiling try making all your xml changes without adding the new images. Then after its compiled drop your new images in.
Sent from my PC36100 using XDA App
i'm not modifying any xmls. only replacing .pngs. it's specifically clarified in the OP.
the existing framework, with its modified .xmls and .pngs as given to me decompiles and recompiles just fine. if i decompile, then replace the .pngs with my own, and try to recompile, then it gives error. if i just open it in 7zip and replace the .pngs with my own, the battery disappears, but no force closes or error messages.
anyone else?
Are any of the .png files you are replacing have the 9.png extension? I know modifying these is very tedious and requires a more difficult process. Also can u post the errors in the apkmanager log?
Sent from my DROIDX using XDA App
nope. the files are stat_sys_battery_0 through stat_sys_battery_100. all .png not a single one in any other extension.
i can't post the apk manager log because it is literally thousands of lines of errors.
what I can do is give you the framework as I have it, working with his battery .pngs and a separate .zip with my battery .pngs, so you can try to do it yourself and see the problem/compile errors.
it really is weird...or stupidly simple!
Firstly you SHOULD NOT be decompiling just to swap images, even .9 pngs. You only need to decompile if you are editing xml files which by reading your post you aren't. To change pngs only, you should use option 1 (extract) in apk manager. Then change all your pngs you want changed. Use option 3 to recompress your framework. Make sure to tell it that it is a system apk, and then use option 12 to resign. You should be good to go.
t3project said:
Firstly you SHOULD NOT be decompiling just to swap images, even .9 pngs. You only need to decompile if you are editing xml files which by reading your post you aren't. To change pngs only, you should use option 1 (extract) in apk manager. Then change all your pngs you want changed. Use option 3 to recompress your framework. Make sure to tell it that it is a system apk, and then use option 12 to resign. You should be good to go.
Click to expand...
Click to collapse
+1
The reason I was confused about what you were trying to accomplish is because you don't need to decompile unless changing xml's.
Thats what I do for non system apps. I'll give it a try in the morning and see if it makes a difference.
Swyped from my HTC Evo 4G on the MetroPCS 1X network!
Ok first if you go to recompile something and you get errors usally the first error is the one causing the problem. Look and see what the first error is and fix it, like has been said what you are trying to do using 7 zip is a good way to do it, not decompiling. You said this is how you prefer way to do it anyway so that's good.
Second I have found at times that 7 zip does not properly replace threw images so weird things happen, only happens sometimes. With that said try using apk manager to unzip the apk replace the images and rezip it do not sign it. See if that works
Third. If all else fails download nijamorph from the market. Put the images you want on your scard where I can find them easy. Open nijamorph and start a new project navigate to your framework-res.apk.from here you can do two things first you can press existing project and find what you are looking for and change one at a time or the easy way. Close the app open your favorite file manager find the pngs you are going to use, copy them, then navigate to android themes/workspace in there you will find the framework-resapk folder, in there is everything just like the apk so paste the files were they go (that last step can all be done on the computer if that is easier for you.) Next open your nijamorph app and press finish project follow the prompts and let it do its thing. If your phone does not reboot reboot it.you should be good to go.
Like always do a backup before doing these steps
Good luck
Sent from my unrEVOked using xda app
Max_Pain said:
Thats what I do for non system apps. I'll give it a try in the morning and see if it makes a difference.
Swyped from my HTC Evo 4G on the MetroPCS 1X network!
Click to expand...
Click to collapse
it works the same way when replacing pngs. compiling and recompiling is only needed if making xml/code changes. i had to learn this the hard way too. just make sure you sign system apps with option 12 instead of option 4 like you would with a non-system app.
t3project said:
To change pngs only, you should use option 1 (extract) in apk manager. Then change all your pngs you want changed. Use option 3 to recompress your framework. Make sure to tell it that it is a system apk, and then use option 12 to resign. You should be good to go.
Click to expand...
Click to collapse
this worked!
dont know why I would have to extract, replace, compress, as I've NEVER done that with framework-res.apk, only when editing apps that need to be resigned. oh well, it worked
I think you misunderstood what I told you in the guide I gave you which is you only need to decompile/recompile when you are making XML code changes as stated above in a previous post. When I wrote that guide for you I wrote it thinking you wanted to add more features to the original power control widgets (such as smooth mods). If you want to simply replace PNGs, as stated previously, all you need to do is replace the PNGs without decompiling and recompiling.
In this instance, the problem you're running into is that you're trying to compile the framework using already-customized PNGs which will not work (another point that was stated in the guide as well )
So, in conclusion, if all you want to do is change the PNGs all you gotta do is (and you probably already know this but I'm including it to be thorough):
- Open archive (framework) in 7-zip
- Navigate to framework-res/res/drawable-hdpi
- Add your desired PNGs into the 7-zip window
- Close the 7-zip window and answer yes when 7zip asks if you want to update the archive
- Flash framework onto your phone
- All should be well
- When using this method there is no signing necessary!
Again, as stated previously, the only time you need to decompile/recompile is when you're going to edit an XML (or make any other code changes). So, for a final example of this, let's say you wanted to take DaGunn's power widgets framework but you wanted to change the "text highlight" color. What you would do then is this:
- Decompile DaGunn's framework in APK manager (option 9)
- Navigate to /projects/framework-res.apk/values/styles..xml
- Search for for "<item name="textColorHighlight">" and change the color HEX code
- Save the changes to styles.xml
- Compile the framework in APK manager (option 11)
- When asked if this is a system apk answer Y for yes
- When asked if you want to copy additional files to reduce the amount of errors answer Y for yes
- When prompted about the "keep" folder, open a file manager and navigate to /<apk_manager_folder>/keep and DELETE the resources.arsc file
- Go back to the APK manager window and press any button to finish the compile process
- Back in your file manager, go back to /<apk_manager_folder>/place-apk-here-for-modding/ folder, grab the unsignedFramework-res.apk, rename it to framework-res.apk and flash it however you flash it.
- Test your changes (in this example, the text highlight color)
This concludes my post.
thanks for the clarification beat.
but the problem was I was just opening framework-res.apk with 7zip, doing it like you're saying to do in the first part of your post above, and the battery meter would disappear instead of showing the mattedblues battery images instead of the circle ones.
if i left his .pngs in, the battery would show. if i replaced his with mine using 7zip, the battery would disappear.
this confused me because this is exactly the way that I've been integrating mattedblues into every framework i get. i open in 7zip, replace existing files with my own, and bam, everything works. this time it didnt!
this got fixed by extracting, replacing, and compressing again in apk manager 4.9.
i tried decompiling/recompiling simply because I was so out of ideas as to how else to go about it. I don't need to make any .xml changes to DaGunn's file because he had already integrated most of smooth sense with the percentage battery and v2 of the power widgets
anyways, thanks for the clarification.
beatblaster said:
So, in conclusion, if all you want to do is change the PNGs all you gotta do is (and you probably already know this but I'm including it to be thorough):
- Open archive (framework) in 7-zip
- Navigate to framework-res/res/drawable-hdpi
- Add your desired PNGs into the 7-zip window
- Close the 7-zip window and answer yes when 7zip asks if you want to update the archive
- Flash framework onto your phone
- All should be well
- When using this method there is no signing necessary!
Click to expand...
Click to collapse
max, not sure why this wouldnt work for you.
t3project said:
max, not sure why this wouldnt work for you.
Click to expand...
Click to collapse
no. this method is SUPPOSED TO WORK, as I said in the original post. this is how I've done every single change to framework-res.apk in the past. that is why I felt the need to ask for help. because the same thing that has always worked, suddenly wasn't working anymore!
for some reason, using 7zip WAS NOT WORKING to replace the battery .pngs....but ONLY those files. every other file was replaced using 7zip and they all worked. the only files I ended up having to replace through apk manager extract/compress method you gave me were the battery images.
thanks everyone
Max_Pain said:
no. this method is SUPPOSED TO WORK, as I said in the original post. this is how I've done every single change to framework-res.apk in the past. that is why I felt the need to ask for help. because the same thing that has always worked, suddenly wasn't working anymore!
for some reason, using 7zip WAS NOT WORKING to replace the battery .pngs....but ONLY those files. every other file was replaced using 7zip and they all worked. the only files I ended up having to replace through apk manager extract/compress method you gave me were the battery images.
thanks everyone
Click to expand...
Click to collapse
ohh i know. i use the way i told you because i just like to see the images while im playing with them. that way i know for sure whats up.
I heard you had to edit these .9 pictures files a certain way (When building a rom) Does anyone have a tutorial handy? I'm using Adobe Photoshop but didn't want to risk screwing the whole thing up
I'm not an expert, but if you are just themeing an existing 9patch file, you can drop the file into GIMP or whatever and it should be fine. That is as long as the image was unzipped from a ROM and not decompiled. If it's decompiled things can get hairy in my experience. If you are decompiling apk's I would drop the 9patch files into the 9patch tool located in the /tools folder of the android SDK. This editor will allow you to fix the pixel border around the image.
I don't have a guide but the #1 thing to do is to decompile the APK that you're working with. I know that you can just rename the .apk to .zip and extract stuff, but that will not allow you to edit the .9 files properly.(edit: at least not in Photoshop)
After you decompile the APK, edit the files as normal with one exception. You'll notice that all of the .9 files have a 1 pixel sort of blank area with some parts being black and some being white; that's the actual resizing stuff part of the .9 files. Edit your files while keeping that 1px edge intact. When done and saved, recompile the .apk and the .9 files will be good to go.