最近從4.2移植一段代碼到4.4的時候有涉及到JNI相關的代碼,結果發現4.2上運作的好好的代碼居然在4.4上就crash了,
報出的錯誤就是 can not find native method.
反複核對來jni的函數命名,簽名,一直沒發現問題,後來又懷疑proguard搗的蛋,加來keep 還是不行,無奈之下嘗試了
把編譯出來的apk又反編譯出來,結果讓我大吃一驚,java代碼上JNI中的一些函數居然被優化掉了,這些函數是沒有被實際
用到的,隻是預留出來将來或許有用的,結果正是這些被優化掉的函數導緻了注冊native函數的時候crash了。
想到的解決方法自然是注釋掉這些函數,結果果然ok了。
十分讓我費解! 看來有時間要看看編譯系統的變化才能徹底搞明白。