
 1、确保NDK和CMake已经安装
1、确保NDK和CMake已经安装
 
   
新建能编译APK的工程,工程中添加相关ndk目录
  
2、添加C++模块
 添加完成后,工程目录自动更新,build.gradle导入了so编译器
添加完成后,工程目录自动更新,build.gradle导入了so编译器

修改build.gradle中添加相关gcc编译器如下
externalNativeBuild {
    cmake {
        abiFilters 'arm64-v8a', 'armeabi-v7a'
        cppFlags ''
     }
}
3、添加Jni java部分代码
新建JniTest.java文件,相关代码如下
package com.example.test;
import android.util.Log;
public class JniTest {
     private static final String TAG="JniTest";
     static {
         try {
             System.loadLibrary("test");
        } catch (Exception e){
             Log.e(TAG,"load jni failed " + e);
        }
    }
     public native int add(int x, int y);
     public void soCallBackTest(String from) {
         Log.d(TAG,"soCallBackTest " + from);
    }
}
注意一点 这个地方名字一样

4、添加Jni C++部分代码
执行通过javah -jni com.example.test.JniTest生成com_example_test_JniTest.h

将其剪切到 E:\Code\Test\app\src\main\cpp\
编写test.cpp如下
#include "com_example_test_JniTest.h"
#include <android/log.h>
#define TAG "Jni"
JNIEXPORT jint JNICALL Java_com_example_test_JniTest_add
         (JNIEnv *env, jobject obj, jint num1, jint num2){
    __android_log_print(ANDROID_LOG_DEBUG, TAG,"%s jin1 = %d, jin2 =%d", __FUNCTION__ ,num1, num2);
     int result = num1 + num2;
     /*from c to java*/
    jclass jclazz = env ->FindClass("com/example/test/JniTest");
     jmethodID jmethodIds = env ->GetMethodID(jclazz, "soCallBackTest", "(Ljava/lang/String;)V");
     jobject jobject1 = env->AllocObject(jclazz);
     jstring jst = env->NewStringUTF("I am Android!");
    env ->CallVoidMethod(jobject1, jmethodIds, jst);
     return result;
}
5、添加调用代码测试

编译APK后进行安装调试

CMake官方网站:https://cmake.org/getting-started/