HƯỚNG DẪN FIX SMS 160 KÝ TỰ CHO IM-A850S/L/K
HƯỚNG DẪN FIX SMS 160 KÝ TỰ CHO IM-A850S/L/K
I/ GIỚI THIỆU
-
Là cách thức patch tương đối ngắn gọn và đơn giản vào framework của
Jelly Bean 4.1.2 hiện tại trên IM-A850S/L/K để nâng số ký tự SMS từ 80
lên 160. Gửi SMS được cho 1 số tổng đài SMSC và hỗ trợ mã USSD ít nhiều
đã được ROM JellyBean trên IM-A850 hỗ trợ sẵn.
- Đây chưa phải là giải pháp fix hoàn chỉnh để biến SMS trên máy Hàn tương đương bản quốc tế.
-
Khi áp dụng lên các dòng máy SKY khác chạy JB thì có thể thành công
ngay, có thể phải chỉnh sửa thêm 1 số đoạn mã khác vì framework của các
dòng máy SKY không hoàn toàn giống nhau.
II/ CÔNG CỤ
Apktool v1.5.2 : http://www.mediafire.com/?d69tpkw0lc2c081
AutoDEOTool v1.0.4 : http://www.mediafire.com/?agdozspzbb7kk6i
Notepad++ : http://notepad-plus-plus.org/download/
7zip : http://www.7-zip.org/download.html
Adb & dexopt-wrapper : http://www.mediafire.com/?i01jw1yun1eiw58
adbdInsecure : http://www.mediafire.com/?8w3d9wgezazkrq5
III/ DỰ PHÒNG
Đề phòng máy bị bootloop, trước khi chỉnh sửa framework, cần chuẩn bị dự phòng 1 trong các phương án khôi phục như sau:
-
Chép file framework.jar và framework.odex gốc vào chỗ lưu trữ nào đó để
khi cần copy ngược lại thư mục /system/framework/ trên điện thoại. Khi
chép ngược lại thư mục system/framework, nhớ phân quyền 2 file này là
rw-r-r (=644).
- Đóng gói 2 file framework.jar và framework.odex gốc thành bản patch.zip để cài qua CWM/TWRP
- Làm bản backup ROM qua CWM/TWRP recovery.
IV/ CHUẨN BỊ
A/ Máy tính
1) Cài sẵn Java Runtime Environment (JRE) trong bộ Java Development Kit.
2) Deodex framework của ROM, bằng tool AutoDEOTool v1.0.4 ở trên.
Ở đây tớ deodex sẵn framework.jar + framework.odex của IM-850K, phiên bản JB 2.12, làm nguồn minh họa. Link tải :http://www.mediafire.com/?4ghs38c20zcachc
3) Tạo thư mục làm việc (ví dụ C:-/Test), chép 3 file trong bộ apktool vào thư mục này.
4) Chép file framework.jar đã deodex vào thư mục làm việc.
B/ Điện thoại
Ở đây minh họa cho máy Vega R3 IM-A850K. Các dòng Sky khác tương tự.
a) Root máy, cài Busybox (thường cài sẵn kèm theo công cụ root). Ko có thì cài từ Play Store.
b)
Chép file dexopt-wrapper vào thư mục /system/bin phân quyền permission
là rw-r-r (=644). Một số bản ROM đã có sẵn busybox và dexopt-wrapper thì
bỏ qua bước này.
c) Bật Settings>System>Developer’s option > USB debugging và Settings>System>Security>Unknown source.
d) Cài adbdInsecure.apk lên điện thoại. Đặt tham số cho nó như thế này.
View attachment 1141228
V/ CHỈNH SỬA
1) Bung file framework.jar.
(Windows 7). Tại thư mục làm việc, mở Command Prompt bằng tổ hợp phím Shift+ Chuột Phải, chọn Open Window Command here.
Từ Command Prompt, gõ lệnh : apktool d framework.jar
View attachment 1141229
2) Chỉnh sửa mã smali
Vào thư mục: framework.jar.out\smali\com\android\internal\telephony\gsm
Mở file smsMessage.smali bằng Notepad++, tìm đến method sau (phím tắt Ctrl+F)
.method
public static
calculateLength(Ljava/lang/CharSequence;Z)Lcom/android/internal/telephony/SmsMessageBase$TextEncodingDetails;
[Mã Gốc]
.line 1468
const/16 v2, 0x8c
.line 1469
add-int/lit16 v2, v0, 0x85
div-int/lit16 v2, v2, 0x86
.line 1471
iget v2, v1, Lcom/android/internal/telephony/SmsMessageBase$TextEncodingDetails;->msgCount:I
mul-int/lit16 v2, v2, 0x86
.line 1475
rsub-int v2, v0, 0x8c
[Mã sửa]
.line 1468
const/16 v2, 0xa0
.line 1469
add-int/lit16 v2, v0, 0x98
div-int/lit16 v2, v2, 0x99
.line 1471
iget v2, v1, Lcom/android/internal/telephony/SmsMessageBase$TextEncodingDetails;->msgCount:I
mul-int/lit16 v2, v2, 0x99
.line 1475
rsub-int v2, v0, 0xa0
.method public static getEncodableGsm7bitForSubmitBody(Ljava/lang/String; )Z
View attachment 1141230
Bắt đầu :
[Mã Gốc]
.line 604
invoke-static {}, Lcom/android/internal/telephony/SkyMsgConfig;->isKTVendor()Z
[Mã Sửa]
.line 604
invoke-static {}, Lcom/android/internal/telephony/SkyMsgConfig;->getVendor()I
[Gốc]
.line 605
const/16 v0, 0x80
[Sửa]
.line 605
const/16 v0, 0x86
[Gốc]
.line 607
.end local v0 #BODY_MAX_7_BIT:I
.end local v1 #IsEncodableGsm7bit:Z
.end local v3 #textPart:[B
:cond_0
const/16 v0, 0x50
[Sửa]
.line 607
.end local v0 #BODY_MAX_7_BIT:I
.end local v1 #IsEncodableGsm7bit:Z
.end local v3 #textPart:[B
:cond_0
const/16 v0, 0xa0
[Gốc]
.line 615
:try_start_0
const-string v7, "euc-kr"
[Sửa]
.line 615
:try_start_0
const-string v7, "utf-8"
[Gốc]
.line 626
invoke-static {v3, v4}, Lcom/android/internal/telephony/GsmAlphabet;->getMatchableCharForGsm([BI)Z
move-result v7
if-nez v7, :cond_1
.line 627
const/4 v1, 0x0
[Sửa]
.line 626
invoke-static {v3, v4}, Lcom/android/internal/telephony/GsmAlphabet;->getMatchableCharForGsm([BI)Z
move-result v7
if-nez v7, :cond_1
.line 627
const/4 v1, 0x1
[BỔ SUNG]
Trên Notepad++, Chọn menu Search>Find (hoặc Ctr+F)
Tìm các đoạn mã: 0x80
Sửa thành : 0x86 (hoặc 0x8c)
Sau khi chỉnh xong thì chọn Save để lưu thay đổi lại
[CHÚ THÍCH]
Mã Hex --> Decimal :
0x80 = 128
0x86 = 134
0x8c = 140
0x98 = 152
0x99 = 153
0xa0 = 160
VI/ ĐÓNG GÓI
Từ cửa sổ Command Prompt, gõ lệnh :
apktool b framework.jar.out
View attachment 1141234
VII/ SIGN
Dùng
7zip mở đồng thời file framework.jar gốc chưa chỉnh và file
framework.jar đã chỉnh sửa trong thư mục \framework.jar.out\dist\ …
thành 2 cửa sổ khác nhau. Kéo META-INF và preloaded-classes từ cửa sổ
chứa file gốc thả sang cửa sổ chứa file chỉnh sửa, như thế này.
View attachment 1141232
Xong đóng lại.
VIII/ REODEXING
Công đoạn này yêu cầu bắt buộc phải có điện thoại. Nếu chạy từ máy tính phải nối điện thoại với máy tính qua cáp microUSB.
-
Tạo thư mục có tên là tmp trên bộ nhớ trong của điện thoại
(/sdcard/tmp). Thư mục này để lưu bản backup framework để khi cần có thể
khôi phục lại.
- Giải nén adb.rar tải về ở mục CÔNG CỤ,
được thư mục ADB. Chép file framework.jar từ thư mục
\framework.jar.out\dist\... vào thư mục Adb\ .. Đổi tên file thành
patched_framework.jar
-
Từ thư mục Adb, mở cửa sổ Command prompt, gõ/copy-paste lần lượt từng
dòng lệnh sau. Cuối mỗi dòng lệnh phải nhấn phím Enter để thực thi lệnh
đó.
View attachment 1141233
adb devices
adb remount
adb push patched_framework.jar /sdcard/tmp/
adb shell
su
cp system/framework/framework.jar sdcard/tmp
cp system/framework/framework.odex sdcard/tmp
cp -f sdcard/tmp/patched_framework.jar system/framework/framework.jar
dexopt-wrapper system/framework/framework.jar system/framework/patched_framework.odex $BOOTCLASSPATH
cp -f sdcard/tmp/framework.jar system/framework
chmod 777 /system/framework/framework.odex
chmod 777 /system/framework/framework.jar
chmod 777 /system/framework/patched_framework.odex
chmod 644 /system/framework/framework.jar
chown root.root /system/framework/framework.jar
busybox
dd if=/system/framework/framework.odex
of=/system/framework/patched_framework.odex bs=1 count=20 skip=52
seek=52 conv=notrunc
chmod 644 /system/framework/patched_framework.odex
chown root.root /system/framework/patched_framework.odex
cp /system/framework/patched_framework.odex /system/framework/framework.odex
chmod 644 /system/framework/framework.odex
chown root.root /system/framework/framework.odex
rm /system/framework/patched_framework.odex
rm /data/dalvik-cache/*.dex
reboot
CHÚ Ý
- Nếu chạy đến đoạn mã lệnh nào mà máy tự reboot thì chờ đến khi máy khởi động xong vào Android mới chạy tiếp các lệnh còn lại.
-
Có thể tạo file .bat/.sh script (chạy từ PC hoặc trên điện thoại) với
các mã lệnh như trên để tự động hóa công đoạn reodex dài dòng văn tự
này.
IX/ CHẠY THỬ
Dùng 1 phần mềm quản lý SMS (khác MMS.apk nguyên gốc) để test.
Nếu chạy ok à đóng gói thành bản patch cài qua CWM/TWRP hoặc chèn thẳng vào ROM.
Nếu bị lỗi FC, hoặc bootloop, thực hiện theo phương án ở phần DỰ PHÒNG.
X/ PHÁT TRIỂN
Đây là một số file khác liên quan đến SMS cần chỉnh sửa thêm để có bản fix hoàn thiện hơn.
\smali\com\android\internal\telephony\gsm\GsmSMSDispatcher.smali
\smali\com\android\internal\telephony\RIL.smali
\smali\android\telephony\SmsManager.smali
\smali\android\telephony\SmsMessage.smali
Không có nhận xét nào:
Đăng nhận xét