ステータスバーとナビバーの透過

この記事の賞味期限は切れています。
投稿から1年以上経過しているため、情報が古い可能性があります。

当サイトで紹介するMODやアプリなどの内、システムファイルの改変やシステムに深く関わるものはroot化やリカバリが必須となります(root化の必要なしと明記している場合は除く)。導入は自己責任で行ってください。また、技適の無い機器の使用は自己責任です。

参考:xda
ステータスバーとナビゲーションバーを透過します。

上の画像ではステータスバーが#7f000000、ナビバーが#00000000になっています。
以下の行数はエディタなど環境により変わる可能性があります。
android.policy.jarをデコンパイルし、
android.policy\smali\com\android\internal\policy\impl\PhoneWindowManager.smali
を開き、

    .line 2648
    iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemTop:I
    iput v0, p1, Landroid/graphics/Rect;->top:I
    .line 2649
    iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemRight:I
    iput v0, p1, Landroid/graphics/Rect;->right:I
    .line 2650
    iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemBottom:I
    iput v0, p1, Landroid/graphics/Rect;->bottom:I

の下にある8082行目以降、

.line 2651
    iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mStatusBar:Landroid/view/WindowManagerPolicy$WindowState;
    if-eqz v0, :cond_1b
    iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mStatusBar:Landroid/view/WindowManagerPolicy$WindowState;
    invoke-interface {v0}, Landroid/view/WindowManagerPolicy$WindowState;->getSurfaceLayer()I
    move-result v0
    .line 2653
    :goto_1a
    return v0
    .line 2652
    :cond_1b
    iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mNavigationBar:Landroid/view/WindowManagerPolicy$WindowState;
    if-eqz v0, :cond_26
    iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mNavigationBar:Landroid/view/WindowManagerPolicy$WindowState;
    invoke-interface {v0}, Landroid/view/WindowManagerPolicy$WindowState;->getSurfaceLayer()I
    move-result v0
    goto :goto_1a
    .line 2653
    :cond_26
    const/4 v0, 0x0
    goto :goto_1a

を削除します。
.end methodの上に

    const/4 v0, 0x0
    return v0

を追加して、保存してandroid.policy.jarをコンパイルします。
(deodexされていない場合はdexopt-wrapperでodexに変換)
次に透過度を指定します。
\SystemUI\res\values\drawables.xml
を開き、
<item type=”drawable” name=”status_bar_background”>#5a000000</item>
と書き換えます。
\SystemUI\res\layout\navigation_bar.xml
を開き
android:id=”@id/nav_background” android:background=”#ff000000″を
android:id=”@id/nav_background” android:background=”#5a000000″
にします。
SystemUI\smali\com\android\systemui\statusbar\phone\PhoneStatusBar.smali
を開いて「IIIII」を検索します。(参考:891行目)

    const/16 v3, 0x7e3
    const v4, 0x800068
    move v2, v1
    move v5, v1
    invoke-direct/range {v0 .. v5}, Landroid/view/WindowManager$LayoutParams;-><init>(IIIII)V


    const/16 v3, 0x7e3
    const v4, 0x800068
    const/4 v5, -0x3
    move v2, v1
    invoke-direct/range {v0 .. v5}, Landroid/view/WindowManager$LayoutParams;-><init>(IIIII)V

にします。
続けて「mPixelFormat:I」を検索します。(参考:5608行目)

    .line 441
    :cond_1
    :goto_4
    iput v8, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mPixelFormat:I


    .line 441
    :cond_1
    :goto_4
    const/4 v5, -0x3
    iput v8, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mPixelFormat:I

にします。
全て保存した後SystemUI.apkをコンパイルし、
SystemUI.apkとandroid.policy.jar(またはandroid.policy.odex)を端末にコピーし、
deodexされている場合はSystemUI..odexとandroid.policy.odexを削除(または名前の変更)してください。
※Xperia Launcherなど一部のホームアプリではうまく透過されないようです。

333用ファイルはここからダウンロードできます。
SystemUI.apkとandroid.policy.odexを置き換えます。SystemUI.odexの削除は自分でしてください。
(SystemUI.apkは自分用に編集してあるので注意してください)



コメントフォーム右上の「ログイン」メニューで各種SNSアカウントでログインできます。
匿名でコメントしたい場合は、名前とメールアドレスを入力した後「アカウントを作成せず投稿する」にチェックを入れてください。
Disqusに登録すると、返信通知を受け取れます。