Cách thêm nút Reboot Recovery vào Menu nguồn của Galaxy S7 Edge

adb pull /system/framework/services.jar



Thay đổi thành một thư mục bạn chọn.

  1. Bây giờ, hãy mở APK Easy Tool và chọn Chọn bên cạnh “ Tệp APK để làm việc ”. Chọn framework-res.apk bạn đã lấy từ Galaxy S7 của mình. Bây giờ hãy nhấp vào nút Decompile.



  1. Bây giờ, hãy vào thư mục của tệp .APK đã được dịch ngược và dán các tệp từ tệp .zip framework-res mà tôi đã cung cấp vào thư mục dịch ngược của framework-res.apk của bạn.
  2. Bây giờ đang sử dụng trình soạn thảo văn bản, tôi thực sự khuyên bạn nên sử dụng một cái gì đó như Notepad ++ có thể tổ chức mã XML, mở res / values ​​/ array.xml
  3. Bây giờ đây là nơi chúng ta sẽ tìm hiểu kỹ thuật thực sự. Bạn cần thêm tất cả các dòng tôi hiển thị trong Dũng cảm trong các đoạn mã sau.
  4. Tìm và thêm vào những gì tôi đã in đậm.

quyền lực
datamode
Máy bay
khởi động lại
lệnh đóng cửa
báo cáo lỗi
người dùng
khởi động lại
chế độ khẩn cấp
màn hình phụ
screenrec



  • Bây giờ, hãy truy cập res / values ​​/ string.xml và thêm vào các Dũng cảm .

Đang sạc thiết bị được kết nối qua USB…
10,32,768,10,60
Khởi động lại phục hồi



  • Được rồi, chúng ta đã hoàn tất với framework-res.apk. Bây giờ bạn có thể biên dịch lại nó trong APK Easy Tool.
  • Bây giờ chúng ta sẽ làm việc trên Services.jar, vì vậy hãy dịch ngược Services.jar bằng APK Easy Tool và sao chép các tệp từ tệp .zip jar Services mà tôi đã cung cấp ở trên vào thư mục Services.jar mới được dịch ngược.
  • Bây giờ đang sử dụng trình soạn thảo văn bản, hãy mở smali / com / android / server / policy / GlobalActions.smali và một lần nữa, bạn sẽ thêm in đậm dòng trong # trường phiên bản

.field mEmergencyStringId: I
.field private mRebootRecovery: Lcom / android / server / policy / GlobalActions $ SinglePressAction;

  • Bây giờ hãy tìm “ .method private createDialog () Lcom / android / server / policy / GlobalActions $ GlobalActionsDialog; '
if-eqz v4,: cond_8 const v4, 0x10809f4: goto_4 const v6, 0x10406e2 move-object / from16 v0, p0 invoke-direct {v5, v0, v4, v6}, Lcom / android / server / policy / GlobalActions $ 20; - > (Lcom / android / server / policy / GlobalActions; II) V move-object / from16 v0, p0 iput-object v5, v0, Lcom / android / server / policy / GlobalActions; -> mRestart: Lcom / android / server / chính sách / GlobalActions $ SinglePressAction; phiên bản mới v4, Lcom / android / server / policy / GlobalActions $ 47; move-object / from16 v0, p0 iget-object v0, v0, Lcom / android / server / policy / GlobalActions; -> mContext: Landroid / content / Context; invoke-virtual {v0}, Landroid / content / Context; -> getResources () Landroid / content / res / Resources; move-result-object v0 const-string v1, 'tw_ic_do_rebootrecovery' const-string v2, 'drawable' const-string v3, 'android' invoke-virtual {v0, v1, v2, v3}, Landroid / content / res / Resources ; -> getIdentifier (Ljava / lang / String; Ljava / lang / String; Ljava / lang / String;) I move-result v5 move-object / from16 v0, p0 iget-object v0, v0, Lcom / android / server / chính sách / GlobalActions; -> mContext: Landroid / content / Context; invoke-virtual {v0}, Landroid / content / Context; -> getResources () Landroid / content / res / Resources; move-result-object v0 const-string v1, 'tw_ic_do_rebootrecovery' const-string v2, 'string' const-string v3, 'android' invoke-virtual {v0, v1, v2, v3}, Landroid / content / res / Resources ; -> getIdentifier (Ljava / lang / String; Ljava / lang / String; Ljava / lang / String;) I move-result v6 move-object / from16 v0, p0 invoke-direct {v4, v0, v5, v6}, Lcom / android / server / policy / GlobalActions $ 47; -> (Lcom / android / server / policy / GlobalActions; II) V move-object / from16 v0, p0 iput-object v4, v0, Lcom / android / server / policy / GlobalActions; -> mRebootRecovery: Lcom / android / server / policy / GlobalActions $ SinglePressAction; invoke-static {}, Lcom / samsung / android / feature / SemCscFeature; -> getInstance () Lcom / samsung / android / feature / SemCscFeature; move-result-object v4 const-string / jumbo v5, 'CscFeature_Common_ConfigBikeMode'
  • Phần tiếp theo rất phức tạp, bạn cần thêm các dòng in đậm và sửa đổi phần gạch chân.
const / 16 v6, 0x80 const / 4 v7, 0x1 move-object / from16 v0, p0 invoke-direct {v0, v6, v4, v5, v7}, Lcom / android / server / policy / GlobalActions; -> addDialogItemsIfEnabled (ILcom / android / server / policy / GlobalActions $ Action; Ljava / use / ArrayList; Z) Z phiên bản mới v4, Lcom / android / server / policy / GlobalActions $ BugReportAction; move-object / from16 v0, p0 invoke-direct {v4, v0}, Lcom / android / server / policy / GlobalActions $ BugReportAction; -> (Lcom / android / server / policy / GlobalActions;) V move-object / from16 v0 , p0 iget-object v5, v0, Lcom / android / server / policy / GlobalActions; -> mItems: Ljava / use / ArrayList; const / 16 v6, 0x100 move-object / from16 v0, p iget-object v4, v0, Lcom / android / server / policy / GlobalActions; -> mRebootRecovery: Lcom / android / server / policy / GlobalActions $ SinglePressAction; move-object / from16 v0, p0 iget-object v5, v0, Lcom / android / server / policy / GlobalActions; -> mItems: Ljava / use / ArrayList; const / 4 v7, 0x1 move-object / from16 v0, p0 invoke-direct {v0, v6, v4, v5, v7}, Lcom / android / server / policy / GlobalActions; -> addDialogItemsIfEnabled (ILcom / android / server / policy / GlobalActions $ Action; Ljava / use / ArrayList; Z) Z const / 16 v6, 0x200 #before là 0x100 const / 4 v7, 0x1 move-object / from16 v0, p0 invoke-direct {v0, v6, v4, v5, v7}, Lcom / android / server / policy / GlobalActions; -> addDialogItemsIfEnabled (ILcom / android / server / policy / GlobalActions $ Action; Ljava / use / ArrayList; Z) Z
  • Bây giờ tìm kiếm const-string / jumbo v4 , 'Im lặng' và thêm những dòng này bên trên nó. Hai dòng in đậm phải khớp nhau.
const-string / jumbo v4, 'Emergencymode' invoke-virtual {v4, v11}, Ljava / lang / String; -> equals (Ljava / lang / Object;) Z move-result v4 if-eqz v4,: cond_15 move- object / from16 v0, p0 iget-object v4, v0, Lcom / android / server / policy / GlobalActions; -> mItems: Ljava / use / ArrayList; move-object / from16 v0, p0 iget-object v5, v0, Lcom / android / server / policy / GlobalActions; -> mEmergency: Lcom / android / server / policy / GlobalActions $ ToggleAction; invoke-virtual {v4, v5}, Ljava / use / ArrayList; -> add (Ljava / lang / Object;) Z goto / 16: goto_7 : cond_15 const-string / jumbo v4, 'rebootrecovery' invoke-virtual {v4, v11}, Ljava / lang / String; -> equals (Ljava / lang / Object;) Z move-result v4 if-eqz v4,: cond_asc1 move-object / from16 v0, p0 iget-object v4, v0, Lcom / android / server / policy / GlobalActions; -> mItems: Ljava / use / ArrayList; move-object / from16 v0, p0 iget-object v5, v0, Lcom / android / server / policy / GlobalActions; -> mRebootRecovery: Lcom / android / server / policy / GlobalActions $ SinglePressAction; invoke-virtual {v4, v5}, Ljava / use / ArrayList; -> add (Ljava / lang / Object;) Z goto / 16: goto_7 : cond_asc1 const-string / jumbo v4, 'im lặng'

Tiếp theo, chúng tôi cần thêm một phần còn thiếu của services.jar của Android 7, vì vậy chúng tôi sẽ thêm lại phần đó để bản mod này hoạt động.
Tìm dòng cho .method private addCustomDialogItems (Landroid / graphics / drawable / BitmapDrawable; Ljava / lang / String; Landroid / content / Intent; ILjava / use / ArrayList;) Z

Và thêm phương thức này ở trên:



.method truy cập tổng hợp tĩnh $ 500 (Lcom / android / server / policy / GlobalActions;) Landroid / content / Context; .locals 1 iget-object v0, p0, Lcom / android / server / policy / GlobalActions; -> mContext: Landroid / content / Context; phương thức return-object v0 .end

Vậy là xong, bây giờ biên dịch lại services.jar và bạn có thể đẩy cả framework-res.apk và services.jar đã biên dịch lại vào điện thoại của mình, bằng adb đẩy hoặc với nút 'Cài đặt vào điện thoại' của Công cụ dễ dàng APK.

Nếu bạn nhận được vòng lặp khởi động sau khi đẩy vào điện thoại, hãy khởi động vào khôi phục tùy chỉnh và xóa Dalvik + Bộ nhớ đệm.

3 phút đọc