<B:LOOP VALUES='DATA:POSTS' VAR='POST'><B:INCLUDE DATA='POST' NAME='POST'></B:INCLUDE></B:LOOP> ~ <DATA:BLOG.TITLE></DATA:BLOG.TITLE> <DATA:BLOG.PAGETITLE></DATA:BLOG.PAGETITLE>

Thứ Hai, 3 tháng 6, 2013

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:

Biểu mẫu liên hệ

Tên

Email *

Thông báo *