0

Javaから通常どおり起動した後、ネイティブアクティビティを起動しようとしています(別のライブラリをロードする必要があるため、JavaからNativeActivityを起動しています)。

Android.mk を使用してサンプルをビルドするにはどうすればよいですか? 元のサンプルでは gradle を使用しています。ビルドしようとしましたが、起動時にライブラリのロードに失敗しました。

FATAL EXCEPTION: main Process: sample.simple.com.myapplication, PID: 14917
 java.lang.RuntimeException: Unable to start activity ComponentInfo{sample.simple.com.myapplication/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/app/sample.simple.com.myapplication/lib/arm64/libnActivity.so

コードのスニペットを次に示します。

Android.mk http://brian.io/android-ndk-r10c-docs/Programmers_Guide/html/md_2__samples_sample--nativeactivity.htmlに従ってこれを作成しました

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := nActivity
LOCAL_SRC_FILES := main.c
LOCAL_LDLIBS    := -llog -landroid -lEGL -lGLESv1_CM
LOCAL_STATIC_LIBRARIES := android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)

Java アクティビティ

public class DummyActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

    System.loadLibrary("nActivity");
   Intent intent = new Intent(DummyActivity.this, android.app.NativeActivity.class);
   DummyActivity.this.startActivity(intent);

  //  setContentView(R.layout.activity_dummy);
}
}

Android マニフェスト

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="display.rendering.simple.com.myapplication">

    <application android:label="@string/app_name" android:hasCode="true">
        <activity android:name="DummyActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="android.app.NativeActivity">
            <meta-data android:name="android.app.lib_name"
                android:value="nActivity" />
        </activity>
    </application>

</manifest>

build.gradle

ndk{
    moduleName ="nActivity"
}
sourceSets.main {
    jni.srcDirs = []
    jni.srcDir "src/main/libs"
}

ありがとう

4

1 に答える 1

0

build.gradle は、ここで ndk-build への組み込み呼び出しを無効にします。

jni.srcDirs = []

これは、ネイティブ ライブラリが実際に構築されていないことを意味します。ライブラリがありません -> デバイスに一致する名前のライブラリがありません -> loadLibrary エラー。

Java からネイティブ アクティビティを起動するために、必ずしも Android.mk ファイルを使用する必要はありません。他のNDK サンプルでは、​​build.gradle を使用してネイティブ コードをビルドおよび使用する方法について説明しています。hello-jniのbuild.gradle ファイルは、開始するのに最適な場所です。

必要がない限り Android.mk を使用しないことをお勧めしますが、必要に応じて Android.mk を使用したNDK サンプルがあります。

于 2016-04-22T13:16:25.917 に答える