現在構築中のカスタム ROM のシステム アプリ レベルでサービスを開発しています。サービスはいくつかの JNI 呼び出しを行い、私の C++ コードはカスタム結果クラスのオブジェクトを返す必要があります。nexus 7などの通常のデバイスで通常のアプリとして実行すると、すべて問題なく、まったく問題ありません。
しかし、奇妙な部分があります。サービスを rom ディレクトリに配置し、すべてをコンパイルすると、結果オブジェクトのクラスが見つかりますが、GetMethodID またはそのクラスの他のメソッドを介してコンストラクターが見つかりません。
ここに私のコードのいくつかのスニペットがあります:
結果オブジェクトを Java コードに返すために呼び出されるメソッド。
} JNIEnv* GetJniEnv() { JNIEnv* pEnv = NULL; pJVM->GetEnv((void**) &pEnv, JNI_VERSION_1_4); pJVM->AttachCurrentThread(&pEnv, NULL); return pEnv; }static jobject wrapResult(jint rc, jint errCode, jstring errString) { JNIEnv *env = GetJniEnv(); jclass lresultClass = env->FindClass( "pathtoclass/Result"); if (!lresultClass) LOGW(TAG, "!resultclass"); jmethodID constructor = GetJniEnv()->GetMethodID(lresultClass, "<init>", "(IILjava/lang/String;)V"); if (!constructor) LOGW(TAG, "!constructor"); jobject obj = env->NewObject(resultClass, constructor, rc, errCode, errString); return obj;
そして、私のJava結果クラスのコンストラクター:
public Result(int result, int errType, String errMsg) {
this.result = result;
this.errType = errType;
this.errMsg = errMsg;
}
Galaxy nexus maguro 用にビルドしていますが、コンストラクターの methodID を取得しようとするとコードが失敗します。なぜクラスが見つかるのにメソッドがないのかわかりません。