Android开发过程经常会遇到将第三方的so文件引入到自己的项目中去,那么如何操作才能保证引入正常呢?

  1. 明确知道so库文件的文件名称
  2. 明确知道每个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);    }}

测试通过!
代码下载

更多相关文章

  1. Android自定义View实现竖直跑马灯效果案例解析
  2. android shouldOverrideUrlLoading 部分手机不执行解决方案!亲测
  3. 2020上半年百度Android岗(初级到高级)面试真题全收录+解析,备战金九
  4. Android(安卓)教程:如何刷入通讯基带
  5. Android学习笔记:服务(Service)
  6. Android——数据库存储(简单使用增、删、改、查)(含源码下载)
  7. Android异步消息处理机制 深入理解Looper、Handler、Message的关
  8. 【Android(安卓)如何置底一个View(附 前置声明layout布局文件中的
  9. 通过View.post()获取View的宽高引发的两个问题:1post的Runnable何

随机推荐

  1. Xamarin.Android教程:模拟器选择
  2. android Service之一:不需和Activity交互
  3. Fragment、FragmentActivity 和Actvity区
  4. 【Android】快速切换到主线程更新UI的几
  5. Android仿百度地图小度语音助手的贝塞尔
  6. [置顶] android LayoutInflater、setCont
  7. 判断环境为iOS或Android
  8. Android开发中Activity属性设置小结
  9. android 使用 kotlin lambda 表达式,可以
  10. android 2.1 获取手机流量