1. 程式人生 > >【ROM修改教程】新增高階電源重啟選單(安卓4.0.4官方ROM)

【ROM修改教程】新增高階電源重啟選單(安卓4.0.4官方ROM)

準備工作: 電腦上安裝好JDK、下載smali和baksmali、下載apktools、要修改的ROM、adb工具(可選) 注:由於本教程面向的物件為有一定ROM修改基礎的兄弟,所以對於如何使用電腦,如何使用CMD以及上述工具的具體用法等等都不在本貼的討論範圍內,本文將僅講述如何新增高階重啟選單 1、從要修改的ROM中提取出以下檔案 /system/framework/framework-res.apk /system/framework/android.policy.jar 2、反編譯修改framework-res.apk,加入需要的圖片以及字串等資源。 2.1、反編譯framework-res.apk CMD中執行命令 > java -jar apktool.jar d -s framework-res.apk framework-res 2.2、加入字元資源 英文部分(如需要則新增):使用文字編輯器開啟framework-res\res\values\strings.xml,在最後新增所要用的字串         ....         <string name="reboot_recovery">Recovery</string>        </resources> 簡體中文部分:使用文字編輯器開啟framework-res\res\values-zh-rCN\strings.xml,在最後新增所要用的字串         ....         <string name="reboot_recovery">恢復模式</string>        </resources> 2.3、加入所需的圖片 本方法將用到一張圖片,顯示在所加入的選單上。 因為i88的解析度為800×480,所以我將兩張圖片放入framework-res_apk\res\drawable-hdpi之中 圖片的名字為(可自定義,注意上下一致即可) ic_power_recovery.png(此處用到的圖片解析度為:48×48) 2.4、為所加入的字元及圖片指定資源ID(提供兩種方式,任選一種即可。個人推薦第一種) 自動指定方式:完成上述的修改後,CMD執行命令 >java -jar apktool.jar b framework-res framework-res_mod.apk >java -jar apktool.jar d -s framework-res_mod.apk framework-res_mod 複製framework-res_mod\res\values\public.xml,用其來替換framework-res\res\values\public.xml 對應記下ID1、ID2、     <public type="string" name="reboot_recovery" id="ID1" />            <public type="drawable" name="ic_power_recovery" id="ID2" /> 手動指定方式: 使用文字編輯器開啟D:\PowerMenu\framework-res\res\values\public.xml 搜尋<public type="string",找到string段對應的最後一個id號(請確定是最後一個),此處記為String_ID 搜尋<public type="drawable",找到drawable段對應的最後一個id號(請確定是最後一個),此處記為Drawable_ID 在檔案後新增兩行     <public type="string" name="reboot_recovery" id="String_ID+1" />         <public type="drawable" name="ic_power_bootloader" id="Drawable_ID+1" /> 根據第一種方法,在這裡我獲得的對應ID如下     <public type="string" name="reboot_recovery" id="0x010806b6" />         <public type="drawable" name="ic_power_recovery" id="0x010404f8" /> 2.5、打包並完成對framework-res.apk的修改 CMD下執行命令 > java -jar apktool.jar b framework-res framework-res_done.apk 使用winra或7z等壓縮工具,從得到的framework-res_done.apk檔案中提取出resources.arsc 將resources.arsc替換framework-res.apk中的同名檔案,並將ic_power_recovery.png新增到framework-res.apk中的對應位置 res\drawable-hdpi\ic_power_recovery.png 至此,對framework-res.apk的修改就完成了。儲存好修改完畢的framework-res.apk。 程式碼修改部分 用WinRAR或者7z之類的壓縮工具開啟android.policy.jar,從中把classes.dex提取出來。 然後在CMD下執行命令: > java -jar baksmali.jar classes.dex -o android.policy_dex 開啟android.policy_dex\com\android\internal\policy\impl\資料夾,找到GlobalActions$打頭的幾個檔案,記住最後一個的編號。 比如我這裡看到的以GlobalActions$打頭的檔案的最後一個是GlobalActions$9.smali。 因為之後我們會建立一個檔案,以GlobalActions$開頭。 按本例的情況,會是GlobalActions$10.smali(重啟進入recovery的程式碼) 使用文字編輯器開啟android.policy_dex\com\android\internal\policy\impl\GlobalActions.smali 搜尋:.method private createDialog()。這個函式是用來建立電源選單的,既然我們是要新增選單項,那麼自然是要對這個函式進行修改。 不保證其他ROM也是一樣的,這個大家在瞭解新增方法後,自己觀察下就可以判斷的,我找到的是: .method private createDialog()Landroid/app/AlertDialog; 我發現4.0的下面的程式碼根本沒辦法直接看出哪 個是關機的程式碼,哪 個是重啟的程式碼,不過我們可以用逆向追蹤的方法。從建立電源選單的程式碼中一定可以找到一些資源ID,複製這個ID到framework-res\res\values-zh-rCN\public.xml中搜索,很快就可以看到這個ID是做什麼的(如 0x10404f2這個是定義的重啟字串,搜尋前先要在前面加個0,就是0x010404f2,public.xml中的ID前面的0在這裡被省略了)。這裡基本就可以確定GlobalActions$3這個就是呼叫的重啟方法了。 本例中的情況見下: 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     const v3, 0x104013c     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     .line 234 #以上為關機程式碼     iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems: Ljava/util/ArrayList;     new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$3;     const v2, 0x10802f0     const v3, 0x10404f2     invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$3;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V     invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z   .line 252 #此為重啟程式碼 不管是正常重啟,還是重啟到recovery,均是進行重啟,只是重啟時的引數不一樣,重啟到Recovery程式碼就可以參考正常重啟部分的了。 new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$3;(注意這個,這個是正常重啟用到的執行程式碼) 我們把重啟的程式碼複製一份插入到上面重啟程式碼的下面,也就是  .line 252這行的下面,GlobalActions$3.smali重新命名為GlobalActions$10.smal。 插入的程式碼如下: iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems: Ljava/util/ArrayList;     new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$10;     const v2, 0x10806b6     const v3, 0x10404f8     invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$10;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V     invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z 對檔案GlobalActions.smali的修改到這裡就結束了 複製一份android.policy_dex\com\android\internal\policy\impl\GlobalActions$3.smali,重新命名為GlobalActions$10.smali 開啟GlobalActions$10.smali進行修改 全部GlobalActions$3都修改為GlobalActions$10.smali const-string v1, "null"修改為const-string v1, "recovery" 因為我的只有兩個引數,如果你的有三個引數還要修改一下,紅色標記部分為修改部份,可以直接刪除不要這個引數,保留的話要先在strings.xml中定義。 Lcom/android/internal/policy/impl/GlobalActions$SinglePressAction;-><init>(II)V     II表示兩個引數 .parameter "x0" .parameter "x1" .parameter "x2"(比正常重啟項少一個引數,該引數是每項下方的那個提示文字,這個我的沒有) invoke-direct {p0, p2, p3, p4},  修改好儲存退出,新增重啟到recovery的執行程式碼檔案就完成了。 儲存上面所做的修改,開始進行打包 CMD下執行命令: > java -jar smali.jar android.policy_dex -o classes.dex 然後WinRAR或者7z之類的壓縮工具開啟android.policy.jar,使用修改得到classes.dex替換原檔案。 OK,到這裡,對android.policy.jar的修改也完成了。 最後把修改好的兩個檔案替換到手機看看效果吧,怎麼換我就不說了

相關推薦

ROM修改教程新增高階電源選單(4.0.4官方ROM)

準備工作: 電腦上安裝好JDK、下載smali和baksmali、下載apktools、要修改的ROM、adb工具(可選) 注:由於本教程面向的物件為有一定ROM修改基礎的兄弟,所以對於如何使用電腦,如何使用CMD以及上述工具的具體用法等等都不在本貼的討論範圍內,本文將僅講述如何新增高階重啟選單 1、從要

抓包分析Charles和 夜神模擬器 對應用進行抓包分析

技術分享 windows red 工具 com nsh pro 4.2 name 準備工具 : 1 Charles : https://www.charlesproxy.com (收費) 2 夜神模擬器 : https://www.yeshen.com (免費)

新人自學筆記2開發我的第一個APP

一、建立一個Android工程   1、在Package Explorer空白的地方右鍵-->new-->Android application project  2、next之後會來到這樣一個頁面,注意一定要指定好工作空間點選finish完成工程的建立,這時候就

Unity3D基礎教程給初學者看的Unity教程(零):如何學習Unity3D

cos 詳解 component lock index unity3d遊戲 design 技術棧 log 【Unity3D基礎教程】給初學者看的Unity教程(零):如何學習Unity3D http://www.cnblogs.com/neverdie/p/How_To_

1分鐘教程如何在手機桌面上直接打開51CTO博客?

51cto博客 移動端博客首頁 51CTO博客移動端新版首頁上線,就是想讓好文章,隨時隨地隨你“移動”那麽你猜,在手機上打開博客需要多久呢?只需 1 秒!!!第一步:用手機自帶瀏覽器打開博客,地址:http://blog.51cto.com/,點擊下面紅框中的按鈕~第二步:選擇“添加到主屏幕”第三步:

黑馬PHP教程錯誤詳解

error_log 報告 color 顯示 自定義 borde 技術 誤報 處理 一,錯誤通常分3種 二,錯誤的分級 三,錯誤的觸發 四,顯示錯誤報告 問題一:設置顯示錯誤報告 問題二:顯示哪些級別的錯誤報告 五,錯誤日誌的記錄問題 問題一

zabbix系列教程四、用戶自定義監控

系統用戶 新建 mct 運用 systemctl 一個 start shell 教程 本篇介紹運用zabbix進行自定義監控,以系統用戶登錄數量為例。 一、zabbix自定義語法 UserParameter=<key>,<shell command

HBase基礎教程1、HBase之單機模式與偽分布式模式安裝(轉)

service 4.2 zookeepe .tar.gz class href base mem 創建 在這篇blog中,我們將介紹Hbase的單機模式安裝與偽分布式的安裝方式,以及通過瀏覽器查看Hbase的用戶界面。搭建hbase偽分布式環境的前提是我們已經搭建好了had

菜鳥教程小白接觸白鷺引擎4天,成功做了一款足球小遊戲

下一步 發現 https sta 圖片 sce 變量名 找到 是否 寫在前面:隨著越來越多的新人開始接觸白鷺引擎,創作屬於自己的遊戲。考慮到初學者會遇到一些實際操作問題,我們近期整理推出“菜鳥”系列技術文檔,以便更好的讓這些開發者們快速上手,Egret大神們可以自動忽略此類

3D美術教程手雷(傳統與PBR流程)

做出 陰影 材質 sub 灰色 教程 其他 了解 法線 轉自:https://www.sohu.com/a/156489635_718614 隨著最新的次時代技術PBR流程的普及,越來越多的公司由傳統流程轉向了PBR流程,主要原因在於PBR材質不僅效果上更加貼近於真實,而

付款成功,未收到卡密手動提取教程

教程 發貨 打開 ima -- 記錄 微信 分享圖片 com 【140】全新163郵箱批發網 本站采用自動發貨 -- 掃碼付款後 -- 自動顯示卡密頁面 如果說沒收到卡密,打開支付寶,或者微信交易記錄,找到【商戶訂單號】,然後去網站

使用命令列啟用window10 親測有效不要修改命令

第一步:開啟CMD命令列,以管理員身份執行; 第二步:輸入命令 slmgr.vbs /upk ,稍等片刻會提示:“已成功解除安裝了產品金鑰”; 第三步:輸入命令 slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX ,稍等片刻會提示:“成功的

RTX作業系統教程第7章 任務管理

原文來源:http://forum.armfly.com/forum.php?mod=viewthread&tid=16713&highlight=RTX%B2%D9%D7%F7%CF%B5%CD%B3%BD%CC%B3%CC 第7章     &nb

RTX作業系統教程第2章 嵌入式實時作業系統介紹

第2章      嵌入式實時作業系統介紹 轉載來源: http://forum.armfly.com/forum.php?mod=viewthread&tid=16447&highlight=RTX%B2%D9%D7%F7%CF%

PL/SQL developer+sqlplus相關軟體安裝教程+漢化教程

#想要使用PL/SQL developer操作ORACLE資料庫時必備的工具: #1. PL/SQL developer #2. sqlplus【此軟體是oracle客戶端黑視窗,一般不用,但是必須安裝才可以使用,因為需要配置PL/SQL developer的引數】 ##安裝流程 #1、

React 實戰教程0到1 構建 github star管理工具

前言 在日常使用github中,除了利用git進行專案版本控制之外,最多的用處就是遊覽各式的專案,在看到一些有趣或者有用的專案之後,我們通常就會順手star,目的是日後再看。但是當我們star了許多專案之後,回過頭想找一個的專案就會發現,很難在短時間內找到它,官方也並沒有提供很好的管理我們的star專案的功

python修改檔案帶引數修改資料夾名、資料夾裡檔名、檔案內容等

原始碼如下: # -*- coding: utf-8 -*- #coding=utf-8 ''' 指令碼說明 功能:在新增新遙控時,需要手動改檔名和檔案內容。現執行指令碼可自動修改(碼值仍需要手動修改) 使用:python ir_modify.py "原有的檔名"

銀行ic卡採集工具多少錢必看教程

銀行ic卡採集工具多少錢【諮/詢:158xx76350xx964 】微.信已開通網頁 打不開請直接聯絡,我們有實體,月日,之江商學院“雙百計劃”新聞通氣會在位於紹興市舉行,之江商學院執行院長朱仁華與明峰醫療董事長潘華素簽訂了戰略合作協議,根據協議,明峰醫療董事長潘華素成為首期“創新型公司上市加速營”的首位學員

飛秋教程檔案斷點續傳

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

FastCube.Net教程如何將資料庫連線到多維資料集

通常,OLAP多維資料集中的資料是從資料庫載入的。要使用資料填充多維資料集,需要建立資料來源,多維資料集可以接收以下資料: Database(資料庫)—建立與資料庫的連線; Stream(流)—可以通過網路作為流接收,從檔案開啟或從資料庫下載的多維資料集; Application code