首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android NDK javah 找不到類?classpath 必須包含當前目錄

     編輯:程式設計綜合問答

錯誤重現

javah -classpath C:\PROGRA~2\Android\android-sdk\platforms\android-8\android.jar com.test.JniTest
ERROR: Could not find class file for 'com.test.JniTest'

根本原因

-classpath 僅指定了 android.jar,缺少編譯產出的 .class 檔案所在目錄(通常是專案 bin/classes 或當前工作目錄)。

修正指令

# Windows (分號分隔)
javah -classpath "C:\PROGRA~2\Android\android-sdk\platforms\android-8\android.jar;." com.test.JniTest

# Linux/macOS (冒號分隔)
javah -classpath "/path/to/android.jar:." com.test.JniTest

關鍵在於 ;.(或 :.)將當前目錄加入類別搜尋路徑,使 javah 能找到 com/test/JniTest.class。

最佳實踐建議

  • 在專案根目錄執行:確保 . 指向包含 com/test/JniTest.class 的目錄。
  • 使用 Gradle 整合 NDK:現代 Android 專案建議在 build.gradle 配置 externalNativeBuild,完全避免手動 javah,由 Gradle 自動生成 JNI 標頭。
  • 指定完整輸出目錄:javah -d jni -classpath ... 將 .h 直接輸出至 jni/ 目錄,便於 CMake/LLDB 管理。

Gradle 配置範例(現代做法)

android {
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
        }
    }
    // 無需手動 javah,Gradle 會自動處理 JNI 標頭生成
}

若維護舊專案必須用 javah,請記住「classpath = android.jar + 類別檔目錄」這一核心原則。

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