Thảo luận Startus bar trong suốt cho Galaxy M110s

Thảo luận trong 'M110S GALAXY S' bắt đầu bởi 01239508793minh, 2 Tháng chín 2013.

  1. 01239508793minh Thành viên

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

    http://cdn.gsm.vn/attachments/screenshot_2013-06-02-16-45-03-png.1181876/


    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
    Dùng để Decompile, Recompile apk
    Công cụ :
    - apktool
    - Notepad++
    - JDK
    - JRE

    - 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).
    jinju1990 thích bài này.
  2. nhoxkononline

    nhoxkononline Thành viên

    Bài viết:
    444
    Được Like:
    68
    rất cảm ơn thớt đã chia sẻ cho anh em. nhưng ai k có PC thì làm tnào đây :))
  3. phamquocvi

    phamquocvi Thành viên

    Bài viết:
    64
    Được Like:
    7
    k có hình à b ơi :D.
  4. bbanana

    bbanana Thành viên

    Bài viết:
    1,217
    Được Like:
    351
    làm gì mà phải rắc rối thế?
  5. koolviphd

    koolviphd Thành viên

    Bài viết:
    603
    Được Like:
    51
    Có vẻ rắc r thật

    Sent from my SHW-M110S using Gsm.vn
  6. jinju1990

    jinju1990 Thành viên

    Bài viết:
    28
    Được Like:
    1
    Lâu lâu mới có người viết tut tận tình thế :));) . Like thôi. Có ai bỏ time để dạy ae mới vọc vạch ^^các bác toàn giấu nghề. Có ai viết tut mod nút data k nhỉ. Cái này khó làm quá.

    Sent from my SHW-M110S using Gsm.vn
  7. vietthangcamlan

    vietthangcamlan Thành viên

    Bài viết:
    422
    Được Like:
    51
    có mấy bản ROM có stastus bar trong suốt đó, cop cái system UI là xong đỡ phải ngồi mod! dù sao cũng cảm ơn chủ thớt!:look_down:
  8. Alo113Bk

    Alo113Bk Thành viên

    Bài viết:
    54
    Được Like:
    1
    Bac nao cho em xin file framework-res.apk đã add tiếng việt với ạ.e android 2.3.6