mb865 1%电量、高级关机菜单修改教程
附件为deodex后修改的3个文件,deodex的系统可以直接替换,建议在PC端用adb替换。
所需工具请自行下载,本帖不提供
两个教程分开写的,都需要修改framework-res.apk,可以合并修改
附件给传到1%电量的帖子了,给出链接,自己去下载: http://bbs.gfan.com/android-3534500-1-1.html
截屏:
国行2.3.6的机油,只需完成第一步deodex,然后就可以用附件替换了,不要要完成二、三,我已经替大家修改好了!
需要的工具:
xultimate(ver 2.3.3)
apktool
deotool
emeditor
一、deodex
手机连接电脑,确认开发选项选中
xultimate工具包,运行Main.exe,
执行5,pull and deodex all
将done的两个文件夹考到sdcard根目录
在adb目录执行如下代码:
adb shell
su
stop
mount -o rw,remount -t ext3 /dev/block/mmcblk1p21 /system
cp /sdcard/done_app/* /system/app/
cp /sdcard/done_frame/* /system/framework/
rm /system/app/*.odex
rm /system/framework/*.odex
mount -o ro,remount -t ext3 /dev/block/mmcblk1p21 /system
reboot
重启需要5分钟左右,系统重新构建david-cache
二、1%电量修改
提取framework-res.apk、services.jar到PC
利用apktool,解包framework-res.apk
修改framework-res.apk:
(电量脚本、图标文件可以在a大的framework-res中提取,也可以自己找)
将脚本及图片放到drawable-hdpi中,将两个脚本复制一份放到drawable种
打包framework-res-new.apk
打开new版及原版framework-res.apk,用new版中的resources.arsc、drawable、drawable-hdpi替换原版中的文件,压缩时注意选择“存储”
framework-res.apk修改完成
修改services.jar
将services.jar用winrar打开,将class.dex提取到deotool文件夹
解包class.dex
打开BatteryService.smali,找到
.field private mBatteryLevel:I
语句,将该语句替换为
.field private mBatteryLevel:I
.field private mBatteryLevel1Step:I
搜索
const-string v3, "level"
iget v4, p0, Lcom/android/server/BatteryService;->mBatteryLevel:I
语句,替换为
const-string v3, "level"
iget v4, p0, Lcom/android/server/BatteryService;->mBatteryLevel:I
invoke-direct {p0}, Lcom/android/server/BatteryService;->getBatteryLevel1Step()V
iget v4, p0, Lcom/android/server/BatteryService;->mBatteryLevel1Step:I
invoke-virtual {v2, v3, v4}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;
然后到文件的结尾处添加如下部分
.method private getBatteryLevel1Step()V
.locals 8
.prologue
.line 30
const/4 v4, 0x0
.line 32
.local v4, reader:Ljava/io/FileReader;
:try_start_0
new-instance v5, Ljava/io/FileReader;
const-string v6, "/sys/class/power_supply/battery/charge_counter"
invoke-direct {v5, v6}, Ljava/io/FileReader;-><init>(Ljava/lang/String;)V
:try_end_0
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_1
.end local v4 #reader:Ljava/io/FileReader;
.local v5, reader:Ljava/io/FileReader;
move-object v4, v5
.line 35
.end local v5 #reader:Ljava/io/FileReader;
.restart local v4 #reader:Ljava/io/FileReader;
:goto_0
const/16 v6, 0x14
:try_start_1
new-array v1, v6, [C
.line 36
.local v1, buf:[C
invoke-virtual {v4, v1}, Ljava/io/FileReader;->read([C)I
move-result v3
.line 37
.local v3, read:I
invoke-virtual {v4}, Ljava/io/FileReader;->close()V
.line 38
new-instance v0, Ljava/lang/String;
const/4 v6, 0x0
invoke-direct {v0, v1, v6, v3}, Ljava/lang/String;-><init>([CII)V
.line 39
.local v0, batteryLevelsysfs:Ljava/lang/String;
const-string v6, "\n"
const-string v7, ""
invoke-virtual {v0, v6, v7}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
move-result-object v0
.line 40
invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
move-result v2
.line 41
.local v2, mBatteryLevel1Step:I
const/16 v6, 0x64
if-lt v2, v6, :cond_0
.line 42
const/16 v2, 0x64
.line 45
:cond_0
#sget-object v6, Ljava/lang/System;->out:Ljava/io/PrintStream;
#invoke-virtual {v6, v2}, Ljava/io/PrintStream;->println(I)V
iput v2, p0, Lcom/android/server/BatteryService;->mBatteryLevel1Step:I
:try_end_1
.catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_0
.line 52
.end local v0 #batteryLevelsysfs:Ljava/lang/String;
.end local v1 #buf:[C
.end local v2 #mBatteryLevel1Step:I
.end local v3 #read:I
:goto_1
return-void
.line 48
:catch_0
move-exception v6
goto :goto_1
.line 33
:catch_1
move-exception v6
goto :goto_0
.end method
保存关闭,然后打包class.dex
用winrar将services.jar打开,将生成的class.dex替换原版的文件,注意选择“存储”
完成services.jar修改。
将修改后的framework-res.apk及services.jar放到adb文件夹,cmd在该目录执行:
adb push framework-res.apk /sdcard/
adb push services.jar /sdcard/
adb shell
su
mount -o rw,remount -t ext3 /dev/block/mmcblk1p21 /system
cp /sdcard/framework-res.apk /system/framework/
cp /sdcard/services.jar /system/framework/
chmod 644 /system/framework/framework-res.apk
chmod 644 /system/framework/services.jar
reboot
机器重启,然后就能看到1%电量显示了
三、高级关机菜单修改
提取framework-res.apk、android.policy.jar到PC
1.修改framework-res.apk
反编译后添加ic_lock_reboot.png图片到res\drawable-hdpi\目录下。
打开res\values\strings.xml,在最下面添加:
<string name="reboot">Reboot</string>
打开res\values-zh-rCN\strings.xml,在最下面添加:
<string name="reboot">重启</string>
打开res\values\public.xml,找到<public type="string" name=XXXXX> 的最后一行,在这个后面添加以下代码:
<public type="string" name="reboot" id="0x010404eb" />
再找到 <public type="drawable" name="stat_sys_batteryXXX的最后一行,,在这个后面添加以下代码:
<public type="drawable" name="ic_lock_reboot" id="0x01080521" />
重新编译framework-res为framework-res-new.apk,winrar打开new版及原版framework-res.apk,用new版中的resources.arsc、drawable-hdpi替换原版中的文件,压缩时注意选择“存储”
framework-res.apk修改完成
2.android.policy.jar修改
winrar打开android.policy.jar,将class.dex提取到deotool文件夹
解包class.dex,然后打开文件classes\com\android\internal\policy\impl\GlobalActions.smali
在
.method private createDialog()Landroid/app/AlertDialog;
范围内(电源选项)查找
const/4 v10, 0x4
修改为
const/4 v10, 0x5
然后找到
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$4;
const v2, 0x1080030
const v3, 0x104013c
invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$4;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
aput-object v1, v0, v13
在该段代码后添加代码:
const/4 v1, 0x4
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$10;
const v3, 0x1080521
const v4, 0x10404eb
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$10;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
aput-object v2, v0, v1
保存GlobalActions.smali,然后将GlobalActions$4.smali复制一份粘贴到同文件夹,改名为GlobalActions$10.smali
打开GlobalActions$10.smali
替换GlobalActions$4为GlobalActions$10,一共三处
找到
invoke-static {v0, v2}, Lcom/android/internal/app/ShutdownThread;->shutdown(Landroid/content/Context;Z)V
将该语句替换为
const-string v1, "now"
invoke-static {v0, v1, v2}, Lcom/android/internal/app/ShutdownThread;->reboot(Landroid/content/Context;Ljava/lang/String;Z)V
保存后关闭该文件
打包class.dex,然后winrar打开android.policy.jar,将新生成的class.dex替换,注意选择“存储”
3.将修改后的这两个文件写回手机:
adb push framework-res.apk /sdcard/
adb push android.policy.jar /sdcard/
adb shell
su
mount -o rw,remount -t ext3 /dev/block/mmcblk1p21 /system
cp /sdcard/framework-res.apk /system/framework/
cp /sdcard/android.policy.jar /system/framework/
chmod 644 /system/framework/framework-res.apk
chmod 644 /system/framework/android.policy.jar
reboot
重启,大功告成!
附件为deodex后修改的3个文件,deodex的系统可以直接替换,建议在PC端用adb替换。
所需工具请自行下载,本帖不提供
两个教程分开写的,都需要修改framework-res.apk,可以合并修改
附件给传到1%电量的帖子了,给出链接,自己去下载: http://bbs.gfan.com/android-3534500-1-1.html
截屏:
国行2.3.6的机油,只需完成第一步deodex,然后就可以用附件替换了,不要要完成二、三,我已经替大家修改好了!
需要的工具:
xultimate(ver 2.3.3)
apktool
deotool
emeditor
一、deodex
手机连接电脑,确认开发选项选中
xultimate工具包,运行Main.exe,
执行5,pull and deodex all
将done的两个文件夹考到sdcard根目录
在adb目录执行如下代码:
adb shell
su
stop
mount -o rw,remount -t ext3 /dev/block/mmcblk1p21 /system
cp /sdcard/done_app/* /system/app/
cp /sdcard/done_frame/* /system/framework/
rm /system/app/*.odex
rm /system/framework/*.odex
mount -o ro,remount -t ext3 /dev/block/mmcblk1p21 /system
reboot
重启需要5分钟左右,系统重新构建david-cache
二、1%电量修改
提取framework-res.apk、services.jar到PC
利用apktool,解包framework-res.apk
修改framework-res.apk:
(电量脚本、图标文件可以在a大的framework-res中提取,也可以自己找)
将脚本及图片放到drawable-hdpi中,将两个脚本复制一份放到drawable种
打包framework-res-new.apk
打开new版及原版framework-res.apk,用new版中的resources.arsc、drawable、drawable-hdpi替换原版中的文件,压缩时注意选择“存储”
framework-res.apk修改完成
修改services.jar
将services.jar用winrar打开,将class.dex提取到deotool文件夹
解包class.dex
打开BatteryService.smali,找到
.field private mBatteryLevel:I
语句,将该语句替换为
.field private mBatteryLevel:I
.field private mBatteryLevel1Step:I
搜索
const-string v3, "level"
iget v4, p0, Lcom/android/server/BatteryService;->mBatteryLevel:I
语句,替换为
const-string v3, "level"
iget v4, p0, Lcom/android/server/BatteryService;->mBatteryLevel:I
invoke-direct {p0}, Lcom/android/server/BatteryService;->getBatteryLevel1Step()V
iget v4, p0, Lcom/android/server/BatteryService;->mBatteryLevel1Step:I
invoke-virtual {v2, v3, v4}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;
然后到文件的结尾处添加如下部分
.method private getBatteryLevel1Step()V
.locals 8
.prologue
.line 30
const/4 v4, 0x0
.line 32
.local v4, reader:Ljava/io/FileReader;
:try_start_0
new-instance v5, Ljava/io/FileReader;
const-string v6, "/sys/class/power_supply/battery/charge_counter"
invoke-direct {v5, v6}, Ljava/io/FileReader;-><init>(Ljava/lang/String;)V
:try_end_0
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_1
.end local v4 #reader:Ljava/io/FileReader;
.local v5, reader:Ljava/io/FileReader;
move-object v4, v5
.line 35
.end local v5 #reader:Ljava/io/FileReader;
.restart local v4 #reader:Ljava/io/FileReader;
:goto_0
const/16 v6, 0x14
:try_start_1
new-array v1, v6, [C
.line 36
.local v1, buf:[C
invoke-virtual {v4, v1}, Ljava/io/FileReader;->read([C)I
move-result v3
.line 37
.local v3, read:I
invoke-virtual {v4}, Ljava/io/FileReader;->close()V
.line 38
new-instance v0, Ljava/lang/String;
const/4 v6, 0x0
invoke-direct {v0, v1, v6, v3}, Ljava/lang/String;-><init>([CII)V
.line 39
.local v0, batteryLevelsysfs:Ljava/lang/String;
const-string v6, "\n"
const-string v7, ""
invoke-virtual {v0, v6, v7}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
move-result-object v0
.line 40
invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
move-result v2
.line 41
.local v2, mBatteryLevel1Step:I
const/16 v6, 0x64
if-lt v2, v6, :cond_0
.line 42
const/16 v2, 0x64
.line 45
:cond_0
#sget-object v6, Ljava/lang/System;->out:Ljava/io/PrintStream;
#invoke-virtual {v6, v2}, Ljava/io/PrintStream;->println(I)V
iput v2, p0, Lcom/android/server/BatteryService;->mBatteryLevel1Step:I
:try_end_1
.catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_0
.line 52
.end local v0 #batteryLevelsysfs:Ljava/lang/String;
.end local v1 #buf:[C
.end local v2 #mBatteryLevel1Step:I
.end local v3 #read:I
:goto_1
return-void
.line 48
:catch_0
move-exception v6
goto :goto_1
.line 33
:catch_1
move-exception v6
goto :goto_0
.end method
保存关闭,然后打包class.dex
用winrar将services.jar打开,将生成的class.dex替换原版的文件,注意选择“存储”
完成services.jar修改。
将修改后的framework-res.apk及services.jar放到adb文件夹,cmd在该目录执行:
adb push framework-res.apk /sdcard/
adb push services.jar /sdcard/
adb shell
su
mount -o rw,remount -t ext3 /dev/block/mmcblk1p21 /system
cp /sdcard/framework-res.apk /system/framework/
cp /sdcard/services.jar /system/framework/
chmod 644 /system/framework/framework-res.apk
chmod 644 /system/framework/services.jar
reboot
机器重启,然后就能看到1%电量显示了
三、高级关机菜单修改
提取framework-res.apk、android.policy.jar到PC
1.修改framework-res.apk
反编译后添加ic_lock_reboot.png图片到res\drawable-hdpi\目录下。
打开res\values\strings.xml,在最下面添加:
<string name="reboot">Reboot</string>
打开res\values-zh-rCN\strings.xml,在最下面添加:
<string name="reboot">重启</string>
打开res\values\public.xml,找到<public type="string" name=XXXXX> 的最后一行,在这个后面添加以下代码:
<public type="string" name="reboot" id="0x010404eb" />
再找到 <public type="drawable" name="stat_sys_batteryXXX的最后一行,,在这个后面添加以下代码:
<public type="drawable" name="ic_lock_reboot" id="0x01080521" />
重新编译framework-res为framework-res-new.apk,winrar打开new版及原版framework-res.apk,用new版中的resources.arsc、drawable-hdpi替换原版中的文件,压缩时注意选择“存储”
framework-res.apk修改完成
2.android.policy.jar修改
winrar打开android.policy.jar,将class.dex提取到deotool文件夹
解包class.dex,然后打开文件classes\com\android\internal\policy\impl\GlobalActions.smali
在
.method private createDialog()Landroid/app/AlertDialog;
范围内(电源选项)查找
const/4 v10, 0x4
修改为
const/4 v10, 0x5
然后找到
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$4;
const v2, 0x1080030
const v3, 0x104013c
invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$4;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
aput-object v1, v0, v13
在该段代码后添加代码:
const/4 v1, 0x4
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$10;
const v3, 0x1080521
const v4, 0x10404eb
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$10;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
aput-object v2, v0, v1
保存GlobalActions.smali,然后将GlobalActions$4.smali复制一份粘贴到同文件夹,改名为GlobalActions$10.smali
打开GlobalActions$10.smali
替换GlobalActions$4为GlobalActions$10,一共三处
找到
invoke-static {v0, v2}, Lcom/android/internal/app/ShutdownThread;->shutdown(Landroid/content/Context;Z)V
将该语句替换为
const-string v1, "now"
invoke-static {v0, v1, v2}, Lcom/android/internal/app/ShutdownThread;->reboot(Landroid/content/Context;Ljava/lang/String;Z)V
保存后关闭该文件
打包class.dex,然后winrar打开android.policy.jar,将新生成的class.dex替换,注意选择“存储”
3.将修改后的这两个文件写回手机:
adb push framework-res.apk /sdcard/
adb push android.policy.jar /sdcard/
adb shell
su
mount -o rw,remount -t ext3 /dev/block/mmcblk1p21 /system
cp /sdcard/framework-res.apk /system/framework/
cp /sdcard/android.policy.jar /system/framework/
chmod 644 /system/framework/framework-res.apk
chmod 644 /system/framework/android.policy.jar
reboot
重启,大功告成!