調用so庫文件以及裏面的方法

之前文章寫過一篇JNI生成so庫文件   並調用裏面的方法

手把手教你---JNI的實現

實際開發中  so庫是別人給你的,不是你自己寫的沒所以就要用別人的so庫文件。

有很多情況,有一種是比較簡單的:既有so庫文件又有對應的jar包,這樣的話  直接就可以調用裏面的方法了。

第二種比較坑爹,限制也比較多,所以現在就主要研究一下 第二種吧(只有so庫  其他什麼都沒有)


第一步:

sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
把這個添加到build gradle (app)  裏面  (abdroid 下)

整體的代碼如下:

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "com.example.administrator.hongyangzzzb"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

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

}

第二步:

工作區間切換到Project,在libs裏面 把之前的so庫文件添加進去,如圖:


然後把同樣的東西  在src/main 下新建文件夾jniLibs  粘貼到裏面,如圖:



第三步: 新建JNIUtils 類

這個就有點麻煩了,有一些要求在裏面,因爲我之前的調用C的方法的那個類名字加JNIUtils 多以這個類也必須交這個,名字不一樣就報錯,而且包名也必須一致,修改包名下一篇再說(湊篇幅),放改好包名就會使這樣(因爲上一個的包名是 hongyangzzz):


裏面的是:

public class JNIUtils {

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

    public native String getString();


}

然後在MainActivity調用就行了:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        JNIUtils j = new JNIUtils();

        Toast.makeText(this, j.getString()+"123", Toast.LENGTH_SHORT).show();



    }
}

----------------------------------------------------------------------------------------------------

下面的會寫一篇專門關於報錯的,,,,。。今天沒時間了。



發佈了104 篇原創文章 · 獲贊 138 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章