QQ登录

只需一步,快速开始

 找回密码
 注册账号

QQ登录

只需一步,快速开始

查看: 279|回复: 1

[实用教程] ROM定制教程--19关机菜单中增加重启项

[复制链接]
  • TA的每日心情
    慵懒
    2017-6-16 11:09
  • 签到天数: 18 天

    [LV.4]小有名气

    发表于 2015-4-22 17:01:58 | 显示全部楼层 |阅读模式
    ROM定制教程--19关机菜单中增加重启项

    这篇教材就进入咯高级定制阶段,可能会稍微有点难度,不过相信大家仔细阅读、研究是能够完成的,因为你是安卓rom定制发烧友。
    首先反编译framework-res.apk
    反编译相信大家都会的,不会的看教程第十颗

    打开values\strings.xml,然后在里面加上

    <string name="reboot_recovery">Recovery</string>

    < string name="reboot_download">Download</string>

    < string name="reboot">Reboot</string>

    保存之后关闭strings.xml
    接着
    打开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,继续添加代码
    <publictype="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编译回来


    附件也有教程,请加分


    <

    该用户从未签到

    发表于 2015-8-1 07:26:37 | 显示全部楼层
    只吃楼主,撸过过经验,小伙伴们都惊呆了
    回复 支持 1 反对 0

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册账号

    本版积分规则

    关闭

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

    GMT+8, 2017-8-23 20:00 , Processed in 0.058175 second(s), 20 queries , Gzip On, Yac On.

    © 2013-2017 Powered by Discuz! X3.3. Theme By Yeei!

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