程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> NDK原生測試過程

NDK原生測試過程

編輯:關於C語言
 

我們在做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到如下路徑,系統會在軟件運行時自動加載。

  • /data下軟件的共享庫,一般在/data/data/pkg_name/lib/
  • /system/app下軟件的共享庫,一般在/system/lib/plugins/pkg_name/

2、打開終端,查看當前ANDROID設備

  • ./adb devices

3、拷貝helloworld到Android設備SD卡下

  • ./adb shell mkdir /data/helloworld
  • ./adb push helloworld /data/helloworld/

4、進入模擬器SHELL狀態:

  • ./adb shell
  • root@android:/ #

5、修改執行權限

  • chmod -R 777 /data/helloworld/

6、運行測試:

  • /data/helloworld/helloworld

7、退出模擬器SHELL狀態

  • exit;

三、常見錯誤

push文件到/system/lib下時可能遇到兩個錯誤。

錯誤1:報告Read-only file system

解決辦法,依次執行:

  • adb remount
  • adb shell
  • chmod 777 system
  • chmod 777 system/lib

四條命令提權即可。當然這四條命令也不是對所有設備都有效,發現無效再想別的辦法:)。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved