Android Studio JNI开发-1-引入第三方so文件

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

  1. 明确知道so库文件的文件名称
  2. 明确知道每个so文件中的方法名称,以及每个方法对应的全路径

第三方库的引用过程:

1.将所有的.so文件复制到具体某个Android模块下的libs文件夹下面;


Android Studio JNI开发-1-引入第三方so文件_第1张图片
将so文件复制.png

2.在该模块下的build.gradle文件下面添加对应的执行脚本:

//在app根目录下自动创建jniLibs文件夹,android模式下可见
    sourceSets.main{
        jniLibs.srcDirs = ['libs']
    }

该脚本的功能是,如下图:


Android Studio JNI开发-1-引入第三方so文件_第2张图片
jniLibs自动生成.png

会自动创建jniLibs文件夹并且将libs下的so文件复制进去,并且在打包成apk文件的时候,系统会自动将jniLibs下的so文件复制到apk文件中的lib目录下:


Android Studio JNI开发-1-引入第三方so文件_第3张图片
apk文件的查看.png

3.根据已知jni的方法的全名称,创建对应的java本地方法
JNIEXPORT jstring JNICALL
Java_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 Studio JNI开发-1-引入第三方so文件)