android studio JNI 环境配置实现 java 调用 c/c++

发布于:2025-09-09 ⋅ 阅读:(21) ⋅ 点赞:(0)

1、在 app 级的 build.gradle 文件配置两个地方

android{
    defaultConfig{
      
// 在 defaultConfig 里配置下面代码
       externalNativeBuild {
             cmake {
                 cppFlags "-frtti -fexceptions"//添加对 c++ 的异常处理支持
            }
        }
     }

     buildTypes{
       
       //在 buildTypes 里添加 CMakeLists.txt (c文件的配置文件)
       externalNativeBuild {
            cmake {
                path "CMakeLists.txt"
            }
        }
       
     }
}

2、配置好后 在 mainactivity 写 native 方法 这个方法是在 c 里面实现的。

	public native String getFromC();

 3、在项目的 main 目录下面新建个文件夹 myc,再新建个 testC.c 文件代码如下

	#include <jni.h>

	JNIEXPORT jstring JNICALL Java_com_test_custom_test_MainActivity_getFromC
 	 (JNIEnv * env, jobject jobj){

   	 return (*env)->NewStringUTF(env,"I'am From C");

  	}#include <jni.h>

	JNIEXPORT jstring JNICALL Java_com_test_custom_test_MainActivity_getFromC
 	 (JNIEnv * env, jobject jobj){

   	 return (*env)->NewStringUTF(env,"I'am From C");

  	}

上面的这句代码怎么生成的?
用 javah 生成 .h 文件 然后拷贝过来的
    
至于 return 语句是 JNI 开发 不在本篇范围
3、在 app 级目录下新建个文件 CMakeLists.txt 里面的配置如下
	add_library(

   	  #库名 等会需要lode的库 这个库是由系统生成so的
   	  test_lib

    	 # c 文件的路径
   	  src/main/myc/testC.c
	)add_library(

   	  #库名 等会需要lode的库 这个库是由系统生成so的
   	  test_lib

    	 # c 文件的路径
   	  src/main/myc/testC.c
	)

4、java 调用 c
加载库 test_lib
    static {
        System.loadLibrary("test_lib");
    }
调用 getFromC 方法
 

网站公告

今日签到

点亮在社区的每一天
去签到