OS2.3.4
rooted端末であることが大前提。
失敗したとしても「自己責任」
【必要なもの】
powermenu_final.zip(要ユーザー登録) → ここ
Android SDK → ここ
Java開発環境 → ここ
APK Multi Tool → ここ
apktool → ここ
7-zip(コマンドライン用、Windows用) → ここ
テキストエディタ → これ か これ 編集できればなんでもいい。
※これらのインストール方法等は省略
framework-res.apk,framework.jar,androd.policy.jar
【下準備】
1)端末の設定→アプリケーション→開発→USBデバッグにチェック入れる。
2)PCと端末をUSB接続
3)PCの任意の場所に作業フォルダ作成(例:C:\powermenu)
4)3のフォルダにapktool.jarと7-zip(コマンドライン)を入れる。
5)コマンドプロンプト起動して作業フォルダに移動
cd C:\powermenu
5)adbコマンドで引っこ抜く。
adb pull /system/framework/android.policy.jar
adb pull /system/framework/framework-res.apk
adb pull /system/framework/framework.jar
【framework-res.apkの編集】
1)place-apk-here-for-moddingにframework-res.apkを入れる。
2)Script.bat起動
3)「9」を入力してデコンパイル
これでprojectsフォルダの中にframework-res.apkフォルダが作られ展開される。
4)projects/framework-res.apk/res/drawable-hdpiにrebootアイコンを入れる。
5)projects/framework-res.apk/res/values-ja/strings.xmlをテキストエディタで開いて
一番最後の行(たぶん975行)に下記追記。
<string name="reboot">再起動する</string>
6)projects/framework-res.apk/res/values/string.xmlをテキストエディタで開いて
一番最後の行(たぶん1027行)に下記追記。
<string name="reboot">Reboot</string>
7)projects/framework-res.apk/res/values/public.xmlをテキストエディタで開いて
stringとアイコンのリソースIDを追加する。
<public type="string" name="reboot" id="0x010403f5" /> (2736行目あたり)
<public type="drawable" name="reboot" id="0x0108052d" /> (4199行目あたり)
※必ずしも同じIDではないので、空いてるIDを探す。
ここで追加IDは後ほど使うのでどこかにメモしておく。
8)Script.bat起動
9)「22」を入力してCompression Levelを「0」にする。(圧縮率0)
10)「11」を入力してコンパイル
11)Is this a system apk (y/n)と聞いてきたら「y」を入力
12)Aside from the signature, would you like to copy
over any additional files that you didn't modify
from the original apk in order to ensure leadt
# of errors (y/n)
と聞いてきたら「y」を入力
これでコンパイルが始まるのでしばし待つ。
13)「続行するには何かキーを押してください...」と表示されたらキーは何も押さず
keepフォルダを開いて「resources.arsc」を削除する。
14)何かキーを押して処理続行
これでplace-apk-here-for-moddingの中にunsignedframework-res.apkが作られる。
が、なぜかresources.arscが圧縮されているのでこのままではダメ
15)unsignedframework-res.apkを作業フォルダに移動してframework-res.apkにリネーム
16)projects/framework-res.apk/build/apk/resources.arscを作業フォルダにコピー
17)コマンドプロンプト起動して作業フォルダに移動
cd C:\powermenu
18)resources.arscをコマンドで入替え
7za.exe d -tzip framework-res.apk resources.arsc
これで圧縮されているresources.arscが削除される。
7za.exe a -tzip -mx=0 framework-res.apk resources.arsc
これでコピーしたresources.arscが無圧縮で追加される。
【framework-res.apkの編集完了】
【framework.jarの編集】
1)コマンドプロンプト起動して作業フォルダに移動
cd C:\powermenu
2)apktoolを使ってframework.jarを解体
java -jar apktool.jar d framework.jar
これで作業フォルダにframework.jar.outフォルダが作られ展開される。
3)framework.jar.out/smali/com/android/internal/app/ShutdownThread.smaliを
テキストエディタで開く。
4)21行目に下記追記
.field public static mReboot:I
5)invoke-static {}, Landroid/os/Power;->shutdown()Vを検索(たぶん487行目あたり)して
下記のように追記
.line 409
:goto_0
const-string v2, "ShutdownThread"
const-string v2, "Performing low-level shutdown..."
invoke-static {v4, v2}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
sget v1, Lcom/android/internal/app/ShutdownThread;->mReboot:I #←追記
const/4 v2, 0x1 #←追記
if-eq v1, v2, :reboot #←追記
.line 410
invoke-static {}, Landroid/os/Power;->shutdown()V #←これを検索
.line 411
return-void
:reboot #←追記
const-string v4, "now" #←追記
invoke-static {v4}, Landroid/os/Power;->reboot(Ljava/lang/String;)V #←追記
return-void #←追記
.line 388
:catch_0
move-exception v0
6)編集した内容でコンパイル
java -jar apktool.jar b framework.jar.out
これでframework.jar.outフォルダの中にdistフォルダが作られframework.jarが出来上がる。
が、このままではダメ
7)作業フォルダのframework.jarを7-zipで開く。
8)framework.jar.out/dist/framework.jarを7-zipで開く。
9)8のclasses.dexを7に移動
【framework.jarの編集完了】
【android.policy.jarの編集】
1)コマンドプロンプト起動して作業フォルダに移動
cd C:\powermenu
2)apktoolを使ってandroid.policy.jarを解体
java -jar apktool.jar d android.policy.jar
これで作業フォルダにandroid.policy.jar.outフォルダが作られ展開される。
3)android.policy.jar.out/smali/com/android/internal/policy/impl/GlobalActions.smaliを
テキストエディタで開く。
4)new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$4;を検索(たぶん468行目あたり)して下記のように追記。
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$4; #←これを検索
const v3, 0x1080030
const v4, 0x104015f
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$4;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
aput-object v2, v0, v1
const/4 v1, 0x3
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$8; #←追記
const v3,
0x0108052d #←追記 reboot icon resource id
const v4,
0x010403f5 #←追記 reboot 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, 0x4 #←追記
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$DividerAction;
5)android.policy.jar.out/smali/com/android/internal/policy/impl/GlobalActions$4.smaliを
コピーしてそのまま貼り付けてGlobalActions$8.smaliにリネーム
6)android.policy.jar.out/smali/com/android/internal/policy/impl/GlobalActions$8.smaliを
テキストエディタで開く。
8)GlobalActions$4となっている箇所をGlobalActions$8に変更(1行,30行,44行)
9)53行目に下記のように追記
move-result-object v0 #(49行目)
const/4 v1, 0x1 #(51行目)
const/4 v2, 0x1 #←追記(53行目)
sput v2, Lcom/android/internal/app/ShutdownThread;->mReboot:I #←追記(55行目)
invoke-static {v0, v1}, Lcom/android/internal/app/ShutdownThread;->shutdown(Landroid/content/Context;Z)V #(57行目)
10)編集した内容でコンパイル
java -jar apktool.jar b android.policy.jar.out
これでandroid.policy.jar.outフォルダの中にdistフォルダ作られandroid.policy.jarが出来上がる。
が、このままではダメ
11)作業フォルダのandroid.policy.jarを7-zipで開く。
12)android.policy.jar.out/dist/android.policy.jarを7-zipで開く。
13)12のclasses.dexを11に移動
【android.policy.jarの編集完了】
作業フォルダの中にあるframwork-res.apk,framwork.jar,andorid.policy.jarを
1)CWMインストールzipにして端末に適用
2)adb pushして端末に適用
3)それぞれ端末のSDカードに移してSUFBSなどで適用
すれば終わり
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$8 #←追記
返信削除↑の$8の後に ; が抜けているようです。
報告まで。
直しました。
削除