정말 자괴감에 빠집니다… 으으으으………….
JNI라는 걸 좀 해보려고 javah 라는 header 파일 생성기를 좀 써보려고 노력중이었습니다.
근데 아무리 쓰여진데로
javah -classpath ../../android.jar;../bin/classes; org.apache.NativeAdd
를 쳐도 안되는 겁니다.
1. 경로명이 잘못됐나?
2. 경로명을 따옴표로 묶어주어야 하나?
2. 클래스 파일을 잘못 만들었나?
3. android.jar하고 뭔가 관련이 있나?
4. access 할 수 없다니.. 권한 문제인가..
5. 파일을 왜 못찾는다지?
……
결국 원인은 무엇인고 하니..
javah의 -verbose 옵션을 켰더니 다음과 같이 나오는군요.
dasomoli@dasomoli-ubuntu804:~/CallNative/src$ javah -classpath “../../android.jar;../bin/classes;” -verbose org.apache.NativeAdd
error: cannot access org.apache.NativeAdd
class file for org.apache.NativeAdd not found
javadoc: error – Class org.apache.NativeAdd not found.
[
Search Path:
/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/resources.jar:/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/rt.jar:/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/jsse.jar:/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/jce.jar:/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/charsets.jar:/usr/lib/jvm/java-6-sun-1.6.0.06/jre/classes/../../android.jar;../bin/classes;
]
Error: No classes were specified on the command line. Try -help.
아시겠습니까?
네.. 그렇습니다. ‘;’ 대신 ‘:’를 써주어야 하는 겁니다.
이렇게 해주어야 되는 것이었습니다.
javah -classpath ../../android.jar:../bin/classes: org.apache.NativeAdd
그래서 결과는 다음과 같이 나옵니다.
dasomoli@dasomoli-ubuntu804:~/CallNative/src$ javah -classpath “../../android.jar:../bin/classes:” -verbose org.apache.NativeAdd
[ Search Path: /usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/resources.jar:/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/rt.jar:/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/jsse.jar:/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/jce.jar:/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/charsets.jar:/usr/lib/jvm/java-6-sun-1.6.0.06/jre/classes/../../android.jar:../bin/classes: ]
[Creating file org_apache_NativeAdd.h]
[search path for source files: ../../android.jar,../bin/classes,.]
[search path for class files: /usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/resources.jar,/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/rt.jar,/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/sunrsasign.jar,/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/jsse.jar,/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/jce.jar,/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/charsets.jar,/usr/lib/jvm/java-6-sun-1.6.0.06/jre/classes,/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/ext/dnsns.jar,/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/ext/sunpkcs11.jar,/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/ext/localedata.jar,/usr/lib/jvm/java-6-sun-1.6.0.06/jre/lib/ext/sunjce_provider.jar,../../android.jar,../bin/classes,.]
[loading ../bin/classes/org/apache/NativeAdd.class]
[loading java/lang/Object.class(java/lang:Object.class)]
[loading java/lang/Throwable.class(java/lang:Throwable.class)]
[loading java/lang/Class.class(java/lang:Class.class)]
[done in 717 ms]
이럴 때… 정말 자괴감에 빠집니다..ㅠㅠ
골라서 쓰게하는 입장이 되버리면… =.= 편함!
좋군요~ ㅋㅋ
감사합니다. 다솜돌이님때문에 문제 해결하고 갑니다.
네, 다행이네요~
저두 이 에러때문에 ㅠㅠ
근데 왜저는 잘모르겠죠ㅠㅠ
프로젝트가 컴파일된 bin 경로가 C:\android\workbench\Hellojni\bin이고
페키지 이름이 hufs.dislab.hellojni 이고 class이름이 HelloJni일때
javah -classpath/C:/android/workbench/Hellojni/bin/classes:hufs.dislab.hellojniclass. HelloJni
이렇게 써줘야하나요?이러면 또에러가나던데ㅠㅠ
일단 hellojniclass. HelloJni 사이에 스페이스 하나가 눈에 띄네요~ 그 앞에 띄워줘야 할 곳은 붙어 있고요~