移植appweb4.0到android 系統下的一點點經驗

appweb4.0的編譯系統採用的的是bit,對編譯關係的描述使用的是js代碼進行描述的,所以在編譯之前必須先編譯esp。

由於自信看得懂js代碼,所以我就沒有編譯esp,直接編寫Android.mk。

編寫完成後很順利的mm完成,雖然中途也出現了幾個文件包含問題,

我以爲成功了,於是放到板子上面運行,使用標準的配置文件。

結果五雷轟頂啊,段錯誤。仔細查看,是libc在做字符串比較的時候出錯了。

加打印信息查看,發現是在解析配置文件中的“<if”時候出錯。嘗試去掉所有"<if",

錯誤消失,但是,這個不對啊,appweb3.3.1都支持的,4.0也應該支持,而且文檔上面也有條件配置選項。


一路跟蹤往上查,終於發現是在獲取系統及cpu類別時候返回了一個空指針,空指針跟字符串比較,當然段錯誤了。

再查,發現根本原因是 缺少了一個define __linux__  和define __arm__  添加完成後,編譯運行OMG,tnnd還是段錯誤。問題一樣


重新一步步打印定位。發現原來是在bit.h中定義的BIT_BIN_PREFIX 值在我的板子上面根本不存在,代碼給了另外一個默認值,系統根目錄。

而這個路徑在maSetPlatform函數中作爲設置platform的一個必要條件,也就是說路徑必須存在,且指向可執行程序appweb的目錄。


appweb沒有檢查maSetPlatform函數返回值,所以出現返回空指針現象。修改BIT_BIN_PREFIX 值編譯,運行,ok問題解決。


總結:

現在不知道我移植的appweb代碼裏面還有多少類似的雷,以後移植還是先使用正確手段編譯成功後,再檢查代碼變化,並根據makefile的文件生成Android.mk。







發佈了126 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章