首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Android NDK 原生可執行檔編譯與真機測試完整流程

     編輯:關於C語言

NDK 開發中,核心邏輯常打包為 .so 供 Java 層呼叫;但當共享庫依賴複雜、需獨立除錯時,編譯為可執行檔在真機/模擬器跑測試更直觀。本文記錄 Ubuntu 12.04 + NDK r8c 環境下的完整流程與常見坑。

一、編譯原生可執行檔

  1. 以 NDK samples/hello-jni 為基礎,刪除 AndroidManifest.xml(純 C 程式不需)。
  2. 修改 jni/Android.mk:
    include $(BUILD_SHARED_LIBRARY) → include $(BUILD_EXECUTABLE)
  3. 確認 LOCAL_MODULE 與 LOCAL_SRC_FILES 對應源檔名(如 helloworld.c)。
  4. 源檔加入 main():
#include <stdio.h>
int main(int argc, char *argv[]) {
    printf("Hello World\n");
    return 0;
}

執行 ndk-build,產出 obj/local/armeabi/helloworld(或對應 ABI 目錄)。

二、真機/模擬器測試步驟

# 1. 確認設備連線
adb devices

# 2. 建立目錄並推送
adb shell mkdir /data/helloworld
adb push obj/local/armeabi/helloworld /data/helloworld/

# 3. 進入 shell 賦予執行權限並執行
adb shell
chmod 777 /data/helloworld/helloworld
/data/helloworld/helloworld
# 輸出: Hello World
exit

若有相依 .so,同步推送至:

  • /data/data/<pkg>/lib/(一般 App)
  • /system/lib/plugins/<pkg>/(系統 App)

三、常見錯誤與解決

錯誤 1:Read-only file system 推送 /system/lib 失敗

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

部分設備需解鎖 bootloader 或使用 magisk 獲得寫入權限。

錯誤 2:error: only position independent executables (PIE) are supported(Android 5.0+)

在 Android.mk 加入:

LOCAL_CFLAGS += -fPIE
LOCAL_LDFLAGS += -fPIE -pie

錯誤 3:動態連結器找不到庫

設定 LD_LIBRARY_PATH 或用 patchelf --set-rpath 指定 .so 搜尋路徑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved