TUT Hướng dẫn fix USSD time out (tự mất mất sau 2 giây)

Thảo luận trong 'Dev Android' bắt đầu bởi hoangnova, 8 Tháng mười một 2013.

  1. hoangnova

    hoangnova Captain Staff Member

    Tham gia ngày:
    20 Tháng năm 2013
    Bài viết:
    6,738
    Đã được thích:
    15,888
    Hướng dẫn fix USSD time out (tự mất mất sau 2 giây)

    Ở các máy hàn quốc bản K thường có 1 tình trạng làm ta hết sức bực bội là, #101# nó cứ tự mất đi sau 2s.
    Vậy làm thế nào để fix, có nhiều bạn hỏi mình (hình như gần đây nhất là box VU2 có hỏi) nên lần này mình tranh thủ hướng dẫn các bạn sửa/ Vẫn theo cách sửa tường tận, ngọn ngành để các bạn nắm được nguyên do nhé.

    Công cụ:
    dex2jar
    notepad ++ và plugin smali cho notepad++
    java decompiler
    apk tool

    Tự search các công cụ trên hoặc tìm các tút cũ của mình nhé
    Hướng dẫn fix USSD time out (tự mất mất sau 2 giây) viết bởi hoangnova từ LGViet.com

    Đầu tiên decompile thằng LGPhone.apk ra đã, nói chung mọi tính năng liên quan đến gọi điện, ussd đều nằm trên này nên ta cần sửa ở đó.
    Trước khi viết tút này mình cũng chả biết cái phần đó nằm ở đâu trong mớ hổ lốn kia. Tuy nhiên theo kinh nghiệm nên mình cứ search toàn bộ đám smali với từ khóa ussd xem thế nào đã.

    Đây rồi, thấy mấy cái liên quan đến ussd, mở lên xem thế nào
    1.jpg

    Bây giờ code smali thế này thì nhìn khó hiểu lắm, nên cần dex2jar để xem các class có mấy từ khóa mà ta vừa tìm xem thế nào đã.

    Trong method displayMMIComplete thuộc class PhoneUtils nên đọc method đó xem thế nào. Nói lại, mấu chốt vẫn là cần có kinh nghiệm 1 chút về đọc code java và smali

    Kinh nghiệm cho thấy, các biến hoặc method trong code android thường đặt tên khá rõ ràng, trong method đó mình thấy cái khả nghi là mMmiCompleteTimeoutCbMsg, nghe có vẻ giống giống cái ta tìm.
    Vậy lần theo nó xem sao, trò này hơi hơi giống thám tử Conan, lần theo các manh mối ta có.
    USSD time out, fix #101# tự mất, fix ussd, LGVIet.com, hoangnova

    Search trong file đó khi đọc bằng java decompiler bằng ta thấy có 1 đoạn vô cùng khả nghi nằm trong displayMMIComplete nó đây:

    2.jpg


    Khi thực USSD hiện lên, nó gửi đi 1 msg gì đó có giá trị 2000L = với khoảng thời gian mà cái ussd bị mất, lại có liên quan tới mMmiCompleteTimeoutCbMsg.
    Sau đó ta lại thấy nó check với if (ConfigUtils.isTargetOperator(2)) thì mới thực hiện việc đó, vậy check tiếp xem isTargetOperator(2)

    Lần theo manh mối này vào ConfigUtils ta tìm đc

    Mã:
      public static boolean isTargetOperator(int paramInt)
      {
        return MTARGETOPERATOR == paramInt;
      }
    Tìm tiếp MTARGETOPERATOR
    Mã:
     MTARGETOPERATOR = setTargetOperator();
    Tìm tiếp setTargetOperator(); xem cuối cùng nó check với isTargetOperator(2) là cái gì.

    3.jpg




    Đây rồi vậy ta hiểu rằng nó chẹck với nhà mạng KT trong build.prop thì nó gửi cái msg đó đi. tạm vậy đã, tuy nhiên ko chắc lắm, phải sửa thử xem sao.

    Lưu ý, bài viết này mình viết theo hướng bình dân hóa, ko nặng về kỹ thuật lập trình, vì vậy đừng vặn vẹo nhiều.

    Quay trở lại với thằng PhoneUtils giờ ta làm gì, có 2 hướng 1 là thử tăng cái thời gian 2000L kia lên, 2 là thay đổi giá trị isTargetOperator(2) thành số khác, ví dụ số 5 chẳng hạn.

    Ở đây mình sửa thời gian timeout cho nó nhiều nhiều chút thành 2 phút chẳng hạn (thế là thoải mái rồi) (khoảng 120 giây, tương đương với 120000L. 2000L = 2 giây)

    Dùng calculator để đổi giữa Dec và Hex như tút trước hướng dẫn nhé.

    Mã:
        .line 1760
        sput-object p3, Lcom/android/phone/PhoneUtils;->mMmiCompleteTimeoutCbMsg:Landroid/os/Message;
     
        .line 1763
        const/16 v17, 0x2
     
        :try_start_2
        invoke-static/range {v17 .. v17}, Lcom/android/phone/ConfigUtils;->isTargetOperator(I)Z
     
        move-result v17
     
        if-eqz v17, :cond_12
     
        .line 1764
        sget-object v17, Lcom/android/phone/PhoneUtils;->mMmiCompleteTimeoutCbMsg:Landroid/os/Message;
     
        invoke-virtual/range {v17 .. v17}, Landroid/os/Message;->getTarget()Landroid/os/Handler;
     
        move-result-object v17
     
        const-wide/16 v18, 0x7d0
     
        move-object/from16 v0, v17
     
        move-object/from16 v1, p3
     
        move-wide/from16 v2, v18
     
        invoke-virtual {v0, v1, v2, v3}, Landroid/os/Handler;->sendMessageDelayed(Landroid/os/Message;J)Z
    Thấy cái 0x7d0 ko ? Nó chính là giá trị 2000L đấy, giờ mình sửa thành thế này

    Mã:
        const-wide/32 v18, 0x1d4c0


    Như thế là thành 2 phút cho thoải mái.

    Save lại và Compile file LGPHone.apk.

    Test thử xem sao. Chắc chắn là ngon lành ko bị time out sau 2 giây nữa.

    Chúc may mắn nhé.

    Bài viết được thực hiện trên ROM Stock LTE2 F160K.
    dokyson
     
  2. Văn Chức

    Văn Chức Life Good

    Tham gia ngày:
    8 Tháng sáu 2013
    Bài viết:
    7,613
    Đã được thích:
    4,920
    Hay quá. Toàn cái em cần a ợ . Hnay a rảnh :D
     
  3. gts8003

    gts8003 Quản lý là phụ - chém gió là chính Staff Member

    Tham gia ngày:
    10 Tháng sáu 2013
    Bài viết:
    8,057
    Đã được thích:
    3,851
    Kinh nguy.....ý lộn kinh nghiệm đầy mình :D:D
     
  4. hoangnova

    hoangnova Captain Staff Member

    Tham gia ngày:
    20 Tháng năm 2013
    Bài viết:
    6,738
    Đã được thích:
    15,888
    xuanduc89 Xuân Đực 69 xem đây có phải cái em cần cho VU2 ko ?!
     
    xuanduc89 thích bài này.
  5. Văn Chức

    Văn Chức Life Good

    Tham gia ngày:
    8 Tháng sáu 2013
    Bài viết:
    7,613
    Đã được thích:
    4,920
    Học đê
     
  6. xuanduc89

    xuanduc89 Member Staff Member

    Tham gia ngày:
    10 Tháng sáu 2013
    Bài viết:
    4,380
    Đã được thích:
    1,656
    mất máy rồi còn đâu nữa anh
    nhưng phải thank anh làm bài viét giúp anh em
    em sẽ nghiên cứu anh :D
     
  7. ProReturn

    ProReturn Active Member

    Tham gia ngày:
    8 Tháng sáu 2013
    Bài viết:
    740
    Đã được thích:
    303
    Quá dễ sợ....:giggle:
     
  8. hoangnova

    hoangnova Captain Staff Member

    Tham gia ngày:
    20 Tháng năm 2013
    Bài viết:
    6,738
    Đã được thích:
    15,888
  9. Văn Chức

    Văn Chức Life Good

    Tham gia ngày:
    8 Tháng sáu 2013
    Bài viết:
    7,613
    Đã được thích:
    4,920
    Là em cần .:D
     
  10. like_android

    like_android LGVIET.com Staff Member

    Tham gia ngày:
    8 Tháng sáu 2013
    Bài viết:
    5,119
    Đã được thích:
    1,699
    Quá ngon như người mù thấy được tia sáng cuối đường hầm:D

    Gửi từ LG-F200 của tôi sử dụng Tapatalk 2
     
    nghiabradyle thích bài này.
  11. Văn Chức

    Văn Chức Life Good

    Tham gia ngày:
    8 Tháng sáu 2013
    Bài viết:
    7,613
    Đã được thích:
    4,920
    Ơ mà USSD của VU 2 rất lâu mà :)

    Sent from my LG-F200L using Tapatalk 2
     
  12. hoangnova

    hoangnova Captain Staff Member

    Tham gia ngày:
    20 Tháng năm 2013
    Bài viết:
    6,738
    Đã được thích:
    15,888
    Bản K máy nào cũng bik. Ko đọc a viết à
     
    like_android and Văn Chức like this.
  13. Văn Chức

    Văn Chức Life Good

    Tham gia ngày:
    8 Tháng sáu 2013
    Bài viết:
    7,613
    Đã được thích:
    4,920
    À. Em quên mất kô để ý :D Vậy like_android cố mà vận dụng nhé :D

    Sent from my LG-F200L using Tapatalk 2
     
  14. like_android

    like_android LGVIET.com Staff Member

    Tham gia ngày:
    8 Tháng sáu 2013
    Bài viết:
    5,119
    Đã được thích:
    1,699
    Đang tịnh tâm để tránh tẩu hỏa nhập ma đây:D

    Gửi từ LG-F200 của tôi sử dụng Tapatalk 2
     
  15. Văn Chức

    Văn Chức Life Good

    Tham gia ngày:
    8 Tháng sáu 2013
    Bài viết:
    7,613
    Đã được thích:
    4,920
    Hôm qua mò tới cái code đó rồi cơ mà nhà mạng nó sửa sẵn cho rùi.:D:D:D

    Sent from my LG-F200L using Tapatalk 2
     
  16. ducanhtian

    ducanhtian Active Member

    Tham gia ngày:
    11 Tháng sáu 2013
    Bài viết:
    482
    Đã được thích:
    193
    trên thực tế nhìn code có đoạn TargetOperator, nếu up global chắc chắn ko phải fix cái này, cái này chi fix cho ai bản KT thuần.
     
  17. hoangnova

    hoangnova Captain Staff Member

    Tham gia ngày:
    20 Tháng năm 2013
    Bài viết:
    6,738
    Đã được thích:
    15,888
    Có nhiều người ko hiểu rằng, các bài tút của mình ko phải hướng dẫn để các bạn fix, mà hướng dẫn cho các bạn hiểu ngọn ngành, đầu đuôi, các bước để phân tích nhằm giải quyết các vấn đề tương tự.
     
  18. dokyson

    dokyson Active Member

    Tham gia ngày:
    17 Tháng tám 2013
    Bài viết:
    201
    Đã được thích:
    146
    Tối nay em lại thức trọn đêm nay rồi kaka
     
    gts8003 and hoangnova like this.
  19. hoangnova

    hoangnova Captain Staff Member

    Tham gia ngày:
    20 Tháng năm 2013
    Bài viết:
    6,738
    Đã được thích:
    15,888
    Cái bàn phím a viết rồi đó
     
    dokyson thích bài này.
  20. dokyson

    dokyson Active Member

    Tham gia ngày:
    17 Tháng tám 2013
    Bài viết:
    201
    Đã được thích:
    146
    Vâng em đang đọc ạ. 3 tut này sẽ là bài học vỡ lòng cho anh em sau này muốn mod sâu vào code anh ạ. Sắp tới em sẽ áp dụng lên con LTE3 để ra ROM phong cách mới
     
    anhlongshop85 thích bài này.

Chia sẻ trang này