Android 4.0添加高级重启菜单

Android 4.0添加高级重启菜单_第1张图片

 

提取android.policy.jar和framework-res.apk。

 
1.反编译框架,找一个重启图标,命名为ic_power_recovery.png,放到framework-res.apk\res\drawable-hdpi
 
添加字符,打开values/strings.xml,添加<string name="reboot_recovery">Recovery</string>
再打开values-zh-rCN/strings.xml添加<string name="reboot_recovery">恢复模式</string>
 
2.把生成的目录索引resources.arsc文件拖到apk原文件,新加的ic_power_recovery.png也拖进去,不用管什么压缩方式必须选储存,到这里已完成对framework-res.apk的修改。最后回编译框架,再反编译提取ID。
 
3.打开android.policy.jar把dex文件提取出来,反编译,打开com\android\internal\policy\impl\GlobalActions.smali
 
#找到:
 
    iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
 
    new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$2;
 
    const v2, 0x1080030  #图标ID [原ID:0x01080030,它自动把0x后的0去掉了]
 
    const v3, 0x104012f  #文字ID
 
    invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$2;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
 
    invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
 
#这里调用了GlobalActions$2,搜索字符id知道它是就是关机事件。
再搜索,也会找到调用GlobalActions$3(数值可能不同,是重启事件)。
那么仿照关机事件的写法,在重启事件后面加入下面的代码:(这样选项的位置才会如图所示)(注意图片和字符的id对应)。
 
    iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
 
    new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$8;
 
    const v2, 0x108069a
 
    const v3, 0x1040519
 
    invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$8;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
 
    invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
 
#复制GlobalActions$2.smali,重命名为GlobalActions$8.smali(如果原来就存在8就改成9,而且还需要改上面那段代码以此类推),打开这个smali,把文本内"$2"全部替换成“$8”,并在const/4 v1, 0x1后追加以下代码并注释掉原有的那行。
 
    const-string p0, "recovery"
 
    invoke-static {v0, p0, v1}, Lcom/android/internal/app/ShutdownThread;->reboot(Landroid/content/Context;Ljava/lang/String;Z)V
 
    #invoke-static {v0, v1}, Lcom/android/internal/app/ShutdownThread;->shutdown(Landroid/content/Context;Z)V
 
就像如图所示:Android 4.0添加高级重启菜单_第2张图片

4.接下来回编译classes.dex,覆盖回android.policy.jar,这样就完成了

你可能感兴趣的:(Android 4.0添加高级重启菜单)