2011-10-03 55 views
12

Tôi gặp sự cố khi tạo tệp tiêu đề C cho JNI bằng cách sử dụng javah.android - javah không tìm thấy lớp học của tôi

Dưới đây là kịch bản tôi sử dụng trong khi đứng trong thư mục <project-dir>\bin:

javah -classpath C:\PROGRA~2\Android\android-sdk\platforms\android-8\android.jar com.test.JniTest 

Như trở lại tôi nhận được:

ERROR: Could not find class file for 'com.test.JniTest'. 

Mặc dù lớp JniTest chắc chắn là trong \com\test.

Tôi đang làm gì sai?

Trả lời

18

Bạn chỉ định đường dẫn lớp chứa chỉandroid.jar.

Bạn cũng cần bao gồm vị trí nơi các lớp học của bạn được lưu trữ. Trong trường hợp của bạn, đó là thư mục hiện tại, vì vậy bạn cần sử dụng . (cách nhau bởi ; trên Windows). Lệnh gọi phải giống như sau:

javah -classpath C:\PROGRA~2\Android\android-sdk\platforms\android-8\android.jar;. com.test.JniTest 
+1

chỉ thêm, rõ ràng bạn phải bên ngoài thư mục của tập tin thực tế. Bạn không thể chỉ định tên của tệp. – L7ColWinters

+0

Lỗi: không có lớp nào được chỉ định errror không thể vào bên trong android.jar –

10

Bạn nên đổi thư mục thành <project-dir>\bin\classes; Sau đó, chạy lệnh sau:

javah -classpath C:\PROGRA~2\Android\android-sdk\platforms\android-8\android.jar;. com.test.JniTest 


Tôi đang sử dụng tập lệnh sau đây để tạo ra tiêu đề: jHdr.cmd trên máy tính để bàn của tôi:

@echo on 
SET PLATFORM=android-8 
SET ANDROID_SDK_ROOT=C:\Android\android-sdk 
SET PRJ_DIR=D:\Workspaces\sqLite\raSQLite 
SET CLASS_PKG_PREFIX=ra.sqlite 
cd %PRJ_DIR%\bin\classes 
javah -classpath %ANDROID_SDK_ROOT%\platforms\%PLATFORM%\android.jar;. %CLASS_PKG_PREFIX%.%~n1 
pause 


điều chỉnh biến yêu cầu của bạn ...
đặt tệp này trên máy tính để bàn của bạn, sau đó kéo tệp .java của bạn từ eclise đến jHdr.cmd, kết quả nằm trong thư mục% PRJ_DIR% \ bin \ classes

16

Nếu bạn đang trên Linux hoặc MAC-OS, sử dụng ":" để tách các thư mục cho classpath hơn ";" nhân vật: Ví dụ:

javah -cp /Users/Android/android-sdk/platforms/android-xy/android.jar:. com.test.JniTest 
+0

rằng: trong linux đã lưu tôi: P – Sundeep1501

Các vấn đề liên quan