2015-02-01 2 views
0

나는 .so 라이브러리를 생성하기 위해 Android studio 1.0.2를 사용하고 있습니다. 에뮬레이터에서 앱을로드하면 모듈을로드하는 중 오류가 발생합니다. 오류 메시지는 다음과 같습니다에뮬레이터의 NDK 모듈에 액세스 할 수 없습니다.

여기

dlopen failed: library "HelloJNI" not found

MainActivity.java:

public native String HelloJNI(); 

static 
{ 
    System.load("HelloJNI"); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView tv = new TextView(this); 
    tv.setText(HelloJNI()); 
    setContentView(tv); 
} 

HelloJNI.c

JNIEXPORT jstring JNICALL Java_com_example_linda_myapplication_MainActivity_HelloJNI(JNIEnv *env, jobject obj){ 
(*env)->NewStringUTF(env, "Hello from JNI"); 
} 

build.gradle

apply plugin: 'com.android.application'android { 
compileSdkVersion 19 
buildToolsVersion '19.1.0' 

defaultConfig { 
    applicationId "com.example.linda.myapplication" 
    minSdkVersion 17 
    targetSdkVersion 19 
    versionCode 1 
    versionName "1.0" 

    ndk{ 
     moduleName "HelloJNI" 
     //cFlags "-DANDROID_NDK -D_DEBUG DNULL=0" // Define some macros 
     //ldLibs "EGL", "GLESv3", "dl", "log"  // Link with these libraries! 
     //stl "stlport_shared"      // Use shared stlport library 
    } 
} 
sourceSets.main 
     { 
      jniLibs.srcDir 'src/main/libs' 
      jni.srcDirs = [] 
     } 
productFlavors{ 
      x86{ 
        ndk{ 
           abiFilter "x86" 
        } 
      } 
      armv7a{ 
         ndk{ 
            abiFilter "armeabi-v7a" 
         } 
        } 
     } 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
} 
dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
} 
,369입니다
+0

apk 파일을 확인합니다. .so가 "lib/armeabi-v7a"라는 폴더에 압축되어있는 것 같습니다. 그러나 왜 프로그램이 모듈을 목표로하지 못했습니까? – Jensz

답변

0

System.load()을 사용할 때 라이브러리의 전체 경로 이름을 지정해야합니다.

System.loadLibrary()을 사용하여 기본 라이브러리를로드하는 경우 프레임 워크 구현은 java.library.path 및 환경 변수 LD_LIBRARY_PATH에서 지정된 값으로 라이브러리 이름을 검색합니다.

0

마지막으로, 스스로 문제를 발견했습니다.

System.load ("HelloJNI");

apk를로드하지 못하게하는 지점입니다.

System.loadLibrary ("HelloJNI");

올바른 기능입니다. 코드 완성은 훌륭하지만 때로는 사람들이 어리 석을 수도 있습니다.

관련 문제