ndk爬坑之路1.0
阿新 • • 發佈:2019-01-06
給定[.so庫檔案]和[so標頭檔案包名][方法名] 的前提下
環境:Android studio2.2.3 ndk cmake3.4.1 lldb
已知
- librate-lib.so檔案
- native方法名以及引數 返回值型別,如下:
package com.gxdloveyl.ndkdemo;
public class JniTool {
static {
System.loadLibrary("rate-lib");
}
public native static int getHeartRate();
}
新建工程,假設包名為com.vmove.jnitest
新建libs目錄到app module下,拷貝so檔案到其中
新建類檔案,將上面程式碼貼上進去,注意不要修改packagename,alt+enter選擇新建包放置。
此時getHeartRate()方法會變紅,提示找不到該本地方法,不用管他。
在MainActivity中呼叫本地方法,so庫中會返回一個隨機數,我們2s遞迴呼叫一次,顯示到Textview上
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Example of a call to a native method
tv = (TextView) findViewById(R.id.sample_text);
getFromC();
}
public void getFromC() {
tv.postDelayed(new Runnable() {
@Override
public void run() {
tv.setText(JniTool.getHeartRate()+"from jni");
getFromC();
}
},2000 );
}
此時是可以編譯通過的,但是安裝到手機上後會崩潰,報錯資訊:找不到lib庫檔案
那是因為我們沒有告訴gradle我們的so檔案在哪裡放著
在app下的build.gradle檔案中 android節點下新增
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
好了,小工告成!測試一下