quick-cocos2d-xでアプリをコーディングしました。 このアプリは過去18ヶ月でうまく機能します。 しかし、今日、未知のエラーが表示され、Googleで支払いを終了すると常に挫折します。クイックココスでJNIエラーが発生しました
クラッシュが発生する位置を特定しました。
xxx.java
myApp.this.runOnGLThread(new Runnable() {
@Override
public void run() {
Log.d(TAG, obj.toString());
C.androidPaymentFinished(obj.toString());
}
});
機能は、CPPの一部を呼び出すためのネイティブの静的関数です。 CPPの一部をリンクするためにJNIを使用中に
C.java
class C{
public static String void androidPaymentFinished(String data);
// other functions
}
main.cppに
void Java_com_company_util_C_androidPaymentFinished(JNIEnv* env, jobject thiz, jstring data) {
const char* str1 = jstringTostring2(data);
PlatformAPI::googlePayFinish(str1);
}
。
JNI DETECTED ERROR IN APPLICATION: use of invalid jobject 0x9bbbfe80
上記のエラーログが表示され、プログラムが破損しました。
しかし、アプリケーションが決して前に挫折してコードが変更されたことは決してありません。そしてクラッシュが起こったとき、同じコードを持つ他のAPPは一度でも潰れませんでした。
誰もこの前にこの状況に遭遇しましたか?
追加私は、Javaコードがネイティブ関数を呼び出そうとするとエラーが一度に発生すると思います。そしてCPPの部品が何であっても、プログラムは数秒後にはいつも挫折します。私はcppコードに注釈を付けてそれを空の関数にしましたが、プログラムはまだ粉砕されました。
入力が有効であると確信しています。私はC.androidPaymentFinished(data)が呼び出される前にログを出力し、データは有効なJSONスタイルの文字列です。
{"status":"ok","newCredits":222839450,"newGems":10,"newTickets":600,"stopIndex":5,"reward":100000,"sku":"com.company.app.item.000001"}
JNIエラーが発生する場所をより正確に知る必要があります。また、 'jstringToString'と' googlePayFinish'の実装はどうなりますか?今まで私たちに示してきたことから、すべての入力パラメータが常に有効であると仮定しているようですが、それは悪い考えです。 – Michael