Android Studio 3.5.1
相关的so文件
首先,在src-main目录下创建libs文件夹(与java文件夹同级);将需要调用的so文件(包含各个架构的,如armeabi、armeabi-v7a、mips等)放到libs文件夹下,每个架构一个文件夹,每个文件夹下放各自的so文件,如下图:
在build-gradle(app)中添加sourceSet配置,并在dependencies中添加如下语句,如图所示
在主Activity中(此处为MainActivity)添加对库的调用语句,如下图
新建一个类,声明native函数,即so文件中的函数,以便后续使用。注意:此处新建类的类名,必须与so库的头文件中函数名一致。比如此处so库中存在一个函数,头文件中是这样声明的:Java_com_example_hrv_Algorithm_EcgjinClient_CalculateHRVResultByRRData,即在创建这个so库的时候,当时项目的包名为com.example.hrv.Algorithm,类名为EcgjinClient,该类中的函数名为CalculateHRVResultByRRData因此,在调用so库的时候,不管你目前的包名是什么,都应该在该项目下重新创建一个包,命名为com.example.hrv.Algorithm(创建包也可以通过创建一层一层的文件夹来实现)。比如此处项目中本身的包名com.example.hrvcalc,这样的话就在example文件夹下创建hrv文件夹,在hrv文件夹下创建Algorithm文件夹,这样在该项目下就会多了一个包(com.example.hrv.Algorithm),并在该包下新建EcgjinClient类,在该类中声明native函数,此时在声明函数的时候,就不需要加前面的包名和类名了,直接写static public native ResultOfHRV CalculateHRVResultByRRData()即可
在主Activity(此处MainActivity)中直接用类名.方法调用即可(因为是static类型)
如果在调试时遇到如下问题:FATAL EXCEPTION: mainjava.lang.UnsatisfiedLinkError:dalvik.system.PathClassLoader[DexPathList[……,nativeLibraryDirectories=[/data/app/com.……-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find 'libEcgAlgorithm.so'说明,你当前调试的安卓设备是arm64位的,所以找so的时候是从arm64相关文件夹中搜索,如果搜索不到会提示错误。解决此问题的方法是:在build-gradle(app)的defaultConfig中增加如下内容,重新编译即可。