Android如何使用so文件和Android studio中導入so


Android中使用so文件:

做一個PDF閱讀的功能,找到一個開源的庫,mupdf。下載的是網上編譯好的so庫,導入到自己項目中的時候一直報錯Java.lang.UnsatisfiedLinkError: Couldn't load netplayerlibq: findLibrary returned null,找不到so文件中的方法。找了一個下午,終於知道了原因。

JNI中的方法的命名規范是

1) 前綴: Java_
2) 類的全限定名,用下划線進行分隔(_):com_lms_jni_JniTest
3) 方法名:getTestString 

方法命名是與包名相關的,所以在用so庫的時候,將調用其中方法的類的包名改成so文件中寫的包名。這是最簡單的辦法。當然,最好的辦法當然是找到開源項目的源碼交叉編譯成含有我們項目包名的so文件。

參考http://blog.csdn.NET/jiabailong/article/details/7986350 

 

Android studio中導入so的兩種方法:

1、將so文件放在libs目錄下,然后在app的build.gradle中加入如下配置 

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}

整個配置文件如下:

android {
    compileSdkVersion 23
    buildToolsVersion '19.1.0'

    defaultConfig {
        applicationId "com.hehe.itlms"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0.0"
    }
    buildTypes {
        release {
            minifyEnabled true//是否混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}

2、將所有需要使用的.so文件壓縮為.zip文件(zip中的文件目錄結構為: lib/armeabi/*.so)注意,一定要是這樣的路徑,lib不要寫成libs啊!然后將這個.zip文件重命名為armeabi.jar文件(我用的是so.jar),將該jar包添加到項目的libs文件下,然后Add isLibrary。

最后的目錄結構 

libs 
^---|xxx.jar 
^---|armeabi.jar 
        ^---|lib 
              ^---|armeabi 
                     ^---|xxx.so


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM