Gecko JavaScript 之 “改 code 卻不 build code" 小徑。
問:
常常我們會收到某些 Gecko 的問題,但卻是 log 不足或是可能需要在手機上摹擬某些特殊/額外的資訊才有可能重現問題。而我們又確定這個問題,大概會從 Gecko 的 JavaScript 檔案下手。但是,我又不想抓/編譯程式碼,這個症狀可有解?
答:
有的!!的確是有方法可以透過不抓/編譯程式碼的手續就可以把想做的事情達成的。
(記得拿出一台 firefox OS 的機器邊看邊操作嘿,(啥,沒機器?? 那就去"買"一台啊!!!!))
首先,我們先確認一下,你所想看的部份的 log 有沒有打開 [2]。
舉個 RIL (Radio Interface Layer) [3] 的例子來說,
1. ril_consts.js
// Set to true to debug all RIL layers this.DEBUG_ALL = false;
2. RadioInterfaceLayer.js
// Read debug setting from pref let debugPref = false; try { debugPref = Services.prefs.getBoolPref("ril.debugging.enabled"); } catch(e) { debugPref = false; } DEBUG = RIL.DEBUG_RIL || debugPref;
喔喔! ril 相關的 log 沒開!!!!
可是,還好有 preference 可以手動的去打開它。
來吧~我們就來動手把它給打開吧。
1.1 adb pull /system/b2g/defaults/pref/user.js /tmp 1.2 把 ril.debugging.enabled 這個值修改成 true. pref("ril.debugging.enabled", true); 1.3 adb remount 1.3 adb push /tmp/user.js /system/b2g/defaults/pref/ 1.4 adb reboot
adb logcat 來看一下,是不是可以看到 “RadioInterfaceLayer" 這個關鍵字出現在 log 裏面了呢(如下面的範例)?
I/Gecko ( 107): -*- RadioInterfaceLayer: Registered mobileconnection target: [object ChromeMessageSender] I/Gecko ( 107): -*- RadioInterfaceLayer: Received 'RIL:RegisterIccMsg' message from content process I/Gecko ( 107): -*- RadioInterfaceLayer: Registered icc target: [object ChromeMessageSender] I/Gecko ( 107): -*- RadioInterfaceLayer: Received 'RIL:GetRilContext' message from content process I/Gecko ( 107): -*- RadioInterface[0]: Received message from worker: {"voice":{"signalStrength":-53,"relSignalStrength":100},"data":{"signalStrength":-53,"relSignalStrength":100},"rilMessageType":"signalstrengthchange"}
這時候,你會問說,可是 我需要的資訊不是現有的 log 裏面就包含的。 那我該怎麼辦???
我有沒有辦法不去編譯程式碼,同時變造一些資料好讓我可以做一些測試?
那我們就來看下一個例子囉!!
舉個偽IMEI來當作範例。
1. 確認當前 IMEI 為何。
進撥號畫面,輸入*#06# [4],查看一下當下手機告訴你這台機器的 IMEI 是什麼!
2. 從手機中把需要的檔案拉出來:
2.1 adb pull /system/b2g/omni.ja /tmp 2.2 cd tmp 2.3 unzip omni.ja 2.4 cd omni 2.5 find -name ril_worker.js
3. 修改步驟2.5中所找到的檔案,將 IMEI 偽造成我們想要的資料:
在此,我們將 IMEI 假造成為"123456789012345″。
4. 打包/跟新檔案:
4.1 zip -r omni.ja * 4.2 adb remount 4.3 adb push omni.ja /system/b2g 4.3 adb reboot
完成了。。。 IMEI 被我們偽造成123456789012345了。
修改 Gecko 裏面的 JavaScript 檔案,卻不重新 build code ,是不是相當的簡單呢?
有沒有想試試看的東西了?
還等什麼?快點去試一把吧!!
註:
請確定你所使用的機器是開發者的版本,並且取得 root 的權限,上面的步驟才玩的下去喔。
參考資料:
[1] 圖片來源 – http://www.123rf.com/photo_8515474_3d-abstract-digital-code-connection.html
[2] https://wiki.mozilla.org/B2G/QA/Tips_And_Tricks#Changing_preferences
[3] https://wiki.mozilla.org/B2G/RIL
[4] 3GPP TS 22.030 version 11.0.0 Release 11, 6.7 Presentation of IMEI