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 的目錄。build.gradle 配置 externalNativeBuild,完全避免手動 javah,由 Gradle 自動生成 JNI 標頭。javah -d jni -classpath ... 將 .h 直接輸出至 jni/ 目錄,便於 CMake/LLDB 管理。android {
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
}
}
// 無需手動 javah,Gradle 會自動處理 JNI 標頭生成
}
若維護舊專案必須用 javah,請記住「classpath = android.jar + 類別檔目錄」這一核心原則。