現状、更新するガッツがありません。初心者向けには記事を書いておりません。分からない方は他の親切なサイト等をあたってみてください。記事を参考にされる方は自己責任で。コメントは出来れば名前を付けていただいて、記事の内容に関するものでお願いします。記事と直接関係無いもの、こちらで検証出来ないもの、説明不足等で状況が分かりづらいもの、すでに解決済みの事項等については回答しかねます。SO-01E】ナビゲーションバー(ソフトキー)カスタマイズ画面最下部(横向き画面だと右端)のナビゲーションバー、つまりソフトキーが並んでいる部分をカスタムしようという試みです。今回は、履歴キーを廃止(ホームキー長押しで代替)し、その位置にメニューキーを配置、左端に電源キー、右端に検索キー(長押しで音声検索)を追加し、5キーのナビバーにしてみます。欲張って、メニューキーは常に表示されるようにしてみたりもします。前提(私の実験環境)は以下です。7・トラブっても自力で復旧できること(つまり自己責任)いじるシステムファイルは、以下になります。/system/app/SystemUI.apk/system/app/SystemUI.odex好みはあるでしょうが、私はapkとodexを別々にいじりたいと思います。・SystemUI.apk(今回の獲物)・apktool.jar(apkをソースファイルに展開したり戻したりするツール)・7za.exe(圧縮率を変えてパックしなおす際に必要)・framework-res.apk(SystemUI.apkを展開する際に必要)apktool.jarは、「apktool」で検索してゲット。ダウンロードできますが、apktool.jarだけあればイケます。(apktool.jarはaapt.exeを呼び出しているようですが、aapt.exeはandroidSDKに含まれています。)7zaは「7-zip」で検索、コマンドラインバージョンをダウンロードしてゲット。SystemUI.apkは端末の「/system/app」に入っています。framework-res.apkは端末の「/system/framework」にあります。■A1■PCにおける作業フォルダの準備ここでは「c:\apkwork」とします。この中に、「old」と「new」フォルダを新規作成します。今回の獲物、SystemUI.apkは「old」に入れておいてください。その他の必要物資は、作業フォルダ直下にぶっこみます。ウィンドウをここで開く」すると便利です。□SystemUI(作業途中で生成される。framework-res.apkこれをしておかないと、SystemUI.apkを展開しようとしたときエラーが出ます。成功すると、Windowsのユーザーフォルダ(例えばC:\Users\[ユーザー名])に「apktool」フォルダができ、その中に「framework」フォルダができ、さらにその中に「1.apk」というものが生成されます。SystemUI作業フォルダの中に新しく「SystemUI」フォルダが生成され、その中にソースファイルが展開されます。以下、「SystemUI」フォルダを基準に説明を進めます。「res\values\public.xml」をテキストエディタで開きます。最下行に「</resources>」がありますが、その前の行に電源キーと検索キー用のIDを追加します。/></resources>上の行(ここでは「recent_inspect_item」)のIDがおそらく最後尾だと思われますので、そこから1増やしたものを「power」、2増やしたものを「search」のIDに割り当てています。(ちなみにIDは16進数ですので、分からない人は調べてください。)大丈夫とは思いますが、同じIDが使われていないか、public.xml内を検索しておいてください。「res\values\ids.xml」をテキストエディタで開きます。最下行に「</resources>」がありますが、その前の行に電源キーと検索キーの記述を追加します。「res\values\strings.xml」をテキストエディタで開きます。最下行「</resources>」の前の行に電源キーと検索キーの説明文字列を追加します。「res\values-ja\strings.xml」をテキストエディタで開きます。最下行「</resources>」の前の行に電源キーと検索キーの説明文字列を日本語で追加します。「res\layout\navigation_bar.xml」をテキストエディタで開きます。言ってこの編集がメインになります。このxmlファイルは大まかに以下のような構造になっています。/></com.android~>特定状況下というのは、アルバムアプリで画像を表示したりしている時などのことで、ソフトキーの位置に点3つが表示されている、アレです。縦画面時のレイアウトは、左から順番に並びます。横画面時のレイアウトは、上から順番に並びます。同じ位置でソフトキーを配置する場合、縦画面のレイアウトと横画面のレイアウトはxmlの記述が逆になりますので混乱しそうになります。見ると何となくどういじれば良いか分かってくると思いますが、簡単に要所を説明します。してみたらこうなった、という程度ですので、間違ってる可能性はありますが...。android:layout_widthやandroid:layout_heightの値は、「dip」という単位で記述され、SO-01Eの場合はピクセル数の半分になります(1dip=2ピクセル)。SO-01Eの横幅は720ピクセルですので、ナビゲーションバーの横幅は合計360dipになるようにしないといけません。android:layout_weightは、widthやheightに具体的なdipを入れる場合は通常0.0にしますが、widthやheightを「fill_parent」にすると、weightの値を比率として余ったスペースを自動的に計算して割り振ってくれます。systemui:keyCodeは、物理キーのコードです。ホームキーは3、戻るキーは4、というふうに決まっています。キーコード」等で検索すると一覧表が出てきますので、好きな物理キーの挙動をするソフトキーを追加できます。カメラキー(キーコード27)とか面白そうです。android:srcは、ソフトキーの画像ファイルを表します。電源キーと検索キーの画像は後ほど追加します。オリジナルのホームキーには「systemui:keyRepeat="false"」が記述されていますが、これは長押しを抑制します。今回ホームキー長押しで履歴を出したいので、これはカットします。オリジナルのメニューキーには「android:visibility="invisible"」が記述されています。今回メニュー常時表示する際におそらく邪魔ですので、これもカットします。/>は、ソフトキー間の隙間になります。通常時のソフトキーを配置したら、特定状況下のレイアウトもサイズを合わせておいた方が良いでしょう。いうことで、説明しきれてない部分もあるかと思いますが、今回navigation_bar.xmlは以下のようにします。/></com.android.systemui.statusbar.phone.NavigationBarView>かなり見づらいと思いますがご容赦を...。このままテキストエディタ等にコピペしてゆっくりご覧になられた方がよろしいかと思われます。履歴キーは廃止にするはずなのに、幅ゼロで記述を残してあります。これはなぜかというと、履歴キーはあちこちから参照されているようで、完全に無くしてしまうと矛盾が生じてエラーが出てしまうので、それを回避するためです。ソフトキーの配置を入れ替えたい場合はxml内の記述順を入れ替えるだけです。存分にレイアウトしたら、上書き保存してください。今回新しく2つのソフトキーを追加しますが、画像ファイルは以下の場所に追加します。\res\drawable-xhdpi画像の種類は「png」です。画像ファイル名はnavigation_bar.xml内のandroid:srcの記述に合わせてください。(android:src="@drawable/ic_sysbar_power"であれば、画像ファイル名は「ic_sysbar_power.png」にする)自分で画像を作るのが面倒なら、他のファイルから適当な画像を抜き出しましょう。電源キーは/system/framework/framework-res.apk、検索キーは/system/app/GoogleQuickSearchBox.apkの中にそれっぽいやつが入っています。(apkは拡張子をzipに変えれば解凍して中の画像を取り出せます。解凍した中のres\drawable-xhdpiに入っていると思います。)今回は以下4つの画像を追加します。・ic_sysbar_power.png・ic_sysbar_power_land.png・ic_sysbar_search.png・ic_sysbar_search_land.png以上でapkのソースの編集は終わりです。new\SystemUI.apk「SystemUI」フォルダ内のソースファイル群がまとめられ、newフォルダに新たなSystemUI.apkが生成されます。■A6■SystemUI.apkを圧縮率を変えてパックし直し手順A5で出来たSystemUI.apkは、なぜかそのままでは使用できません。必要以上に圧縮されているらしいです。いうことで、以下の処理をしてください。tmpこれ、もし作業フォルダが深いところにあると、フルパスを入れるのが面倒ですね(フルパスでないと7zaが上手くいかない)。これはバッチファイルにしておくと、使い回しが出来て便利です。私は以下のようなバッチファイルを作りました。tmp:endこれを「apkrepack.bat」という名前で保存し、以下のように使います。SystemUIこれで今度こそ、実際に機能する改変済みのSystemUI.apkがnewフォルダに出来ました。■A7■手順Bに続く...出来た新しいSystemUI.apkですが、手順Bで使用します。このapkだけでも、差し替えたらなんと一応動きます。追加したソフトキーはロック画面でも表示されっぱなし、メニューキーは常時表示になりません。そのあたりの処理はodexの方でやっているわけですな。電源キーの追加だけしたい、とかであれば、apkの編集だけで十分です。パーミッションを0644にして、/system/appに置くだけです。・SystemUI.apk(先ほど手順Aでいじったもの)・SystemUI.odex(今回の獲物)・baksmali-1.4.1.jar(odexをソースファイルに展開するツール)・smali-1.4.1.jar(ソースファイルをdexにするツール)・7za.exe(dexをapkに埋め込む際に必要)・dexopt-wrapper(dex入りのapk→odexを生成するツール)・android.policy.odex(baksmali時に必要)・apache-xml.odex(baksmali時に必要)・bouncycastle.odex(baksmali時に必要)・core.odex(baksmali時に必要)・core-junit.odex(baksmali時に必要)・ext.odex(baksmali時に必要)・filterfw.odex(baksmali時に必要)・framework.odex(baksmali時に必要)・framework_ext.odex(baksmali時に必要)・services.odex(baksmali時に必要)baksmaliとsmaliは、「smali」で検索してゲット。7zaは「7-zip」で検索、コマンドラインバージョンをダウンロードしてゲット。SystemUI.apkは先ほど手順Aで生成したものです。その他odexは端末からぶっこ抜きましょう。SystemUI.odexは端末の「/system/app」に入っています。その他odex類は全部端末の「/system/framework」に入っています。odexが多いですが、10個より多くなることは無さそうです。■B1■PCにおける作業フォルダの準備ここでは「c:\odexwork」とします。この中に、「old」と「new」フォルダを新規作成します(すでにある場合はそのまま使います)。必要物資のうち、SystemUI.apkとSystemUI.odexは「old」に入れておいてください。その他の必要物資は、作業フォルダ直下に全部ぶっこみます(すでにある物に関してはそのままでいいです)。ウィンドウをここで開く」すると便利です。□SystemUI(作業途中で生成される。SystemUIこのとき、作業フォルダに必要なodexが無いとエラーが出ますが、エラーの中で何が必要か教えてくれます。成功すると、作業フォルダ内に「SystemUI」フォルダができ、その中にソースファイルがたくさん入っています。「SystemUI」フォルダ内、以下のファイルをテキストエディタで書き換えます。getRecentsButton()Landroid/view/View;」を検索。method」があります。その下に空行を挟み、次のように追加します。onFinishInflate()V上のをそのままコピーし、メソッド名とconst値の2か所を変えるだけですね。これにより、システムが検索キー(の表示・非表示)を扱えるようになります。101」が2つになっちゃいますが気にしない。お気付きかとは存じますが、「0x7f0f009e」はapkいじりの時に追加した検索キーのIDです。setDisabledFlags(IZ)V」を検索。12」に書き換えます。7」とかになっているかもしれませんが、とにかく数字を2つ増やします。v6」がありますが、その下に空行を挟んで以下のような感じで追記します。Landroid/view/View;->setVisibility(I)V」がありますが、その下にも記述を追加します。165これらの追加で、検索キーとメニューキーがロック画面等で出てこなくなります。setMenuVisibility(ZZ)V」を検索。うんたらかんたら->setVisibility(I)V」の行をコメントアウト(行頭に「#」を付ける)します。Landroid/view/View;->setVisibility(I)Vここは、メニューキーが必要無い時に非表示にする処理ですが、これをコメントアウトすることによって、常にメニューキーが表示される状態になります。NavigationBarView.smaliの編集がすんだら上書き保存してください。SystemUIclasses.dexが生成されます。classes.dexオリジナルのapkと区別をつけるため、「deodex_SystemUI.apk」という名前でapkをコピーしておき、その中にclasses.dexを埋め込みます。手順Aと手順Bでapkとodex(のもと)が準備できました。以降は端末をCWMモードにして作業をすすめます。理由は安全のためと、転送したファイルの所有者が最初からrootになってて気分が良いから。端末の電源を入れ、SONYロゴが出てから15秒くらいして青LEDが点くのですぐさま音量DOWNボタンを押しっぱなしにし、LEDが緑に変わったらボタンを離します。するとCWMのメニュー画面になります。/data」をしておきます。PCと端末はUSBでつないでおいてください。/data/local/tmp多分、rootをとった時に/data/local/tmpは作られていると思うので、それ前提です。dexopt-wrapperを導入している場合、3行目は不要です。以降は端末のシェルに入っての作業となります。dexopt-wrapperすでにdexopt-wrapperを導入している場合、3行目は不要です。/system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework_ext.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/filterfw.jardeodex_SystemUI.apkを元に、SystemUI.odexが生成されます。3つ目の引数がやたら長いですが、これを指定しておかないと、上手くodexが作れません。順番も重要のようですので、この部分は下手にいじらないほうが良いでしょう。SystemUI.odex」しておきましょう。conv=notrunc手順C4で生成したodexは、署名がまずいらしいので、元のodexから署名部分を移植します。SystemUI.odex生成物のパーミッションを0644に変更。odexのほうはすでに0644になっているかもしれませんが、念の為。rebootapkもodexも元のファイルをリネームしてバックアップ(すでにしたことがあれば不要)しておき、新しいapkとodexを/system/appに配置。起動し、ステータスバーやナビゲーションバーが出てきたら成功と思われます。4:26なにかと質問ですみません。ナビゲーションバーを5つではなく、バック、ホーム(アプリ履歴)、メニューとしたいばあいどうすればいいでしょうか?何度やっても表示が消えてしまいます。教えていただければ助かります。SystemUI.odexのほうはいじりません。表示が消えるというのは、SystemUIがエラーで落ちるということでしょうか。本文にもありますが、@id/recent_appsの行はうかつに消すとエラーになりますので、layout_widthを0.0dipにするにとどめてください。するとメニューキーが履歴キーの位置に詰まってきますので、幅を80.0dipに変更。部分を編集してください。)横画面時のレイアウトではメニューの右にスペースを設けないといけないので、左端のもの(幅が40.0dipのView)と同じものを追加してください。縦画面時のレイアウトの方はメニューの上に追加です。ホーム長押しを有効にするために、@id/homeの行のsystemui:keyRepeat="false"は削除。以上でいけると思います。別のコメントでも書きましたが、一気にいじるのではなく、少しずつ改変しては動作確認して、どこでエラーになるかを切り分けるようにしてください。そのやり方でやっていくと、どの部分をいじるといけなかったか大体分かってくると思います。3:21ご丁寧にありがとうございました。メニューキーの常時表示が出来るようになりました。23:55もしdeodexのばあいはB0からはどうすればいいでしょうか?僕は電源キーがロック画面で消えたくないです。9:30前提の環境ではロック画面でボタンが消えることはありません。最近の機種とかはロック画面でナビバー自体が消えたりするのかもしれません。その場合は諦めてください。(当方では検証できないです。記事が古いということで...。電源キーを長押しすると複数回タップされているような挙動をしています。(電源メニューの表示後、一度消え再度表示されます。)systemui:keyRepeat="false"を追記したりして、長押しを制御しようとしましたがうまくいきません。心当たりがありましたら。(1)自己紹介キューブキューブ貝のように生きてます。詳細プロフィールを表示リンクキューブ日報カスタムなネタ以外のことを書いてるブログ。Xperia絡みの様々なことを考察されています。~android~主にXperiaやwinやubuntuについていろいろ研究されています。Blogger出張所Xperiaをはじめ、様々な端末のレビューや技術的解説をされています。トムとロイド主にXperiaに関して、興味深い事柄を分かりやすくまとめておられます。Blog主にAndroidのカスタマイズ(要root・Xposed含む)について解説しておられます。でこにく主にXperiaやiPhoneに関して検証やまとめをされています。いいハコ作ろう時折AndroidやiPhone、Macの小技等を分かりやすく解説しておられます。indigomodeの電話メモAndroid端末に関していろいろ検証されています。GX/Z、その他Android端末に関して検証されています。あやしふこそ、ものぐるをしけれ主にAndroid(Xperia)関連のネタについて書きそぼっておられます。※上記、勝手にリンクさせていただいております(敬称略)。不都合等ありましたらご一報いただければ幸いです。