Android(安卓)Studio JNI开发-1-引入第三方so文件
16lz
2021-01-26
Android开发过程经常会遇到将第三方的so文件引入到自己的项目中去,那么如何操作才能保证引入正常呢?
- 明确知道so库文件的文件名称
- 明确知道每个so文件中的方法名称,以及每个方法对应的全路径
第三方库的引用过程:
1.将所有的.so文件复制到具体某个Android模块下的libs文件夹下面;
将so文件复制.png
2.在该模块下的build.gradle文件下面添加对应的执行脚本:
//在app根目录下自动创建jniLibs文件夹,android模式下可见 sourceSets.main{ jniLibs.srcDirs = ['libs'] }
该脚本的功能是,如下图:
jniLibs自动生成.png
会自动创建jniLibs文件夹并且将libs下的so文件复制进去,并且在打包成apk文件的时候,系统会自动将jniLibs下的so文件复制到apk文件中的lib目录下:
apk文件的查看.png
3.根据已知jni的方法的全名称,创建对应的java本地方法
JNIEXPORT jstring JNICALLJava_fmblzf_androidjni_MainActivity_stringFromJNI( JNIEnv *env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str());}
如上代码中的方法名称:Java_fmblzf_androidjni_MainActivity_stringFromJNI,根据jni的命名规则拆分如下:
包名:fmblzf.androidjni;
类名:MainActivity
类下面的方法名称:stringFromJNI
根据以上信息创建对应的类和native方法:
package fmblzf.androidjni;public class MainActivity{ /** * 静态加载so库文件 */ static { System.loadLibrary("native-lib"); } public static native String stringFromJNI();;//是否静态不影响}
4.基于以上3步,开始测试使用:
package com.fmblzf.androidndk;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import com.fmblzf.androidndk.ndk.AndroidNDK;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String test = fmblzf.androidjni.MainActivity.stringFromJNI(); Log.e("MainActivity",test); }}
测试通过!
代码下载
更多相关文章
- Android自定义View实现竖直跑马灯效果案例解析
- android shouldOverrideUrlLoading 部分手机不执行解决方案!亲测
- 2020上半年百度Android岗(初级到高级)面试真题全收录+解析,备战金九
- Android(安卓)教程:如何刷入通讯基带
- Android学习笔记:服务(Service)
- Android——数据库存储(简单使用增、删、改、查)(含源码下载)
- Android异步消息处理机制 深入理解Looper、Handler、Message的关
- 【Android(安卓)如何置底一个View(附 前置声明layout布局文件中的
- 通过View.post()获取View的宽高引发的两个问题:1post的Runnable何