我們在做NDK開發時,其編譯結果要做作為個共享庫存在,要麼本身就是個可執行檔,共享庫既可以起到核心代碼安全保護作用,又可以提高核心代碼的執行效率,模塊分工只需提供給上層JAVA主程序控制接口即可。如果你的共享庫代碼較多,依賴關系較為復雜時,就不得不要先寫個main函數在Android系統下進行測試(真機環境)。本文就是介紹NDK可執行檔的測試過程,盡管NDK自帶的samples編譯測試都很簡單,但是涉及模擬器測試時常會遇到幾個問題,故流程和錯誤為本文重點。
Ubuntu下NDK環境搭建方法:Ubuntu下NDK環境搭建
Windows下NDK環境搭建方法:Windows環境下Android NDK環境搭建
本文測試環境:Ubuntu 12.04 i386 + android-ndk-r8c
該程序可以直接來源於NDK安裝包下的samples目錄下hello-jni和native-xxx。
1、刪除AndroidManifest.xml,本文僅測試標准的C/C++程序,不需這個。
2、修改jni/Android.mk中的include $(BUILD_SHARED_LIBRARY)為include $(BUILD_EXECUTABLE)
3、如果源文件名稱被修改為helloworld,請確認jni/Android.mk中的LOCAL_MODULE和LOCAL_SRC_FILES參數名對應修改。
3、jni/xxx.c文件增加
#include <stdio.h> int main(int argc, char *argv[]) { printf("Hello World\n"); return 0; }
修改完成保存,使用NDK編譯helloworld,最後得到/obj/helloworld可執行文件。
1、把helloworld編譯結果拷貝到sdk/platform-tools目錄,如果有原生共享庫.so可PUSH到如下路徑,系統會在軟件運行時自動加載。
2、打開終端,查看當前ANDROID設備
3、拷貝helloworld到Android設備SD卡下
4、進入模擬器SHELL狀態:
5、修改執行權限
6、運行測試:
7、退出模擬器SHELL狀態
push文件到/system/lib下時可能遇到兩個錯誤。
解決辦法,依次執行:
四條命令提權即可。當然這四條命令也不是對所有設備都有效,發現無效再想別的辦法:)。