apk中jni 一些native方法找不到 ERROR: couldn't find native method
阿新 • • 發佈:2019-02-14
編譯apk時,出現一些native類找不到的情況,原因是被produard優化掉了。
1.proguard是做什麼的,ProGuard是一個免費的java類檔案壓縮,優化,混淆器.它探測並刪除沒有使用的類,欄位,方法和屬性.它刪除沒有用的說明並使用位元組碼得到最大優化.它使用無意義的名字來重新命名類,欄位和方法.
ProGuard的使用是為了:
(1).建立緊湊的程式碼文件是為了更快的網路傳輸,快速裝載和更小的記憶體佔用.
(2).建立的程式和程式庫很難使用反向工程.
(3).所以它能刪除來自原始檔中的沒有呼叫的程式碼
(4).充分利用java6的快速載入的優點來提前檢測和返回java6中存在的類檔案.
2.因為proguard是混淆工具,所以android的mk檔案也對其支援為兩種方式:
1.指定不需要混淆的native方法與變數的proguard.flags檔案
如:LOCAL_PROGUARD_FLAG_FILES := $(LOCAL_PATH)/proguard.flags
2.制定編譯的工程,不要使用程式碼混淆的工具進行程式碼混淆
如:LOCAL_PROGUARD_ENABLED := disabled
3.不設定,預設使用LOCAL_PROGUARD_ENABLED := full.即將該工程程式碼全部混淆
1.proguard是做什麼的,ProGuard是一個免費的java類檔案壓縮,優化,混淆器.它探測並刪除沒有使用的類,欄位,方法和屬性.它刪除沒有用的說明並使用位元組碼得到最大優化.它使用無意義的名字來重新命名類,欄位和方法.
ProGuard的使用是為了:
(1).建立緊湊的程式碼文件是為了更快的網路傳輸,快速裝載和更小的記憶體佔用.
(2).建立的程式和程式庫很難使用反向工程.
(3).所以它能刪除來自原始檔中的沒有呼叫的程式碼
(4).充分利用java6的快速載入的優點來提前檢測和返回java6中存在的類檔案.
2.因為proguard是混淆工具,所以android的mk檔案也對其支援為兩種方式:
1.指定不需要混淆的native方法與變數的proguard.flags檔案
如:LOCAL_PROGUARD_FLAG_FILES := $(LOCAL_PATH)/proguard.flags
2.制定編譯的工程,不要使用程式碼混淆的工具進行程式碼混淆
如:LOCAL_PROGUARD_ENABLED := disabled
3.不設定,預設使用LOCAL_PROGUARD_ENABLED := full.即將該工程程式碼全部混淆