안드로이드 앱을 만들기 위해 Qt (qml)를 사용하고 있지만 java에서 호출 할 원시 메소드를 등록하려고 할 때 오류가 발생합니다.qt android ClassNotFoundException
void NotificationClient::powerOff() {
QAndroidJniObject::callStaticMethod<void>("com/my_app/Utils",
"powerOff",
"()V"
);
}
가 지금은 자바에서 다시 (this example 기준) 내 네이티브 코드에 어떤 통화를 추가하기 위해 노력하고있어하지만
실패 : 내 네이티브 코드의 한 부분에서 나는 아무런 문제없이 자바 정적 함수를 호출하고있어 에서QAndroidJniEnvironment env;
jclass objectClass = env->FindClass("com/my_app/Utils");
결과 :
Pending exception java.lang.ClassNotFoundException: Didn't find class "com.my_app.Utils" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib, /vendor/lib, /system/lib, /vendor/lib]]
나는 classes.dex와 클래스 문자열 경기에서 dexdump을 확인했습니다. 내 AndroidManifest.xml의 모든 경로는 절대 경로입니다. 나는 청소하고 재건했다. 그 문제를 해결하는 방법은 없으며 정적 메서드 호출이 작동하지만 객체 하나가 작동하지 않는 이유를 알 수 없습니다.
(예, 아직 다른 ClassNotFoundException 게시물이지만 실제로 이미 답변을 검색했습니다). 나는면 ClassNotFound 오류를
UPDATE OK를 제공에 FindClass를 사용하여 다시 전환 있도록 객체를 생성에 따라
편집 원래 실패 방법은 다른 오류가 발생했습니다, 그래서 내가 알아 낸 것 같아요 FindClass가 실패하는 이유 : this에 따라 FindClass는 호출 스택을 검색하여 사용할 ClassLoader를 찾습니다. 일반적으로 이것은 괜찮지 만 잘못된 클래스 로더가 호출되도록 다른 스레드에서 안드로이드로드에 대한 Qt를 믿습니다.
링크는 JNI_onLoad의 클래스를 캐싱 할 것을 권장하지만 배후에는 Qt가 있습니다. qt 스레드 대신 주 스레드에서 클래스 ID를 캐시 할 수있는 다른 곳이 있습니까?
문제를 해결 했습니까? – BaCaRoZzo
이 문제는 내 .cpp 파일 중 하나에 JNI_onLoad를 추가하고 거기에 클래스 ID를 찾는 것으로 끝났다 고 생각합니다. – ryan0270
그래, 대부분 그 길입니다. 답변을 추가하거나 질문을 삭제하십시오. 감사. – BaCaRoZzo