2

現在構築中のカスタム ROM のシステム アプリ レベルでサービスを開発しています。サービスはいくつかの JNI 呼び出しを行い、私の C++ コードはカスタム結果クラスのオブジェクトを返す必要があります。nexus 7などの通常のデバイスで通常のアプリとして実行すると、すべて問題なく、まったく問題ありません。

しかし、奇妙な部分があります。サービスを rom ディレクトリに配置し、すべてをコンパイルすると、結果オブジェクトのクラスが見つかりますが、GetMethodID またはそのクラスの他のメソッドを介してコンストラクターが見つかりません。

ここに私のコードのいくつかのスニペットがあります:

  1. 結果オブジェクトを Java コードに返すために呼び出されるメソッド。

    
    
    
    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;
    
    } JNIEnv* GetJniEnv() { JNIEnv* pEnv = NULL; pJVM->GetEnv((void**) &pEnv, JNI_VERSION_1_4); pJVM->AttachCurrentThread(&pEnv, NULL); return pEnv; }

そして、私のJava結果クラスのコンストラクター:

public Result(int result, int errType, String errMsg) {
    this.result = result;
    this.errType = errType;
    this.errMsg = errMsg;
}

Galaxy nexus maguro 用にビルドしていますが、コンストラクターの methodID を取得しようとするとコードが失敗します。なぜクラスが見つかるのにメソッドがないのかわかりません。

4

0 に答える 0