8

このメッセージはここ 1 日ほど表示されていますが、今のところ問題は発生していません。以前にネイティブ ライブラリでコードを実行するようにしましたが、今日いくつかの新しい関数を追加しましたが、やはり動作しません。

LogCat にエラーは表示されませんが、私のプログラムはデバイス上で即座に開いたり閉じたりします。アプリケーションが予期せず停止したというメッセージは表示されず、画面全体に黒いフラッシュが表示されるだけです。

私はグーグルとSOを見回しましたが、このメッセージが表示されるにはさまざまな理由があります. これが私のLogCatです:

08-03 10:44:50.186: D/dalvikvm(2143): Trying to load lib /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58
08-03 10:44:50.186: D/dalvikvm(2143): Added shared lib /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58
08-03 10:44:50.186: D/dalvikvm(2143): No JNI_OnLoad found in /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58, skipping init
08-03 10:44:50.288: I/DEBUG(1058): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-03 10:44:50.288: I/DEBUG(1058): Build fingerprint: 'LENOVO/IdeaPad_Tablet_A1_07/A1_07:2.3.4/GRJ22/eng.user.20120209.100319:user/release-keys'

私が知りたいのは:

1) このNo JNI_OnLoadメッセージが原因でプログラムが開かないのですか?

2) もしそうなら、私は自分のコードを投稿していないことを知っていますが、誰かがこのメッセージの一般的な考え方を説明できます. initスキップしているものも含めて。

編集 :

今日追加した新しい関数は、これが発生したときにコメントアウトされました。もともと別のエラーが発生していたので、古いコードがまだ機能していることを確認したかったのです。

4

2 に答える 2

13

機能JNI_OnLoadは必須ではありません。したがって、この関数を提供していない場合、プログラムは正常に実行されます。

あなたの問題はあなたのコードの別の部分から来ています。ndk-gdbそれを修正するために使用してみてください。

于 2012-08-03T14:55:13.180 に答える
0

ここで@djedgeが言及JNI_OnLoadしたのは単なる警告です。これには主に 2 つの理由があると考えられます。1 つ目は、Android.mk ファイルに問題があります。通常は次のようになります

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    OPENCV_CAMERA_MODULES:=on
    OPENCV_INSTALL_MODULES:=on
    #OPENCV_LIB_TYPE:=SHARED
    include D:\NDK\MyApplication3\libraries\native\jni\OpenCV.mk
    LOCAL_SRC_FILES  := DetectionBasedTracker_jni.cpp
    LOCAL_C_INCLUDES += $(LOCAL_PATH)
    LOCAL_LDLIBS     += -llog -ldl
    LOCAL_MODULE     := detection_based_tracker
    include $(BUILD_SHARED_LIBRARY) 

LOCAL_SRC_FILESここで、正しい c/c++ ソース ファイルが提供されているかどうかに注意してください。

ネストの問題は、関数のシグネチャにあります。ヘッダー ファイルを生成した場合、それらの関数シグネチャは、c/c++ ファイルの関数/メソッド定義と一致する必要があります。

ここに例があります。ヘッダーファイル

  JNIEXPORT jlong JNICALL Java_com_example_jobs_myapplication_DetectionBasedTracker_nativeCreateObject

(JNIEnv *、jclass、jstring、jint);

C++ ファイル

 JNIEXPORT jlong JNICALL  Java_com_example_jobs_myapplication_DetectionBasedTracker_nativeCreateObject
 (JNIEnv * jenv, jclass, jstring jFileName, jint faceSize)
  {

   //code goes here...
  }

ここcom_example_jobs_myapplicationが間違っているかもしれません。

于 2015-06-27T13:54:24.680 に答える