再起動メニュー追加するにはどれに何を追加するか調べてみた。
忘れないうちに備忘録がてら
※rooted,deodex済みが大前提
当然のごとく「自己責任」
追加・編集が必要なのは
framework-res.apk
framework.jar
android.policy.jar
この3つ
GBと一緒だった。
事前にadb pull等で端末から抜いておく。
【framework-res.apk】
1)framework-res.apkをデコンパイル
2)framework-res.apk/res/drawable-hdpiにrebootのアイコンを入れる(ic_lock_reboot.png)
3)framework-res.apk/res/values-ja/string.xmlをテキストエディタで開いてリソース追加
<string name="reboot">再起動する</string>
<string name="reboot_progress">再起動中..</string>
<string name="reboot_confirm">端末を再起動します</string>
<string name="reboot_confirm_question">端末を再起動しますか?</string>
4)framework-res.apk/res/values/string.xmlをテキストエディタで開いてリソース追加
<string name="reboot">Reboot</string>
<string name="reboot_progress">Rebooting..</string>
<string name="reboot_confirm">Your phone will reboot.</string>
<string name="reboot_confirm_question">Would you like to reboot?</string>
5)framework-res.apk/res/values/public.xmlをテキストエディタで開いてリソースIDを追加
<public type="string" name="reboot" id="0x0104051b" />
<public type="string" name="reboot_progress" id="0x0104051c" />
<public type="string" name="reboot_confirm" id="0x0104051d" />
<public type="string" name="reboot_confirm_question" id="0x0104051e" />
<public type="drawable" name="ic_lock_reboot" id="0x010807f5" />
※空きIDは環境によって異なる為、空きIDを探す必要あり。
追加したリソースIDは後ほど使うので、どこかにメモしておく。
6)framework-res.apkコンパイル(Compression-Levelは9のままでOK)
※2回ある質問は2回ともy
7)keep/resources.arscを削除して続行
8)place-apk-here-for-modding/unsignedframework-res.apkを適当に移動してframework-res.apkにリネーム
--------------------------------------------------------------------------------
【framework.jar】
1)framework.jarデコンパイル
java -jar baksmali.jar framework.jar -o framework
2)framework/com/android/internal/app/ShutdownThread.smaliをテキストエディタで開く。
3)29行目に「.field public static mReboot:I」を追記
4)「invoke-direct {v1, p0}, Landroid/app/ProgressDialog;-><init>(Landroid/content/Context;)V」を検索
invoke-direct {v1, p0}, Landroid/app/ProgressDialog;-><init>(Landroid/content/Context;)V #←これを検索
.line 184
.local v1, pd:Landroid/app/ProgressDialog;
sget v2, Lcom/android/internal/app/ShutdownThread;->mReboot:I #←追記
if-eq v2, v5, :cond_24 #←追記
const v2, 0x104014a
goto :goto_27 #←追記
:cond_24 #←追記
const v2, 0x104051b #←追記 reboot string ID
:goto_27 #←追記
invoke-virtual {p0, v2}, Landroid/content/Context;->getText(I)Ljava/lang/CharSequence;
move-result-object v2
invoke-virtual {v1, v2}, Landroid/app/ProgressDialog;->setTitle(Ljava/lang/CharSequence;)V
.line 185
sget v2, Lcom/android/internal/app/ShutdownThread;->mReboot:I #←追記
if-eq v2, v5, :cond_36 #←追記
const v2, 0x104014e
goto :goto_39 #←追記
:cond_36 #←追記
const v2, 0x104051c #←追記 reboot_progress string ID
:goto_39 #←追記
invoke-virtual {p0, v2}, Landroid/content/Context;->getText(I)Ljava/lang/CharSequence;
move-result-object v2
invoke-virtual {v1, v2}, Landroid/app/ProgressDialog;->setMessage(Ljava/lang/CharSequence;)V
5)「invoke-static {p1}, Landroid/os/Power;->reboot(Ljava/lang/String;)V」を検索
.line 406
:try_start_1a
invoke-static {p1}, Landroid/os/Power;->reboot(Ljava/lang/String;)V #←これを検索
:try_end_1d
.catch Ljava/lang/Exception; {:try_start_1a .. :try_end_1d} :catch_34
.line 428
:goto_1d
const-string v2, "ShutdownThread"
const-string v3, "Performing low-level shutdown..."
invoke-static {v2, v3}, 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, :cond_2d #←追記
.line 429
invoke-static {}, Landroid/os/Power;->shutdown()V
.line 430
return-void
:cond_2d #←追記
const-string/jumbo v4, "now" #←追記
invoke-static {v4}, Landroid/os/Power;->reboot(Ljava/lang/String;)V #←追記
return-void #←追記
6)frameworkをコンパイル
java -jar smali.jar framework -0 classes.dex
7)コンパイルしたclasses.dexをframework.jarに追加
7za d -tzip framework.jar classes.dex
7za a -tzip framework.jar classes.dex
--------------------------------------------------------------------------------
【android.policy.jar】
1)android.policy.jarをデコンパイル
java -jar baksmali.jar android.policy.jar -o android.policy
2)android.policy/com/android/internal/policy/impl/GrobalAction.smaliをテキストエディタで開く。
「new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$2;」を検索
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$2; #←これを検索
const v2, 0x1080030
const v3, 0x1040155
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
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItems:Ljava/util/ArrayList;
new-instance v1, Lcom/android/internal/policy/impl/GlobalActions$7; #←追記
const v2, 0x10807f5 #←追記 ic_lock_reboot drawable ID
const v3, 0x104051b #←追記 reboot string ID
invoke-direct {v1, p0, v2, v3}, Lcom/android/internal/policy/impl/GlobalActions$7;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V #←追記
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
3)android.policy/com/android/internal/policy/impl/GrobalAction$2.smaliをテキストエディタで開く。
# virtual methods
.method public onPress()V
.registers 3
.prologue
.line 170
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions$2;->this$0:Lcom/android/internal/policy/impl/GlobalActions;
#getter for: Lcom/android/internal/policy/impl/GlobalActions;->mContext:Landroid/content/Context;
invoke-static {v0}, Lcom/android/internal/policy/impl/GlobalActions;->access$100(Lcom/android/internal/policy/impl/GlobalActions;)Landroid/content/Context;
move-result-object v0
const/4 v1, 0x1
const/4 p0, 0x0 #←追記
sput p0, Lcom/android/internal/app/ShutdownThread;->mReboot:I #←追記
invoke-static {v0, v1}, Lcom/android/internal/app/ShutdownThread;->shutdown(Landroid/content/Context;Z)V
4)android.policy/com/android/internal/policy/impl/GrobalAction$2.smaliをコピーして
android.policy/com/android/internal/policy/impl/GrobalAction$7.smaliにリネームしてテキストエディタで開く。
GlobalActions$2になっている箇所をGlobalActions$7に変更(3箇所)
# virtual methods
.method public onPress()V
.registers 3
.prologue
.line 170
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions$7;->this$0:Lcom/android/internal/policy/impl/GlobalActions;
#getter for: Lcom/android/internal/policy/impl/GlobalActions;->mContext:Landroid/content/Context;
invoke-static {v0}, Lcom/android/internal/policy/impl/GlobalActions;->access$100(Lcom/android/internal/policy/impl/GlobalActions;)Landroid/content/Context;
move-result-object v0
const/4 v1, 0x1
const/4 p0, 0x1 #←変更
sput p0, Lcom/android/internal/app/ShutdownThread;->mReboot:I
invoke-static {v0, v1}, Lcom/android/internal/app/ShutdownThread;->shutdown(Landroid/content/Context;Z)V
5)android.policyをコンパイル
java -jar smali.jar android.policy -o classes.dex
6)android.policy.jarにコンパイルしたclasses.dexを追加
7za d -tzip android.policy.jar classes.dex
7za a -tzip android.policy.jar classes.dex
完成した3つを端末に適用すれば終わり
まだ実行していないけど、これでいいはず。
はじめまして。お世話になります。
返信削除locked BL ARC ICS 4.04ですが、ブートループに陥ります。
自己満足の世界ですけど、私も電源オプションに再起動を追加したいんですがうまくいきません。
ICSは難しいですね。
コメントありがとう御座います。
返信削除こんな事書いてますが、ICSでは一度も自作したことなかったりします。
既に付加されている1式を解体して中身調べただけなんです。
1度は自作してみねばと思いつつ・・・
ごめんなさい。
こちらこそありがとうございます。
削除私もGBでは頂き物ばかりでしたから(汗)
>既に付加されている1式
ななしさんは適用されているんですか?よかったら教えてくださると
ありがたいです。
ここから頂きました。
削除http://forum.xda-developers.com/showthread.php?t=1534903
日本語リソース追加
たしかodexだったはずなのでdeodex
この2点は自分で実行です(必要ならば)
返信ありがとうございます。
返信削除自分の環境ではなぜかdeodexするとブートループしちゃいましたので、
odexで再署名してぶちこんだら、うまくいきました。
これで満足して常用できそうです。
BL lockなSO-01C ICS 4.04ですが、今のところ問題無いですね。
いろいろありがとうございました。