Android ndk'nin entegre edildiği Library bir demo uygulamasını çalıştırmaya çalışıyorum. Android stüdyosunda this kodunu aldım ve ayrıca ndk’yi indirdim ve projeyle ilişkilendirdim. Kod derler ve başarıyla oluşturur. Başarısız " "başlatılırken atılmış unsatisfiedlinkerror lang ljava istisna" Bu istisna ile kazasında verir: dlopen başarısız oldu:" ...Android NDK Exception başarısız oldu: dlopen başarısız oldu: "libtangram.so" tarafından başvurulan "_ZN7Tangram11setPositionEdd" sembolünü bulamıyor
Application.mk "libtangram.so" tarafından başvurulan sembol "_ZN7Tangram11setPositionEdd" bulamaz:
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)
Modül Gradle Dosya:
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 sınıfı yük kütüphanelerinde 10
:
static {
System.loadLibrary("c++_shared");
System.loadLibrary("tangram");
}
Ben bu sorunu google ve bu mesajların buna API 21 veya daha yeni en derleme ve eski cihazlar üzerinde çalışan sorun olabilir bahsedilmektedir Link1Link2Link3Link4 içinde. Ama benim app.PLk uygulamasında APP_PLATFORM: = android-19 ve bu istisnayı alıyorum.
Herhangi Yardım? Onların tavsiye inşa sürecinde (https://github.com/tangrams/tangram-es#android) aksine kendi özel ndk-Yapı 'tangram projeyi derlemek çalıştı gibi
örneğin kodunuzu, buraya gönderin Ben farklı bir sürümü ile derlenmiş kodu kullanarak çünkü bir kere sistemi (sizin LINK2 gibi) kütüphanenin kendi versiyonunu kullanmaya çalışıyorum çünkü bir kez ve - Bu konuyu gördüğüm vb makefile, – Mine
birkaç kez gelip NDK, uygulamamdaki yerel koddan daha iyi. Sembolün gerçekten libtangram.so tarafından dışa aktarılıp aktarılmadığını kontrol etmek için (NDK'da bulunan) nm aracını kullandınız mı? Bu gönderi size şu konuda yardımcı olabilir: http://stackoverflow.com/questions/23044815/compiling-c-library-for-android-but-no-symbols-found –
Neden "LOCAL_ALLOW_UNDEFINED_SYMBOLS: = true" var? Android.mk dosyası? – odexcide