通过反编译SystemUI.apk,达到美化电量实时显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题外话:前几天学习了单刷包的制作教程,折腾了2天,终于学会了单刷包制作,然后就想美化通知栏电量的实时显示,又折腾了一天,毫无收获,我其实是想修改SystemUI.apk里面的
stat_sys_battery.xml文件和电量显示图片文件,但是老是反编译SystemUI.apk后全是smali类型的文件,最后了解是我的java环境没弄好,只装了jdk,却没有装adb和android sdk。
所以反编译不成功,然后我把adb和android sdk装好,配置好环境变量,再次反编译SystemUI.apk,就成功了。
下图就是反编译SystemUI.apk不成功的样本,全是smali文件:
最终效果
没修改之前的效果:
本人手机亲测美化电量后,实时电量显示效果:
言归正传,我就说一下这几天我美化电量的心得:
我之前看了论坛关于美化电量的教程,好多都说美化电量是在framework_res.apk中修改,达到美化
电量的效果,但是经过我的实践发现,华为d1四核的通知栏电量的美化修改应该在SystemUI.apk(该文件的路径:/system/app/SystemUI.apk,在手机中用re管理器可以看得到)中,而没有在framework_res.apk中,所以我们就反编译SystemUI.apk再修改后编译回来替换就可以了
反编译SystemUI.apk之前,必须配置好java环境,当然你如果之前就已经配置好java环境,不需再配置
ps:如果java环境没配置好,去反编译SystemUI.apk就会出现编译后全是smali类型文件,就会跟最上面那张图一样。
下面引用xda论坛中别人的帖子,该帖子明确的讲解了在windows中怎样配置java环境,该帖子作者:Setsuna_F_Seiei(表示感谢)
(1) JDK的安装及环境变量的配置
1. 去Oracle官方网站下载并安装JDK,下载地
址:/technetwork/java/javase/downloads注意是下载JDK,而不是JRE
JDK (Java Development Kit,Java开发工具包) JRE (Java Runtime Environment,Java运行环境) 你也可以点击以下链接直接下载JDK:
32位:/otn-p ... 32-windows-i586.exe
64位:/otn-p ... u32-windows-x64.exe
2. 配置环境变量下载并安装JDK之后,你需要在计算机的“系统属性”里配置以下环境变量:(步骤:在计算机的桌面上右击“我的电脑”,点击“属性”-“高级”-“环境变量”)变量名:JAVA_HOME 变量值:D:\java\jdk1.6.0_32 (JDK安装目录)
3. 测试JDK是否安装成功在计算机的“运行”(Win+R)里打开CMD
输入java – version 命令,如果出现以下提示,表示JDK安装成功!C:\Documents and Settings\Administrator>java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode)
(2) ADB的安装及环境变量的配置 1. 首先要去Google官方下载Android SDK,
你也可以点击以下链接直接下载Android
SDK:/android/installer_r18-windows.exe
2. 下载并安装Android SDK之后,打开SDK Manager,勾选Packages下面的Tools,只需要下载Android SDK Tools和Android SDK Platform-tools,大小为78MB,其他的不用下载。
3. 设置Android SDK环境变量1) 新建环境变量(步骤:在计算机的桌面上右击“我的电脑”,点击“属性”-“高级”-“环境变量”)
变量名:ANDROID_SDK_HOME 变量值:D:\Android\android-sdk (SDK安装目录)
2) 添加Path路径(一般来讲系统上默认都会有Path变量,我们只需要找到并编辑即可,直接在变量值后面添加以下变量值;如果不存在Path变量,那就新建一个吧)
变量名:Path
变量值:;%ANDROID_SDK_HOME%\tools;%ANDROID_SDK_HOME%\platform-tools (注意前面的分号)
4. 测试Android SDK和ADB是否安装成功
在计算机的“运行”(Win+R)里打开CMD,输入adb 命令,如果出现以下提示,表示Android SDK和ADB安装成功!
好了,java环境已经全部配置好了。
到此处,引用别人帖子结束。
继续往下走
然后可以反编译SystemUI.apk了,编译后文件夹的样子如下图:
我们要修改的地方有两处:
1.drawable文件下的stat_sys_battery.xml文件(该文件路径res\drawable文件下)
2.在文件夹res\drawable-hdpi中有关电量显示的图片
ps:在这,我们不修改充电时电量图标,只修改待机时放电的电量实时显示在stat_sys_battery.xml代码中,我们看到电量放电显示是跳跃性的。
我们要的是实时显示所剩的电量(也就是让他显示连续性),所以把它改为如下内容
<?xml version="1.0" encoding="utf-8"?>
<level-list
xmlns:android="/apk/res/android">
<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" /> <item android:drawable="@drawable/stat_sys_battery_10" android:maxLevel="10" /> <item android:drawable="@drawable/stat_sys_battery_11" android:maxLevel="11" /> <item android:drawable="@drawable/stat_sys_battery_12" android:maxLevel="12" /> <item android:drawable="@drawable/stat_sys_battery_13" android:maxLevel="13" /> <item android:drawable="@drawable/stat_sys_battery_14" android:maxLevel="14" /> <item android:drawable="@drawable/stat_sys_battery_15" android:maxLevel="15" /> <item android:drawable="@drawable/stat_sys_battery_16" android:maxLevel="16" /> <item android:drawable="@drawable/stat_sys_battery_17" android:maxLevel="17" /> <item android:drawable="@drawable/stat_sys_battery_18" android:maxLevel="18" /> <item android:drawable="@drawable/stat_sys_battery_19" android:maxLevel="19" /> <item android:drawable="@drawable/stat_sys_battery_20" android:maxLevel="20" /> <item android:drawable="@drawable/stat_sys_battery_21" android:maxLevel="21" /> <item android:drawable="@drawable/stat_sys_battery_22" android:maxLevel="22" /> <item android:drawable="@drawable/stat_sys_battery_23" android:maxLevel="23" /> <item android:drawable="@drawable/stat_sys_battery_24" android:maxLevel="24" /> <item android:drawable="@drawable/stat_sys_battery_25" android:maxLevel="25" /> <item android:drawable="@drawable/stat_sys_battery_26" android:maxLevel="26" /> <item android:drawable="@drawable/stat_sys_battery_27" android:maxLevel="27" /> <item android:drawable="@drawable/stat_sys_battery_28" android:maxLevel="28" /> <item android:drawable="@drawable/stat_sys_battery_29" android:maxLevel="29" /> <item android:drawable="@drawable/stat_sys_battery_30" android:maxLevel="30" /> <item android:drawable="@drawable/stat_sys_battery_31" android:maxLevel="31" /> <item android:drawable="@drawable/stat_sys_battery_32" android:maxLevel="32" /> <item android:drawable="@drawable/stat_sys_battery_33" android:maxLevel="33" /> <item android:drawable="@drawable/stat_sys_battery_34" android:maxLevel="34" /> <item android:drawable="@drawable/stat_sys_battery_35" android:maxLevel="35" /> <item android:drawable="@drawable/stat_sys_battery_36" android:maxLevel="36" /> <item android:drawable="@drawable/stat_sys_battery_37" android:maxLevel="37" /> <item android:drawable="@drawable/stat_sys_battery_38" android:maxLevel="38" /> <item android:drawable="@drawable/stat_sys_battery_39" android:maxLevel="39" /> <item android:drawable="@drawable/stat_sys_battery_40" android:maxLevel="40" />
<item android:drawable="@drawable/stat_sys_battery_42" android:maxLevel="42" /> <item android:drawable="@drawable/stat_sys_battery_43" android:maxLevel="43" /> <item android:drawable="@drawable/stat_sys_battery_44" android:maxLevel="44" /> <item android:drawable="@drawable/stat_sys_battery_45" android:maxLevel="45" /> <item android:drawable="@drawable/stat_sys_battery_46" android:maxLevel="46" /> <item android:drawable="@drawable/stat_sys_battery_47" android:maxLevel="47" /> <item android:drawable="@drawable/stat_sys_battery_48" android:maxLevel="48" /> <item android:drawable="@drawable/stat_sys_battery_49" android:maxLevel="49" /> <item android:drawable="@drawable/stat_sys_battery_50" android:maxLevel="50" /> <item android:drawable="@drawable/stat_sys_battery_51" android:maxLevel="51" /> <item android:drawable="@drawable/stat_sys_battery_52" android:maxLevel="52" /> <item android:drawable="@drawable/stat_sys_battery_53" android:maxLevel="53" /> <item android:drawable="@drawable/stat_sys_battery_54" android:maxLevel="54" /> <item android:drawable="@drawable/stat_sys_battery_55" android:maxLevel="55" /> <item android:drawable="@drawable/stat_sys_battery_56" android:maxLevel="56" /> <item android:drawable="@drawable/stat_sys_battery_57" android:maxLevel="57" /> <item android:drawable="@drawable/stat_sys_battery_58" android:maxLevel="58" /> <item android:drawable="@drawable/stat_sys_battery_59" android:maxLevel="59" /> <item android:drawable="@drawable/stat_sys_battery_60" android:maxLevel="60" /> <item android:drawable="@drawable/stat_sys_battery_61" android:maxLevel="61" /> <item android:drawable="@drawable/stat_sys_battery_62" android:maxLevel="62" /> <item android:drawable="@drawable/stat_sys_battery_63" android:maxLevel="63" /> <item android:drawable="@drawable/stat_sys_battery_64" android:maxLevel="64" /> <item android:drawable="@drawable/stat_sys_battery_65" android:maxLevel="65" /> <item android:drawable="@drawable/stat_sys_battery_66" android:maxLevel="66" /> <item android:drawable="@drawable/stat_sys_battery_67" android:maxLevel="67" /> <item android:drawable="@drawable/stat_sys_battery_68" android:maxLevel="68" /> <item android:drawable="@drawable/stat_sys_battery_69" android:maxLevel="69" /> <item android:drawable="@drawable/stat_sys_battery_70" android:maxLevel="70" /> <item android:drawable="@drawable/stat_sys_battery_71" android:maxLevel="71" /> <item android:drawable="@drawable/stat_sys_battery_72" android:maxLevel="72" /> <item android:drawable="@drawable/stat_sys_battery_73" android:maxLevel="73" /> <item android:drawable="@drawable/stat_sys_battery_74" android:maxLevel="74" /> <item android:drawable="@drawable/stat_sys_battery_75" android:maxLevel="75" /> <item android:drawable="@drawable/stat_sys_battery_76" android:maxLevel="76" /> <item android:drawable="@drawable/stat_sys_battery_77" android:maxLevel="77" /> <item android:drawable="@drawable/stat_sys_battery_78" android:maxLevel="78" /> <item android:drawable="@drawable/stat_sys_battery_79" android:maxLevel="79" /> <item android:drawable="@drawable/stat_sys_battery_80" android:maxLevel="80" /> <item android:drawable="@drawable/stat_sys_battery_81" android:maxLevel="81" /> <item android:drawable="@drawable/stat_sys_battery_82" android:maxLevel="82" /> <item android:drawable="@drawable/stat_sys_battery_83" android:maxLevel="83" /> <item android:drawable="@drawable/stat_sys_battery_84" android:maxLevel="84" />
<item android:drawable="@drawable/stat_sys_battery_86" android:maxLevel="86" />
<item android:drawable="@drawable/stat_sys_battery_87" android:maxLevel="87" />
<item android:drawable="@drawable/stat_sys_battery_88" android:maxLevel="88" />
<item android:drawable="@drawable/stat_sys_battery_89" android:maxLevel="89" />
<item android:drawable="@drawable/stat_sys_battery_90" android:maxLevel="90" />
<item android:drawable="@drawable/stat_sys_battery_91" android:maxLevel="91" />
<item android:drawable="@drawable/stat_sys_battery_92" android:maxLevel="92" />
<item android:drawable="@drawable/stat_sys_battery_93" android:maxLevel="93" />
<item android:drawable="@drawable/stat_sys_battery_94" android:maxLevel="94" />
<item android:drawable="@drawable/stat_sys_battery_95" android:maxLevel="95" />
<item android:drawable="@drawable/stat_sys_battery_96" android:maxLevel="96" />
<item android:drawable="@drawable/stat_sys_battery_97" android:maxLevel="97" />
<item android:drawable="@drawable/stat_sys_battery_98" android:maxLevel="98" />
<item android:drawable="@drawable/stat_sys_battery_99" android:maxLevel="99" />
<item android:drawable="@drawable/stat_sys_battery_100" android:maxLevel="100" />
</level-list>
就行了。
至于电量的图标修改,用我提供的电量图片替换就可了。
电量图片包在下面附件中。
替换方法是,把我提供图片复制到res\drawable-hdpi文件下就可以了,弹出是否替换,选替换即可。
到此,大致完成了。
现在就只需要用反编译工具编译成SystemUI.apk就可以了,替换/system/app/SystemUI.apk就ok 了
方法一:可以在手机上用re管理器替换/system/app/SystemUI.apk再重启就可以了
方法二:直接把我上传的powerbeauty.zip文件放入sd卡,在recovery模式下按刷机的方法刷入手机,就ok了。
反编译工具大家自己下载吧,网上和论坛上多的是(常用的反编译工具apktool,doapk,apk multi-tool 等)
我是个新手,第一次在安智上发教程贴,这都是我这几天定制rom学习的经验,可能写的不是很好,望大家多包涵。
我只是想跟大家多多交流,学习,希望能帮助到大家。
所有附件全在最下面。
昨天有机油说,4.1的系统刷了我的包,可以开机,但是不显示状态栏,所以今天更新4.1系统的SystemUI.apk文件,详情看下面附件。
怪我没说清楚,对不住大家。
在此说明一下:4.0的是基于b125固件修改的,其他的固件勿刷;4.1的是基于EmotionUI_4.1_B534 固件修改的,其他的固件勿刷;
b125固件和EmotionUI_4.1_B534固件我都已经测试过,能用。