仔細回想最近的作的 stripping level,還是回頭來說說 import dll 這回事吧;因為從事遊戲改版所以很多事情是言不由衷的,某天發現 server 發送給 client 封包是 big5 encode,第一時間覺得為何不用 unicode 呢?但仔細想也許是遊戲剛規劃時 DB 都已經存了 big5 編碼字串可能已經改不動了,想想也是就算了,結果一包到 android 就發生了 GetEncoding error,因為 android 是採用 unicode 編碼的,在網路上找了找終於找到解法,可以參考底下網址的討論串,主要是下載 I18N.dll、I18N.CJK.dll、I18N.West.dll 並丟到 Assets 資料夾下就可以了,當時還不是很了解為什麼只知道把 dll 都丟進去在手機上就可以跑,直到使用 stripping level 後整個又掛了,才認真去 trace,問題在於勾選 strip asm 包檔後 I18N.CJK 就沒被包到 apk 裡面,而要解決 strip asm(~"~ 沒辦法 strip asm 很吸引我,一定要想辦法克服)採用了 link.xml 的方式,但這樣要怎麼知道弄進哪些 lib 呢?
首先,拿套軟體把 dll 給解析出來看吧!我抓了 .Net Reflaction,恩!因為 Visual Studio 雖然也可以做 dll 解析,但內容跟完整度不正確,我懷疑是因為使用 Visual C# express 的關係,有種被坑的感覺,總之在這階段先把要額外 import function/member 列出來。
接著在 link.xml 中新增如下,這樣就 OK 拉,如果不放心也是可以把 apk 給解析出來看看 I18K.CJK.DLL 是否真的有把 CP950 給包進去,如果沒看到 I18K.CJK.DLL 那就是流程有錯誤。


留言
張貼留言