之前文章寫過一篇JNI生成so庫文件 並調用裏面的方法
實際開發中 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();
}
}
----------------------------------------------------------------------------------------------------
下面的會寫一篇專門關於報錯的,,,,。。今天沒時間了。