添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
捣蛋的针织衫  ·  FFMPEG结构体分析 ...·  3 周前    · 
发怒的弓箭  ·  使用 Wolfram ...·  3 月前    · 
销魂的自行车  ·  Python continue 语句 | ...·  3 月前    · 

linux(Ubuntu 환경)에서 .so파일을 생성한 뒤 Windows의 Android studio에 추가해주었습니다.

app>src>main>jniLib>{ABI(armeabi, arbeabi-v7a, x86)}>libmain.so

그리고 .so 파일을 .zip파일로 압축한 후 .jar로 형식을 바꿔준 뒤 app>libs>main.jar에 추가하였습니다.

그리고 app/build.gradle에

ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86"
packagingOptions {
            exclude '/lib/armeabi/libgnustl_shared.so'
            exclude '/lib/armeabi-v7a/libgnustl_shared.so'
            exclude '/lib/x86/libgnustl_shared.so'
}
sourceSets{
        main{
            jni.srcDirs = []
            jniLibs.srcDirs 'libs'
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
task deleteOldJar(type: Delete) {
    delete 'libs/main.jar'
//task to export contents as jar
task exportJar(type: Copy) {
    from('build/intermediates/bundles/debug/') // or build/intermediates/bundles/release/
    into('libs/')
    include('classes.jar')
    ///Give whatever name you want to give
    rename('classes.jar', 'main.jar')
exportJar.dependsOn(deleteOldJar, build)

추가하고 gradle.properties에

android.useDeprecatedNdk=true

추가한 후

static {
        System.loadLibrary("main");
}

이 부분에서

java.lang.UnsatisfiedLinkError: dlopen failed: library "libgnustl_shared.so" not found

이런 Error가 나는데 뭐 혹시 빠트린 부분이 있는건가요?

  • so는 library (window로 치면 dll) 이지 실행 파일(exe)이 아니기 때문에 main을 사용하지 않습니다. jni에 선언된 메소드를 호출하는  java 파일을 직접 호출 해 주셔야 합니다.
    예를 들어 java 파일이 com.test.TestLibray.java 이고 void native main();  를 선언한다면, jni 쪽 파일의 void com_test_TestLibrary_main(Env* env, jobject thiz) {}  함수와 매핑되어, TestLibray.main();  호출 시 com_test_TestLibrary_main가 불립니다.