大家好,又见面了,我是你们的朋友全栈君。
之前文章写过一篇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();
}
}
———————————-———————-———————-———————-
下面的会写一篇专门关于报错的,,,,。。今天没时间了。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148960.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...