4

スタック オーバーフローに関するこのエラーに関する投稿が既にあることは知っていますが、ここ SO と Google で見つけたものは、私の問題とは一致しません。

アプリケーションを実行しようとしていますが、ネイティブ関数が呼び出されるたびにプログラムがクラッシュし、次のようになりますLogCat...

08-01 09:15:57.448: E/AndroidRuntime(16966): FATAL EXCEPTION: main
08-01 09:15:57.448: E/AndroidRuntime(16966): java.lang.ExceptionInInitializerError
08-01 09:15:57.448: E/AndroidRuntime(16966):    at my.eti.commander.MainMenu.initMain(MainMenu.java:241)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at my.eti.commander.MainMenu.onCreate(MainMenu.java:81)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.os.Looper.loop(Looper.java:130)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at android.app.ActivityThread.main(ActivityThread.java:3683)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at java.lang.reflect.Method.invokeNative(Native Method)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at java.lang.reflect.Method.invoke(Method.java:507)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at dalvik.system.NativeStart.main(Native Method)
08-01 09:15:57.448: E/AndroidRuntime(16966): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load RelayAPI: findLibrary returned null
08-01 09:15:57.448: E/AndroidRuntime(16966):    at java.lang.Runtime.loadLibrary(Runtime.java:429)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at java.lang.System.loadLibrary(System.java:554)
08-01 09:15:57.448: E/AndroidRuntime(16966):    at my.eti.commander.RelayAPIModel$NativeCalls.<clinit>(RelayAPIModel.java:432)
08-01 09:15:57.448: E/AndroidRuntime(16966):    ... 15 more

これが私のAndroid.mkファイルです:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
EXTRA_CFLAGS := -DANDROID
LOCAL_MODULE := RelayAPI
LOCAL_SRC_FILES := RelayAPI.c
include $(BUILD_EXECUTABLE)

これは私の jni フォルダーの写真です... RelayAPI のみが使用され、stringstuff は使用されない追加のファイルです。

ここに画像の説明を入力

すべてのネイティブ関数を別のクラスに保存して、静的に呼び出すことができるようにします。しかし、これは問題ではありません。なぜなら、私はそれらをかなり移動させてきたからですが、これが私にとって最善の方法であると判断したからです。

public static class NativeCalls {

    static {
        System.loadLibrary( "RelayAPI");
    }

    public native static byte InitRelayJava();

    public native static void FreeRelayJava();
}
4

5 に答える 5

1

さて、私はエラーに合格しました。私は先月別の質問をしました、そしてそれを解決しようとしている間、このエラーは消えました。これは、myenvironment PATH variableをNDKフォルダーの場所に設定することと関係がありました。これは、より詳細な回答へのリンクです。

于 2012-08-01T15:06:58.707 に答える
1

$(BUILD_EXECUTABLE) を含める代わりに $(BUILD_SHARED_LIBRARY) を使用してはいけませんか?

于 2012-08-01T13:36:32.300 に答える
0

私もこの問題を抱えていますが、私の状況では、プロセッサ ベースのライブラリをプロジェクトの libs フォルダーに追加する必要があります。日食を使用している場合。

ここに画像の説明を入力

于 2017-04-07T06:40:28.850 に答える
0

BUILD_EXECUTABLEこれは、共有ライブラリの代わりに実行可能ファイル (ヒント、ヒント..) をビルドします。使用するときはSystem.loadLibrary(..)、使用する必要がありますBUILD_SHARED_LIBRARY。それでも機能しない場合は、別の間違いがある可能性がありますが、BUILD_EXECUTABLE状況によっては機能する可能性がありますが、共有ライブラリとして使用することを意図したものを使用することは間違っています。

于 2012-08-02T14:27:58.573 に答える