[Hướng dẫn] Làm trong suốt và mờ cho status bar và navi bar

Thảo luận trong 'Kinh nghiệm | Thủ thuật'

Đang tải...
  1. Offline

    linkone Thành viên năng động

    TẠO HIỆU ỨNG TRONG SUỐT & MỜ CHO STATUS VÀ NAVI BAR

    [​IMG]


    A/ NGUYÊN LÝ BIỂU DIỄN ĐỘ TRONG, HIỆU ỨNG MỜ

    Mỗi thành phần đồ họa trên Android đều được thể hiện ở 2 dạng, hoặc là file ảnh (.png) hoặc là mã màu hex (hex colour code).

    Các file ảnh png, để có chế độ nền trong suốt, cần chỉnh sửa background bằng các công cụ xử lý ảnh số. Có người dùng Photoshop, người khác dùng 1 số công cụ có sẵn (ví dụ 9patch) trong bộ Android SDK.

    Các thành phần đồ họa có màu sắc thể hiện bằng mã màu thì cần đổi sang mã màu trong suốt. Với tông màu đen (#ff000000), Độ trong suốt/Hiệu ứng mờ thể hiện ở dạng mã màu hex như sau:

    #00000000 - Độ trong suốt 100%
    #3f000000 - màu đen với độ trong suốt 75% (~ 25% hiệu ứng mờ)
    #7f000000 - màu đen với độ trong suốt 50% (~ 50% hiệu ứng mờ)
    #bf000000 - màu đen với độ trong suốt 25% (~ 75% hiệu ứng mờ)

    Ngoài các mã trên, có thể gg để tìm thêm nhiều mã hiệu ứng mờ khác nữa.

    B/ CÔNG CỤ


    DOWNLOAD
    - Bung và đóng gói apk: Apktool v1.5.2 (hoặc bất kỳ công cụ nào có khả năng bung và đóng gói file apk Jelly Bean)
    - Chỉnh sửa file xml: Notedpad ++
    - Thao tác file nén và sign: 7zip
    - Dexodex ROM : AutoDEOTool v1.0.4 hoặc Android Ultimate Toolbox Pro.
    - Adb

    C/ CHUẨN BỊ
    1/ Điện thoại :
    - Chạy ROM gốc mọi phiên bản. Tốt nhất nên dùng ROM chưa chỉnh sửa
    - Đã root, cài sẵn adbdInsecure.apk, busybox và dexopt-wrapper để phục vụ công đoạn re-odexing
    2/ Máy tính
    - Cài sẵn Java Runtime Environment (JRE) trong bộ Oracle Java Development Kit.
    -Deodex ROM gốc rồi lấy ra các file (deodexed): framework-res.apk; SystemUI.apk và android.policy.jar
    - Chép vào cùng thư mục chứa apktool để tiện thao tác.

    D/ THỰC HIỆN
    ANDROID.POLICY
    Tải resource vào bộ nhớ:
    c:\apktool>apktool if framework-res.apk

    Bung file android.policy.jar bằng lệnh sau:
    c:\apktool>apktool d android.policy.jar

    Tìm và mở thủ tục sau:
    \com\android\internal\policy\impl\PhoneWindowManager.smali

    Tìm method này:

    Mã:
    .method public getSystemDecorRectLw(Landroid/graphics/RectI )
    (….)
    .end method
    
    Xóa toàn bộ nội dung của method này (bắt đầu bằng từ khóa .method và kết thúc bằng .end method) và thay bằng đoạn sau:
    Mã:
    .method public getSystemDecorRectLw(Landroid/graphics/RectI )
    .locals 1
    .parameter "systemRect"
    .prologue
    .line 3047
    iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemLeft:I
    iput v0, p1, Landroid/graphics/Rect;->left:I
    .line 3048
    iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemTop:I
    iput v0, p1, Landroid/graphics/Rect;->top:I
    .line 3049
    iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemRight:I
    iput v0, p1, Landroid/graphics/Rect;->right:I
    .line 3050
    iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemBottom:I
    iput v0, p1, Landroid/graphics/Rect;->bottom:I
    .line 3051
    const/4 v0, 0x0
    return v0
    .end method
    Đóng gói lại

    c:\apktool>apktool b android.policy.jar.out

    Cách sign file kết quả sau khi đóng gói:

    Dùng 7zip mở đồng thời file android.policy.jar gốc và file vừa đóng gói (trong thư mục /android.policy.jar.out/dist/..), kéo toàn bộ thư mục META-INF từ file gốc sang file vừa đóng gói.


    * SYSTEMUI

    Dùng apktool bung file SystemUI.apk để sửa:

    c:\apktool>apktool d SystemUI.apk

    Mở file và sửa mã xml. (Chủ yếu là sửa mã màu của android:background)

    Lưu ý: Ở các đoạn mã sửa dưới đây dùng hiệu ứng mờ 50%, tức là “#7f000000”, hoặc 75% (“#3f000000”) để minh họa. Các cụ có thể lựa chọn hiệu ứng trong suốt khác (100%; 80%; 75% v.v) tùy theo sở thích.

    \SystemUI\res\layout\navigation_bar.xml

    GỐC

    Mã:
    <com.android.systemui.statusbar.phone.NavigationBarView android:background="#ff000000" android:layout_width="fill_parent" android:layout_height="fill_parent"


    SỬA

    Mã:
    <com.android.systemui.statusbar.phone.NavigationBarView android:background="#7f000000" android:layout_width="fill_parent" android:layout_height="fill_parent"


    \SystemUI\res\layout-sw600dp\navigation_bar.xml

    GỐC

    Mã:
    <com.android.systemui.statusbar.phone.NavigationBarView android:background="#ff000000" android:layout_width="fill_parent" android:layout_height="fill_parent"


    SỬA

    Mã:
    <com.android.systemui.statusbar.phone.NavigationBarView android:background="#7f000000" android:layout_width="fill_parent" android:layout_height="fill_parent"


    \SystemUI\res\values\drawables.xml

    GỐC:
    Mã:
    <item type="drawable" name="status_bar_background">#ff000000</item>
    <itemtype="drawable" name="status_bar_notification_row_background_color">#ff1a1a1a</item>
    <item type="drawable" name="system_bar_background">#ff000000</item>
    <item type="drawable" name="notification_icon_area_smoke">#aa000000</item>
    
    SỬA:
    Mã:
    <item type="drawable" name="status_bar_background">#7f000000</item>
    <item type="drawable" name="status_bar_notification_row_background_color">#3f000000</item>
    <item type="drawable" name="system_bar_background">#7f000000</item>
    <item type="drawable" name="notification_icon_area_smoke">#3f000000</item>
    
    Bung file SystemUI, mở file
    \SystemUI\smali\com\android\systemui\statusbar\phone\PhoneStatusBar.smali

    tìm đến đoạn mã sau và sửa như dưới đây.

    <<<<<Quy ước:
    Ký hiệu (+) là thêm dòng lệnh sau dấu đó, (-) là xóa bỏ dòng lệnh sau dấu đó. Các dòng lệnh khác giữ nguyên. Đoạn mã sau khi sửa xong không bao gồm ký hiệu (+)/(-). >>>>>>>>>>>

    Mã:
    .method private getNavigationBarLayoutParams()Landroid/view/WindowManager$LayoutParams;
    .locals 6
    .prologue
    const/4 v1, -0x1
    .line 1328
    new-instance v0, Landroid/view/WindowManager$LayoutParams;
    const/16 v3, 0x7e7
    const v4, 0x800068
    (+) const/4 v5, -0x3
    move v2, v1
    (-) move v5, v1
    invoke-direct/range {v0 .. v5}, Landroid/view/WindowManager$LayoutParams;-><init>(IIIII)V
    .line 1338
    
    Lưu thay đổi

    Mở tiếp

    \SystemUI\smali\com\android\systemui\statusbar\tablet\TabletStatusBar.smali

    Tìm và sửa:
    Mã:
    .method private addStatusBarWindow()V
    .locals 7
    .prologue
    const/4 v1, -0x1
    .line 235
    invoke-virtual {p0}, Lcom/android/systemui/statusbar/tablet/TabletStatusBar;->makeStatusBarView()Landroid/view/View;
    move-result-object v6
    .line 237
    .local v6, sb:Landroid/view/View;
    new-instance v0, Landroid/view/WindowManager$LayoutParams;
    const/16 v3, 0x7e7
    const v4, 0x800048
    (+) const/4 v5, -0x3
    (-) const/4 v5, 0x4
    (-) move v2, v1
    invoke-direct/range {v0 .. v5}, Landroid/view/WindowManager$LayoutParams;-><init>(IIIII)V
    
    Mở thư mục

    \SystemUI\res\drawable-xhdpi

    Dùng Photoshop mở 2 file ảnh này ra. Dùng tính năng Background Erase Tool để xóa nền của ảnh đi, biến nó thành 100% trong suốt.
    Mã:
    ic_systembar_bg.png
     
    ic_systembar_bg_land.png
    (Nếu ko có Photoshop, có thể dùng phần mềm sửa ảnh số khác có chức năng tương tự)

    Thường thì chỉ cần sửa 2 file trên là đủ. Tuy nhiên, nếu muốn trong suốt thanh navi3 cho mọi style, có thể sửa tương tự như trên với các file ảnh khác như sau:
    Mã:
    ic_systembar_bg_02/03/04.png
     
    ic_systembar_bg_land_02/03/04.png
    Xong lưu thay đổi lại. Dùng công cụ apktool để đóng gói

    C:\Apktool>apktool b SystemUI

    Cách sign SystemUI.apk

    Dùng 7zip mở đồng thời file SystemUI.apk gốc và file mới sửa trong thư mục SystemUI/dist/…

    Kéo META-INF và AndroidManifest.xml từ file gốc thả sang file sửa. Chọn OK khi có hộp thoại yêu cầu xác nhận.

    Chép file SystemUI/dist/SystemUI.apk vừa sign xong vào điện thoại, tạm thời cho vào thư mục /system/, set permission rw-r-r (644), owner: root.root, xong rồi tiếp tục di chuyển đè lên file cũ trong /system/app/. Xóa file SystemUI.odex đi.

    Wipe dalvik cache lần nữa rồi reboot lại máy.

    (Không giống như các file framework, các ứng dụng hệ thống như SystemUI.apk sau khi deodex thì không nhất thiết phải re-odex lại).
    njckjen, thuypt, KnNam6 others like bài này.

  2. Chủ đề tương tự: [Hướng dẫn]
    Diễn đàn Tiêu đề Date
    Kinh nghiệm | Thủ thuật [Huớng dẫn] Manual hệ Camera Xperia Android 4.3 11/2/14
    Kinh nghiệm | Thủ thuật [Hướng Dẫn][ Android Apk Tool] Decompile Và Compile Nhanh Tuyệt Đối 21/12/13
    Kinh nghiệm | Thủ thuật [Hướng dẫn] Trải nghiệm sự khác biệt trong âm nhạc với Walkman, PureXAudio và Viper4Android 6/10/13
    Kinh nghiệm | Thủ thuật [Hướng dẫn][ All Xperia ] [ Port Animation Nesux7 ] 17/8/13
    Kinh nghiệm | Thủ thuật [Hướng dẫn]Mod ứng dụng bằng APKTOOL - thông báo pin, màn hình khóa... !!! 9/5/13

  3. Bita.C2
    Offline

    Bita.C2 Thành viên mới

    Bài viết:
    51
    Đã được like:
    16
    bài viết hay, cảm ơn bác
  4. tangbangtroj
    Offline

    tangbangtroj Thành viên năng động

    Bài viết:
    363
    Đã được like:
    43
    Cái này xem lâu rồi mà ko biết cái Bung file android.policy.jar bằng lệnh sau:

    c:\apktool>apktool d android.policy.jar
    Móc ở đâu ra
  5. Mr.T_T
    Offline

    Mr.T_T Thành viên am hiểu

    Bài viết:
    1,182
    Đã được like:
    294
    Cái nè hay mà có vẻ hơi lằng nhằng :hihi
  6. Hùng Vũ
    Offline

    Hùng Vũ Người đi ngược gió... Staff Member

    Bài viết:
    4,660
    Đã được like:
    1,373
    Bạn sửa lại tiêu đề giùm mình, có ai để tiêu đề hoa toàn bộ nhứ bạn không?
    linkoneHoàng Ân_sony xp like bài này.
  7. shoda
    Offline

    shoda Thành viên am hiểu

    Bài viết:
    596
    Đã được like:
    318
    Có ai làm thử thành công trò nay chưa nhẩy...thấy hay quá :">
  8. linkone
    Offline

    linkone Thành viên năng động

    Bài viết:
    322
    Đã được like:
    126
    bạn thử chưa mà kêu móc ở đâu
    bạn có thể bỏ c:\apktool>
  9. tangbangtroj
    Offline

    tangbangtroj Thành viên năng động

    Bài viết:
    363
    Đã được like:
    43
    T thử rồi.mod đến thanh statutbar và navibar trong suốt thì chịu.Đang cần 1 ng hướng dẫn vụ này.bạn làm thành công chưa.t vướng ngay chỗ ấy,ko biết tìm chỗ nào
    Cái " android.policy.jar " lấy ở đâu?
  10. linkone
    Offline

    linkone Thành viên năng động

    Bài viết:
    322
    Đã được like:
    126
    system/framework/
    tangbangtroj like bài này.
  11. cuhoangno1
    Offline

    cuhoangno1 Thành viên mới

    Bài viết:
    1
    Đã được like:
    0
    Bạn ơi có cần deodex rom không . Nếu muốn làm trong suốt thanh stt thì bỏ bước nào

Chia sẻ trang này