3

Androidソースパス/packages/apps/にEclipseなしでAndroidプロジェクト(TestJni)を作成します。Androidのソースコードをコンパイルしました。

jniフォルダーを追加しました。jni フォルダーの下には、 Android.mk や basic.c などのファイルがいくつかあります。

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := basic.c
LOCAL_MODULE := testjni
include $(BUILD_SHARED_LIBRARY)

basic.c

#include<string.h>
#include<jni.h>
jstring Java_com_example_FristJniActivity_getStringFromJni(JNIEnv *env, jobject thiz) {
    return (*env)->NewStringUTF(env, "hello ndk and jni");
}

現在の android プロジェクトのルートには、Android.mk Android.mk があります。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := TestJni
LOCAL_JNI_SHARD_LIBRARIES := testjni
LOCAL_REQUIRED_MODULES := testjni
include $(BUILD_PACKAGE)

src フォルダーに、アクティビティ (FristJniActivity) FristJniActivity.java があります。

static {
    System.loadLirary("testjni");
}
public native String getStringFromJni();

public void onCreate(Bundle b) {
    super.onCreate(b);
    TextView tv = new TextView(this);
    tv.setText(getStringFromJNi());
    setContentView(tv);
}

次に、TestJni アプリをコンパイルすると、apk が見つかります。ただし、ハンドセットに押し込んだ後、強制的に閉じます。

エラーは次のとおりです:java.lang.unsatisfiedlinkerror:testjniをロードできませんでした:findLibraryがnullを返しました

私はググった。しかし、私は解決策を見つけることができません。

apk ファイルを確認したところ、testjni.so ファイルは /lib/armeabi-v7a/ ディレクトリに既に存在していました。

4

2 に答える 2

0

いくつかの値を変更します

jni/Android.mk

LOCAL_MODULE := libtestjni

Android.mk

LOCAL_JNI_SHARD_LIBRARIES := libtestjni
LOCAL_REQUIRED_MODULES := libtestjni

、コマンド「adb install * .apk 」を使用します。

それからそれはうまくいきます。

于 2012-12-20T07:45:32.040 に答える
0

UnsatisfiedLinkerror はこれで解決されます。.c ファイルを 変更するたびに .so ファイルをビルドする必要があるため、ndk_build.soファイルを再度ビルドします。

于 2015-05-22T10:47:58.240 に答える