Transparent Statusbar for Android (Cyanogenmod 7.0.3) MDPI (updated 6/30/11)

By | June 15, 2011

Description:

I went through alot of trouble figuring out this stupid little theme hack. I am using Cyanogenmod 7.0.3 on a Nook Color, so it uses a “MDPI” framework for its theme. Turns out there are close to 5 million threads on the subject and 99% of them are worthless. After 3 days of googling and trying random solutions, what you’re left with is 3 or 4 Posts that you have to combine and redact to even come close to figuring out what you need.

Here are several of the wrong “methods” that are described across all the android forums:

– Replacing the .PNG files in system/framework/framework-res.apk (you can open apk’s in 7zip btw)
– Replacing  just the statusbar .PNG files in system/app/SystemUI.apk
– Modifying the (compiled) binary XML within SystemUI.apk/res/layout/
– completely mucking with /system/framework/services.jar
– etc.. and so on.

Turns out, you dont need to touch framework-res.apk or ANYTHING else, specially not services.jar. framework-res.apk only needs to be modified if you are working on a secondary or third party theme. Resources for the default theme all come from the SystemUI.apk. I modified all the status_bar*.png files and title_bar_shadow.9.png, but I believe you only need to edit status_bar_background.png, statusbar_background.9.png, and statusbar_background_9.png. I’m not in the mood to go back and double check, maybe later.

What you would think is simple though, isn’t quite. You would THINK that just updating the PNG files would be enough. It’s not. I tried it a million times while trying all those other bad ideas. After the PNG files are modified, you also need to edit the file, classes.dex, which is in the root of SystemUI.apk. Turns out, .dex is yet another format only native to the Android platform. You can decompile and recompile them using smali/baksmali. Once you have decompiled the .dex file, you’ll be left with a bunch of files. For transparency on the statusbar to work, we need to edit two entries in StatusBarService.smali. After the 2 entries are changed, we save the file then recompile classes.dex, update the SystemUI.apk, then put it on our android device. That’s it. So while it’s not as simple as just editing the PNG files and updating the SystemUI.apk archive, it’s still a hell of a lot simpler than all these forum posts lead on. Actual instructions below.

Instructions:

  • Copy /system/app/SystemUI.apk to your sdcard and then to your computer where you can edit it
  • Install 7-Zip if you do not already have it. 7-Zip can browse into .apk files and let you update them easily.
  • Open SystemUI.apk in 7-Zip, do not extract it, just open it.
  • Browse to the folder res/drawable-mdpi/, then find all the png files that start with “status_bar”. Drag them into a folder on your desktop.
  • Open the PNG files in Paint.Net, Gimp, Photoshop, or whatever your favorite editor is capable of png transparency.
  • Delete the background. It’s now transparent. If you want semi-transparency, do that instead.
  • Select all of your modified PNG files and drag them back into same spot you got them from in the SystemUI.apk file
  • Press Backspace a couple times in 7-Zip to go back up to the root folder in the .apk, you should see classes.dex sitting there.
  • Drag classes.dex out to a folder
  • Download smali and baksmali from here:  http://code.google.com/p/smali/downloads/list, put them in the same dir you put classes.dex
  • Open a CMD prompt and change to that directory
  • Type the following (replace 1.2.6 with whatever version it was you dl’d):
  •                                      java -jar baksmali-1.2.6.jar -o classout/ classes.dex
  • Back in the folder, go into the new classout directory that was created.
  • Find the file named StatusBarService.smali, open it in a text editor.
  • Search for .line 1393, the line just under it should read: const/4 v5, -0x3. If it does not, but instead reads const/4 v5, 0x1 or const/4 v5, 0x2, change it.
  • Search for new-instance v0, Landroid/view/WindowManager$LayoutParams; a couple lines down you should see const/4 v5, 0x2. Change it to const/4 v5, -0x3 also.
  • Save the file and exit.
  • Go back to your CMD prompt and enter this command (this recompiles the .dex file with your changes):
  •                                     java -jar smali-1.2.6.jar classout -o classes.dex 
  • Add classes.dex back to where you got it from in SystemUI.apk.
  • Take your updated SystemUI.apk file and place it on your SD card. If you took it out, put the SD card back in your Android device. (instead of using a SD card you could use something else to move the files around, like dropbox).
  • Open up Terminal on your Android device, change to the directory you put the update SystemUI.apk file. ex: cd /sdcard/myupdate/
  • Type the following commands:
  •                           mount -o remount,rw /system/
  •                           cp -f SystemUI.apk /system/app
  •  The above command probably just crashed Launcher. Press Force Close .  Reboot your device.
  • The “Force Close” on the Status Bar after you replaced SystemUI.apk may loop and prevent you from pressing “reboot”. You can do a hard reset, or just keep pressing force close and each time also try to press the “reboot” option (that you brought up from the power button). You’ll eventually get to it.

That’s it. You should now have a transparent status bar.

Here is a working SystemUI.apk for a stock encore/MDPI Cyanogenmod 7.0.3 install with all the changes to the .dex file and PNGs already done.

*Update 6/30/11* My first SystemUI.apk had transparent status bar, but somewhere along the line I had changed the clock’s font color to White. This would make it so you could not see the clock when an app running had a white window. I’ve changed the clock color now to a light-ish blue color that is closer to the stock CM7 clock color and is visible with any background. This involved decompiling/recompiling SystemUI.apk and making changes to some XML files, which I might post more information on later because it can be pretty confusing.

SystemUI.zip

It should not be needed to be said, but I do not in any way take any responsibility if you brick your shit.  Theres no reason this should brick anything, but always remember to backup your files. At the most if you mess up, you can just reinstall Cyanogenmod.

After making the update, make sure to turn off Wallpaper Hack. It’s under Settings->ADW Launcher->System Preferences->Wallpaper Hack – Not doing so will result in the transparency only working with Live Wallpapers and not others (thanks to blane in the comments for reminding me).

14 thoughts on “Transparent Statusbar for Android (Cyanogenmod 7.0.3) MDPI (updated 6/30/11)

  1. Blane

    Finally!!!! This is just what I’ve been looking for. Works flawlessly once I disabled wallpaper hack in adwlauncher system settings.

  2. Aaron

    blane, Thanks for the reminder about the Wallpaper Hack. Glad it worked for you.

  3. Jerrold

    Just a note –
    Most importantly – THANK YOU. (all caps completely necessary in this instance)
    Secondly – I used this guide with a few adjustments and got it working on my HTC G2 / Desire Z
    -had to directly apply the java commands without the “java -jar” portions in CMD.
    -only had to change statusbar_background.9.png
    -only had to change the “New Instance” line of code

    Running CM7 Nightly 147 – HTC Desire Z / G2

    Thank you again!

  4. aaron m. Post author

    Thanks for the feedback Jerrold. Glad you found some use in it and thanks for clearing up the .png edits. I’m wondering if I only edited that one png if I would of still had to go back and edit the clock’s font color or not to keep it visibile in apps that use a white background.

  5. Pingback: Anonymous

  6. aaron m. Post author

    Thanks. Pretty clear the post was written by someone with a pre-elementary education. Hope you found the help you were searching for!

  7. Pingback: Scripts Directory of PHP, ASP, ASP.NET, Java, Javascript, Perl and more! - Scripts

  8. Max K.

    Would it be to much trouble to show all the png. files you need in the folder?

  9. Max K.

    Nevermind, I finally got that transparent status bar. Thank you so much!!

  10. Pingback: mendrugox » HTC Desire Mildwild CM-5.0 Transparent Status Bar

  11. app para aprender ingles con android

    Hello. Tengo 49 años y me hayo trabajando el inglés
    más o menos 9 años. Este comentario me ha parecido estupendo para aprender
    idioma inglés. Me ha sido muy rentable. Lo voy a ampliar a mis favoritos.
    Te doy las gracias por el relato.

  12. campamentos de verano en carolina princess boat in detroit

    Qué tal. Me ha satisfecho repasar su reseña. Me ha parecido una exposición muy seductora, pese a que,
    en varios asuntos difiero un poco de tu dictamen. He contemplado que tienes más publicaciones, garantizo cogerme un momento
    para interpretarlas. Ten por claro que seguiré todas tus publicaciones.
    Te congratulo por tu sitio web. Un afectuoso saludo.

Leave a Reply

Your email address will not be published. Required fields are marked *