android ndkが組み込まれたLibraryのデモアプリケーションを実行しようとしています。私はAndroidスタジオにthisコードをインポートし、またndkをダウンロードしてプロジェクトにリンクしました。コードがコンパイルされ、正常にビルドされます。失敗しました " "初期化中に投げられないUnsatisfiedLinkError LANG ljava例外" それは例外でクラッシュを与える:dlopenのに失敗しました:" ...Android NDK例外が失敗しました:dlopen failed: "libtangram.so"によって参照されるシンボル "_ZN7Tangram11setPositionEdd"を見つけることができません
Application.mkを "libtangram.so" によって参照されるシンボル "_ZN7Tangram11setPositionEdd" を見つけることができません。
APP_STL := c++_shared
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi armeabi-v7a x86 mips
APP_PLATFORM := android-19
Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := tangram
LOCAL_SRC_FILES := jniExports.cpp jniGenerated.cpp platform_android.cpp
LOCAL_LDLIBS := -llog
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
include $(BUILD_SHARED_LIBRARY)
モジュールのGradleファイル:
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
classpath 'com.github.dcendents:android-maven-plugin:1.2'
}
}
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
group = GROUP
version = VERSION_NAME
android {
compileSdkVersion 22
buildToolsVersion "21.1.2"
defaultConfig {
minSdkVersion 15
targetSdkVersion 22
}
sourceSets.main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
jni.srcDirs = []
assets.srcDirs = ['core/resources']
}
task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
commandLine "C:/Users/Administrator/AppData/Local/Android/android-ndk-r10e/ndk-build.cmd",
'NDK_PROJECT_PATH=build/intermediates/ndk',
'NDK_LIBS_OUT=jniLibs',
'APP_BUILD_SCRIPT=jni/Android.mk',
'NDK_APPLICATION_MK=jni/Application.mk'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
}
// Add gdb server to apk
afterEvaluate {
Sync packageTask = project.getTasks().findByName("packageReleaseJniLibs")
if (packageTask) { packageTask.include(['**/gdbserver', '**/gdb.setup']) }
packageTask = project.getTasks().findByName("packageDebugJniLibs")
if (packageTask) { packageTask.include(['**/gdbserver', '**/gdb.setup']) }
}
dependencies {
compile 'com.squareup.okhttp:okhttp:2.5.0'
compile 'xmlpull:xmlpull:1.1.3.1'
}
apply from: file('gradle-mvn-push.gradle')
Javaのクラス・ロード・ライブラリで10
:
static {
System.loadLibrary("c++_shared");
System.loadLibrary("tangram");
}
私はこの問題をGoogleとこれらの記事でLink1Link2Link3Link4 API 21以降でコンパイルし、古いデバイス上でそれを実行している問題であり得ることを述べています。しかし、私はあなたのApplication.mkでAPP_PLATFORM:= android-19に気を付けて、この例外を取得しています。
ヘルプ
コードを投稿してください。 makefileなど – Mine
私はこの問題を数回見てきました。システムが(Link2のような)独自のバージョンのライブラリを使用しようとしていたからです。一度、別のバージョンのコンパイルされたコードを使用していたからです私のアプリケーションのネイティブコードよりもNDKです。シンボルが実際にlibtangram.soによってエクスポートされているかどうかを確認するには、nmツール(NDKに含まれています)を使用しましたか?この投稿はあなたに役立つかもしれません:http://stackoverflow.com/questions/23044815/compiling-c-library-for-android-but-no-symbols-found –
なぜあなたはあなたの 'LOCAL_ALLOW_UNDEFINED_SYMBOLS:= true'を持っていますか? Android.mkファイル? – odexcide