Google輸入法呼叫丟擲JNI錯誤
阿新 • • 發佈:2018-11-07
昨天收到個Bug,是關於Google輸入法呼叫後報異常,Log資訊大概是說找不到JNI方法nativeImOpenDecoder(),
後發現在編譯此版本系統前的TARGET_BUILD_VARIANT選項是user,和平時用的eng有所不同,重新燒了eng和user版本驗證下確實有此問題,剛開始想都沒想直接就去看Make指令碼了,因為一定有所不同,看了半小時後頭昏眼花,最主要是沒看太明白,放棄。。。
後拿來user版和eng版的GooglePinyin.apk比較了下,發現user版的大小少了100多byte,原來缺少程式碼,網上一頓
蒐羅反編譯工具,最後確定在
LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags
又建立了proguard.flags檔案,內容如下:
-keepclass com.android.inputmethod.pinyin.PinyinDecoderService {
static *;
}
最後重新編譯並測試,可成功呼叫Google輸入法。
總結下,在編譯程式碼過程中ProGuard起了關鍵作用,所以瞭解還是非常必要的,特轉以下文章地址來學習下:
http://www.cnitblog.com/zouzheng/archive/2011/01/12/72639.html