爱黑武论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8142|回复: 5

[安卓技术] 在关机键 电源菜单 中加入 重启、recovery 等选项的教程

[复制链接]
发表于 2011-9-13 14:40 | 显示全部楼层 |阅读模式

立即注册,加入爱黑武论坛的大家庭!爱黑武,爱上搞机生活!

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 ihei5.com 于 2011-9-13 14:48 编辑

原帖来自xda
英文好的直接看这里http://forum.xda-developers.com/showthread.php?t=811532

第一步

添加字符串
首先反编译framework-res.apk
打开values\strings.xml,然后在里面加上

  1. <string name="reboot_recovery">Recovery</string>
  2. <string name="reboot_download">Download</string>
  3. <string name="reboot">Reboot</string>
复制代码
保存,关闭

第二步

打开values\public.xml,分配刚刚加上去的字符串id

具体做法是,翻到文件最后,查看最后一个字符串的id,假设为10403c2,搜索10403c3,看看是否已经有此id了,没有的话,添加代码

  1. <public type="string" name="reboot_recovery" id="0x010403c3" />
  2. <public type="string" name="reboot_download" id="0x010403c4" />
  3. <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,继续添加代码

  1. <public type="drawable" name="reboot" id="0x010803aa" />
  2. <public type="drawable" name="recovery" id="0x010803ab" />
  3. <public type="drawable" name="download" id="0x010803ac" />
复制代码
保存,关闭

现在framework-res.apk文件弄好了,剩下的编译就不用多说了

接下来弄另外一个文件framework.jar
目的是使关机选项有作用,能重启

反编译framework.jar(方法自己百度)

打开com\android\internal\app\ShutdownThread.smali

在第37行添加代码

  1. .field public static mReboot:I
复制代码
然后,转到第1463行,注意,此行前一个代码应该是"invoke-static {}, Landroid/os/Power;->shutdown()V"

在此行添加代码

  1. sget v1, Lcom/android/internal/app/ShutdownThread;->mReboot:I

  2. const/4 v2, 0x1

  3. if-eq v1, v2, :reboot

  4. const/4 v2, 0x2

  5. if-eq v1, v2, :rebootRecovery

  6. const/4 v2, 0x3

  7. if-eq v1, v2, :rebootDownload
复制代码
然后在1477行

  1. .line 531
  2. invoke-static {}, Landroid/os/Power;->shutdown()V

  3. .line 532
  4. return-void
复制代码
继续添加代码

  1. :reboot

  2. const-string v4, "now"

  3. invoke-static {v4}, Landroid/os/Power;->reboot(Ljava/lang/String;)V

  4. return-void

  5. :rebootRecovery

  6. const-string v4, "recovery"

  7. invoke-static {v4}, Landroid/os/Power;->reboot(Ljava/lang/String;)V

  8. return-void

  9. :rebootDownload

  10. const-string v4, "download"

  11. invoke-static {v4}, Landroid/os/Power;->reboot(Ljava/lang/String;)V

  12. return-void
复制代码
保存,关闭

之后将framework.jar编译回来(方法百度)

接下来我们要在电源菜单中添加选项

反编译android.policy.jar

打开com\android\internal\policy\impl\GlobalActions.smali

第一件事就是将数组长度增加3

方法是将第431行的代码

  1. const/4 v0, 0x3

  2. new-array v0, v0, [Lcom/android/internal/policy/impl/GlobalActions$Action;
复制代码
改为

  1. const/4 v0, 0x6

  2. new-array v0, v0, [Lcom/android/internal/policy/impl/GlobalActions$Action;
复制代码
然后,在第457行,也就是在 aput-object v2, v0, v1 之后

添加代码

  1.     const/4 v1, 0x3

  2.     new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$7;

  3.     const v3, 0x10803aa # reboot icon resource id

  4.     const v4, 0x10403c5 # reboot string resource id

  5.     invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$7;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V

  6.     aput-object v2, v0, v1

  7.     const/4 v1, 0x4

  8.     new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$8;

  9.     const v3, 0x10803ab # recovery icon resource id

  10.     const v4, 0x10403c3 # recovery string resource id

  11.     invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$8;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V

  12.     aput-object v2, v0, v1

  13.     const/4 v1, 0x5

  14.     new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$9;

  15.     const v3, 0x10803ac # download icon resource id

  16.     const v4, 0x10403c4 # download string resource id

  17.     invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$9;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V

  18.     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"

添加代码

  1. const/4 v2, 0x1

  2. 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

添加代码

  1. const/4 v2, 0x3

  2. sput v2, Lcom/android/internal/app/ShutdownThread;->mReboot:I
复制代码
保存,关闭

将android.policy.jar编译回来

ok,试试效果吧

感谢:bjj378835699(安智网)翻译
发表于 2011-9-13 14:44 | 显示全部楼层
支持一个~~~
发表于 2011-9-13 14:53 | 显示全部楼层
学习快乐   
发表于 2011-9-13 21:18 | 显示全部楼层
哦,NO......................
发表于 2011-10-11 16:09 | 显示全部楼层
这个可以有
回复 支持 反对

使用道具 举报

发表于 2012-4-12 14:51 | 显示全部楼层
这个必须的顶!
回复 支持 反对

使用道具 举报

 Hello,黑武的好机友!回复想偷个懒?点这里: 
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|Archiver|手机版|爱黑武论坛 ( 京ICP备2023028323号 | 京公网安备11011202000270号 )

GMT+8, 2024-11-21 19:57 , Processed in 0.044887 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, ihei5.com

快速回复 返回顶部 返回列表