[AT&T Samsung Galaxy S II Skyrocket SGH-I727] car vs driver:
I've had a bunch of questions around how to create signal and battery icon themes since I posted the ported versions from SKY-ICS to SKY-JB. I decided that making a tutorial on how I ported them would be beneficial to anyone who wants to make their own. This tutorial is based on my work from those ports, so you may have to perform slightly different steps for different roms - I believe the big difference is how you use and install the frameworks for decompiling SystemUI.apk.

Couple of things to note before I begin ...

1. YMMV - this is meant as a guide only, your results might not be as expected. Remember to nandroid before trying something new :)

2. I will admit, this is basically a hack. I cobbled together a bunch of different things as you will see, so there may very well be a better way of doing this.

3. Your Kernel must support 1% battery increments. CM10 does, so I'm sticking with that.

4. Instructions are based on my experience with doing this on my MacBook Pro. The steps should also work just fine on Ubnutu 12.04 as I have it all setup there to. No idea how these would translate into Windows, please don't ask - I don't use Windows. (If someone knows the setup, please PM me and I'll it here.)

5. Beyond which OS you use, the steps should basically be the same once you get past the setup.

6. All shell commands are noted below in RED.

7. READ THE ENTIRE THREAD BEFORE YOU DO ANYTHING.

You are going to need to setup your environment and gather up some tools. Here is a rough guide and links to get what you need. I'm not going to get into too much detail on the setup, I assume you know what you're doing here.

1. Install the android SDK on your machine. http://developer.android.com/sdk/installing/index.html

Make sure that you install the optional platform tools.

You will also need to make sure the path to the platform tools is setup properly in your profile (or environment variables).

2. Grab the apktool.jar here: http://xdaforums.com/showthread.php?t=1755243

3. You will also need to create the apktool script ...

In /usr/local/bin create a new file in your favorite editor called apktool

Paste in the following code:

#!/bin/bash
#
# Copyright (C) 2007 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This script is a wrapper for smali.jar, so you can simply call "smali",
# instead of java -jar smali.jar. It is heavily based on the "dx" script
# from the Android SDK

# Set up prog to be the path of this script, including following symlinks,
# and set up progdir to be the fully-qualified pathname of its directory.
prog="$0"
while [ -h "${prog}" ]; do
newProg=`/bin/ls -ld "${prog}"`
echo ${newProg}

newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
if expr "x${newProg}" : 'x/' >/dev/null; then
prog="${newProg}"
else
progdir=`dirname "${prog}"`
prog="${progdir}/${newProg}"
fi
done
oldwd=`pwd`
progdir=`dirname "${prog}"`
cd "${progdir}"
progdir=`pwd`
prog="${progdir}"/`basename "${prog}"`
cd "${oldwd}"

jarfile=apktool.jar

libdir="$progdir"
if [ ! -r "$libdir/$jarfile" ]
then
echo `basename "$prog"`": can't find $jarfile"
exit 1
fi

javaOpts=""

# If you want DX to have more memory when executing, uncomment the following
# line and adjust the value accordingly. Use "java -X" for a list of options
# you can pass here.
#
javaOpts="-Xmx256M"

# Alternatively, this will extract any parameter "-Jxxx" from the command line
# and pass them to Java (instead of to dx). This makes it possible for you to
# add a command-line parameter such as "-JXmx256M" in your ant scripts, for
# example.
while expr "x$1" : 'x-J' >/dev/null; do
opt=`expr "$1" : '-J\(.*\)'`
javaOpts="${javaOpts} -${opt}"
shift
done

if [ "$OSTYPE" = "cygwin" ] ; then
jarpath=`cygpath -w "$libdir/$jarfile"`
else
jarpath="$libdir/$jarfile"
fi

exec java $javaOpts -jar "$jarpath" "$@"

Save the file and make it executable.

That should be it ... if I missed anything obvious, let me know. I did this part based on memory :)

Once you get setup, you can do some quick tests to see if you're setup properly.

1. Connect your phone to the USB on your machine.

2. In a shell, issue the following command: adb devices

You should get some output like this (assuming you haven't already started the server):

[COLOR="Red"]dcmpb:~ carvsdriver$ adb devices[/COLOR]
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
6c615286	device

dcmpb:~ carvsdriver$

You may not get the daemon information if the server is already running. That's fine.

If you do not see a device attached, you setup something wrong.

3. Make sure you have root adb on your device:

[COLOR="Red"]dcmpb:~ carvsdriver$ adb root[/COLOR]
restarting adbd as root
[COLOR="red"]dcmpb:~ carvsdriver$ adb remount[/COLOR]
remount succeeded
dcmpb:~ carvsdriver$

If you don't you'll need to go into developer options on the phone and give ADB root access.

Made it this far? Cool ... now on to fiddling with the SysteUI.apk files to make a battery or icon theme ...

1. Create yourself a new directory wherever you want, we'll call it themes for the rest of the thread.

2. Go into your themes directory and type issue the following commands to pull the SystemUI.apk and framework-res.apk

[COLOR="red"]dcmpb:themes carvsdriver$ adb pull /system/app/SystemUI.apk[/COLOR]
1535 KB/s (1266012 bytes in 0.805s)
[COLOR="red"]dcmpb:themes carvsdriver$ adb pull /system/framework/framework-res.apk[/COLOR]
2784 KB/s (10130235 bytes in 3.552s)
dcmpb:themes carvsdriver$

3. Now you need to install the framework. Notice that I aliased them with tw, that's important.

[COLOR="red"]dcmpb:themes carvsdriver$ apktool if framework-res.apk tw[/COLOR]
I: Framework installed to: /Users/carvsdriver/Library/Application Support/apktool/framework/1-tw.apk
dcmpb:themes carvsdriver$

All right, now we can move onto decompiling the SystemUI.apk file ...

[COLOR="red"]dcmpb:themes carvsdriver$ apktool d -t tw SystemUI.apk[/COLOR]
I: Baksmaling...
I: Loading resource table...
I: Loaded.
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /Users/carvsdriver/Library/Application Support/apktool/framework/1-tw.apk
I: Loaded.
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Done.
I: Copying assets and libs...
dcmpb:themes carvsdriver$

Now you should have a new directory called SystemUI that contains the decompiled SystemUI.apk data.

You'll now want to navigate to SystemUI/res/drawable-hdpi.

That location contains the icons for various things, most importantly the battery and signal icons. They will start with stat_sys_battery and stat_sys_signal. For the battery, there are two sets of images you will need to replace. The animations and non-animations. Basically, all the system does is flip between the two related icons when charging. Also, keep in mind these are all transparent png files.

Replace the images with what you want.

Also, notice that there aren't 100 images for each battery % in the stock rom. This is what you'll be adding. Follow the naming convention when adding the images: stat_sys_battery_0.png to stat_sys_battery_100.png and stat_sys_battery_anim0.png to stat_sys_battery_anim100.png.

For the signals, just replace the ones that are there with your new png files as desired.

Next, you need to update the xml.

Navigate to the folder: SystemUI/res/drawable

The first file we are going to edit is stat_sys_battery_charge.xml

You'll need to replace the current animation xml with the following, starting at 0 and going up to 100:

<item android:maxLevel="0">
<animation-list android:oneshot="false"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:duration="1500" android:drawable="@drawable/stat_sys_battery_charge_anim0" />
<item android:duration="500" android:drawable="@drawable/stat_sys_battery_0" />
</animation-list>
</item>
<item android:maxLevel="1">
<animation-list android:oneshot="false"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:duration="1500" android:drawable="@drawable/stat_sys_battery_charge_anim1" />
<item android:duration="500" android:drawable="@drawable/stat_sys_battery_1" />
</animation-list>
</item>
<item android:maxLevel="2">
<animation-list android:oneshot="false"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:duration="1500" android:drawable="@drawable/stat_sys_battery_charge_anim2" />
<item android:duration="500" android:drawable="@drawable/stat_sys_battery_2" />
</animation-list>
</item>

Next, you need to update stat_sys_battery.xml pretty much the same way, only without the animation bit ... from 0 to 100

<item android:drawable="@drawable/stat_sys_battery_0" android:maxLevel="0" />
<item android:drawable="@drawable/stat_sys_battery_1" android:maxLevel="1" />
<item android:drawable="@drawable/stat_sys_battery_2" android:maxLevel="2" />
<item android:drawable="@drawable/stat_sys_battery_3" android:maxLevel="3" />
<item android:drawable="@drawable/stat_sys_battery_4" android:maxLevel="4" />
<item android:drawable="@drawable/stat_sys_battery_5" android:maxLevel="5" />
<item android:drawable="@drawable/stat_sys_battery_6" android:maxLevel="6" />
<item android:drawable="@drawable/stat_sys_battery_7" android:maxLevel="7" />
<item android:drawable="@drawable/stat_sys_battery_8" android:maxLevel="8" />
<item android:drawable="@drawable/stat_sys_battery_9" android:maxLevel="9" />

Ok, now you've made all the changes you need to make to the base files. Now for the fun part, packaging it up and testing.

Go back to you themes folder.

Create a new folder from there called res

Go into res and create two new folders called drawable and drawable-hdpi

Copy your new images into the drawable-hdpi folder created above. You new images will now be in two places. The drawable-hdpi folder buried in the decompiled SystemUI folder and in the new one. So, you'll look like this ...

themes/SystemUI/res/drawable-hdpi (new images here)

themes/res/drawable-hdpi (new images here too)

Now we need to recompile the SystemUI.apk file.

[COLOR="red"]dcmpb:themes carvsdriver$ apktool b SystemUI[/COLOR]
I: Checking whether sources has changed...
I: Smaling...
I: Checking whether resources has changed...
I: Building resources...
I: Building apk file...
dcmpb:themes carvsdriver$

You will notice a couple new directories created in the SystemUI directory at this point.

This is basically where the hack comes in. When I recompiled, the new version located in SystemUI/dist wouldn't work on my phone. So the following steps was how I solved the problem. I'm pretty sure it had something to do with signing the file and instead of going that route I cheated ...

We need to push the new information into the old SystemUI.apk we pulled from the phone earlier. So, I hope you didn't delete it. I'll assume it is still in your themes directory. If not, repull it and put it there.

1. Navigate to SystemUI/build/apk/res/drawable

2. Copy the stat_sys_battery.xml and stat_sys_battery_charge.xml files and paste them to the new themes/res/drawable directory. Notice that they are now compiled and look like garbled junk, that's exactly what we want.

3. Now you need to add the new images to the unmodified SystemUI.apk file from your phone. Notice the flags I use on the zip command, this forces it to be recursive and applies no compression.

[COLOR="red"]dcmpb:themes carvsdriver$ zip -r0 SystemUI.apk ./res[/COLOR]
updating: res/drawable-hdpi/stat_sys_battery_0.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_100.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_15.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_28.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_43.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_57.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_71.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_85.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim0.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim100.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim15.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim28.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim43.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim57.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim71.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim85.png (stored 0%)
updating: res/drawable/stat_sys_battery.xml (stored 0%)
updating: res/drawable/stat_sys_battery_charge.xml (stored 0%)
updating: res/ (stored 0%)
updating: res/drawable/ (stored 0%)
updating: res/drawable-hdpi/ (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_1.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_10.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_11.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_12.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_13.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_14.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_16.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_17.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_18.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_19.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_2.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_20.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_21.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_22.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_23.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_24.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_25.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_26.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_27.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_29.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_3.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_30.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_31.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_32.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_33.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_34.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_35.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_36.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_37.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_38.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_39.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_4.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_40.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_41.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_42.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_44.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_45.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_46.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_47.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_48.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_49.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_5.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_50.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_51.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_52.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_53.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_54.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_55.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_56.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_58.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_59.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_6.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_60.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_61.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_62.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_63.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_64.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_65.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_66.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_67.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_68.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_69.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_7.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_70.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_72.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_73.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_74.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_75.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_76.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_77.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_78.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_79.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_8.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_80.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_81.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_82.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_83.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_84.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_86.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_87.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_88.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_89.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_9.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_90.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_91.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_92.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_93.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_94.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_95.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_96.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_97.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_98.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_99.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim1.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim10.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim11.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim12.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim13.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim14.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim16.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim17.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim18.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim19.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim2.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim20.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim21.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim22.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim23.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim24.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim25.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim26.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim27.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim29.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim3.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim30.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim31.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim32.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim33.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim34.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim35.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim36.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim37.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim38.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim39.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim4.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim40.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim41.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim42.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim44.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim45.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim46.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim47.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim48.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim49.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim5.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim50.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim51.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim52.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim53.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim54.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim55.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim56.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim58.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim59.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim6.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim60.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim61.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim62.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim63.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim64.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim65.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim66.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim67.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim68.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim69.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim7.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim70.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim72.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim73.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim74.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim75.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim76.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim77.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim78.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim79.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim8.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim80.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim81.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim82.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim83.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim84.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim86.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim87.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim88.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim89.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim9.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim90.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim91.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim92.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim93.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim94.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim95.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim96.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim97.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim98.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_anim99.png (stored 0%)
updating: res/drawable-hdpi/stat_sys_battery_charge_animfull.png (stored 0%)
dcmpb:themes carvsdriver$

And that's it. Now you can test your phone by pushing the SystemUI.apk file to your phone:

[COLOR="red"]dcmpb:themes carvsdriver$ adb root[/COLOR]
adbd is already running as root
[COLOR="red"]dcmpb:themes carvsdriver$ adb remount
[/COLOR]remount succeeded
[COLOR="red"]dcmpb:themes carvsdriver$ adb shell stop
dcmpb:themes carvsdriver$ adb push SystemUi.apk /system/app/[/COLOR]
4279 KB/s (1266012 bytes in 0.288s)
[COLOR="red"]dcmpb:themes carvsdriver$ adb shell start[/COLOR]
dcmpb:themes carvsdriver$

Your phone will reboot when you issue the adb shell start command. That's normal. When it comes back up, your new theme will be applied.

All you need to do now for distribution is create a flashable zip with the updated SystemUI.apk file.

Hops this helps as a rough guide for some DIY modding. Let me know if I missed any steps or if you run into any issues.

Now, two more things ...

1. Go reread this post before you start.

2. Nandroid

3. Now go read this again ...

4. Ok, I think you should be good to give it a try now.

Credits and thanks (feel free to spam their thanks button):

StolenVW

iBotPeaches

ruben00