精华 | |
金钱 | BA |
威望 | 点 |
贡献值 | 点 |
爱心 | 点 |
经验 | 点 |
注册时间 | 2011-6-16 |
最后登录 | 1970-1-1 |
在线时间 | 小时 |
| |
| |
| |
|
立即注册,加入爱黑武论坛的大家庭!爱黑武,爱上搞机生活!
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 ihei5.com 于 2011-9-13 14:48 编辑
原帖来自xda
英文好的直接看这里http://forum.xda-developers.com/showthread.php?t=811532
第一步
添加字符串
首先反编译framework-res.apk
打开values\strings.xml,然后在里面加上
- <string name="reboot_recovery">Recovery</string>
- <string name="reboot_download">Download</string>
- <string name="reboot">Reboot</string>
复制代码 保存,关闭
第二步
打开values\public.xml,分配刚刚加上去的字符串id
具体做法是,翻到文件最后,查看最后一个字符串的id,假设为10403c2,搜索10403c3,看看是否已经有此id了,没有的话,添加代码
- <public type="string" name="reboot_recovery" id="0x010403c3" />
- <public type="string" name="reboot_download" id="0x010403c4" />
- <public type="string" name="reboot" id="0x010403c5" />
复制代码 如果有,可以继续搜10403c4······
第三步
现在可以在图片资源文件夹(res\drawable-hdpi,res\drawable-mdpi,res\drawable-ldpi)加上自己喜欢的图标了
为了方便,以下规定图标名字为reboot.png recovery.png download.png
实际上,大家可以自己命名图标名字
然后
为刚刚加上的图标和刚刚分配的id连接起来
打开values\public.xml,继续添加代码
- <public type="drawable" name="reboot" id="0x010803aa" />
- <public type="drawable" name="recovery" id="0x010803ab" />
- <public type="drawable" name="download" id="0x010803ac" />
复制代码 保存,关闭
现在framework-res.apk文件弄好了,剩下的编译就不用多说了
接下来弄另外一个文件framework.jar
目的是使关机选项有作用,能重启
反编译framework.jar(方法自己百度)
打开com\android\internal\app\ShutdownThread.smali
在第37行添加代码
- .field public static mReboot:I
复制代码 然后,转到第1463行,注意,此行前一个代码应该是"invoke-static {}, Landroid/os/Power;->shutdown()V"
在此行添加代码
- sget v1, Lcom/android/internal/app/ShutdownThread;->mReboot:I
- const/4 v2, 0x1
- if-eq v1, v2, :reboot
- const/4 v2, 0x2
- if-eq v1, v2, :rebootRecovery
- const/4 v2, 0x3
- if-eq v1, v2, :rebootDownload
复制代码 然后在1477行
- .line 531
- invoke-static {}, Landroid/os/Power;->shutdown()V
- .line 532
- return-void
复制代码 继续添加代码
- :reboot
- const-string v4, "now"
-
- invoke-static {v4}, Landroid/os/Power;->reboot(Ljava/lang/String;)V
- return-void
- :rebootRecovery
-
- const-string v4, "recovery"
-
- invoke-static {v4}, Landroid/os/Power;->reboot(Ljava/lang/String;)V
-
- return-void
-
- :rebootDownload
- const-string v4, "download"
- invoke-static {v4}, Landroid/os/Power;->reboot(Ljava/lang/String;)V
- return-void
复制代码 保存,关闭
之后将framework.jar编译回来(方法百度)
接下来我们要在电源菜单中添加选项
反编译android.policy.jar
打开com\android\internal\policy\impl\GlobalActions.smali
第一件事就是将数组长度增加3
方法是将第431行的代码
- const/4 v0, 0x3
- new-array v0, v0, [Lcom/android/internal/policy/impl/GlobalActions$Action;
复制代码 改为
- const/4 v0, 0x6
- new-array v0, v0, [Lcom/android/internal/policy/impl/GlobalActions$Action;
复制代码 然后,在第457行,也就是在 aput-object v2, v0, v1 之后
添加代码
- const/4 v1, 0x3
- new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$7;
- const v3, 0x10803aa # reboot icon resource id
- const v4, 0x10403c5 # reboot string resource id
- invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$7;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
-
- aput-object v2, v0, v1
- const/4 v1, 0x4
-
- new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$8;
- const v3, 0x10803ab # recovery icon resource id
-
- const v4, 0x10403c3 # recovery string resource id
- invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$8;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
- aput-object v2, v0, v1
- const/4 v1, 0x5
- new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$9;
-
- const v3, 0x10803ac # download icon resource id
- const v4, 0x10403c4 # download string resource id
- invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$9;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
- aput-object v2, v0, v1
复制代码 确保id与刚刚在framework-res.apk中添加的id名称一致
保存,关闭
接下来确保你添加的重启选项可用
复制GlobalActions$3.smali 并且重命名为GlobalActions$7.smali
打开GlobalActions$7.smali 替换所有GlobalActions$3.smali 的实例
然后转到52行,52行前面的代码应该是
"invoke-static {v0, v1}, Lcom/android/internal/app/ShutdownThread;->shutdown(Landroid/content/Context;Z)V"
添加代码
- const/4 v2, 0x1
- sput v2, Lcom/android/internal/app/ShutdownThread;->mReboot:I
复制代码 保存,关闭
接下来
复制GlobalActions$3.smali 并命名为GlobalActions$9.smali
打开GlobalActions$9.smali 替换所有GlobalActions$3.smali 实例
同样转到第52行,52行前面应该是"invoke-static {v0, v1}, Lcom/android/internal/app/ShutdownThread;->shutdown(Landroid/content/Context;Z)V
添加代码
- const/4 v2, 0x3
- sput v2, Lcom/android/internal/app/ShutdownThread;->mReboot:I
复制代码 保存,关闭
将android.policy.jar编译回来
ok,试试效果吧
感谢:bjj378835699(安智网)翻译 |
|