交叉编译 怎么用java代码调用c代码
armeabi // arme cpu anroid binary interface
// 1 定义一个c方法的接口 相当于在java代码中定义了一个接口 接口的实现方法是C语言实现的
public native String helloWorldFromC();
// // 2 步 实现C代码
方法名 严格按照jni的规范 jstring Java_com_example_helloworldformc_MainActivity_helloWorldFromC(JNIEnv* env,jobject obj)
3
/ andrond.mk 告诉编译器 如何把c代码打包成函数库
// 3 生成 .mk文件
// 4步 把c代码 打包成函数库 用到了安装的环境
// 5 步在java代码中 引入库函数
static{
System.loadLibrary("hello");// 注意事项 去掉前面的lib 后面的.so
}
//6 使用方法
1 自动生成 java本地方法对应的c代码的方法名 javah 指令 +全雷鸣
1.6 class
C:\workspace\HelloWorldFromC2\bin\classes
1.7 src
C:\workspace\HelloWorldFromC2\src
Anroid.mk 文件
LOCAL_PATH := $(call my-dir) // 返回当前c代码目录
include $(CLEAR_VARS) // 清楚了所有 已local 开头的配置文件 唯独不清楚LOCAL_PATH
LOCAL_MODULE := hello // 库函数的名字 严格遵守makefile 格式 lib .so 如果前面加lib 不会自动生成了
LOCAL_SRC_FILES := Hello.c
include $(BUILD_SHARED_LIBRARY) // 加入库函数
armeabi // arme cpu anroid binary interface
// 1 定义一个c方法的接口 相当于在java代码中定义了一个接口 接口的实现方法是C语言实现的
public native String helloWorldFromC();
// // 2 步 实现C代码
方法名 严格按照jni的规范 jstring Java_com_example_helloworldformc_MainActivity_helloWorldFromC(JNIEnv* env,jobject obj)
3
/ andrond.mk 告诉编译器 如何把c代码打包成函数库
// 3 生成 .mk文件
// 4步 把c代码 打包成函数库 用到了安装的环境
// 5 步在java代码中 引入库函数
static{
System.loadLibrary("hello");// 注意事项 去掉前面的lib 后面的.so
}
//6 使用方法
1 自动生成 java本地方法对应的c代码的方法名 javah 指令 +全雷鸣
1.6 class
C:\workspace\HelloWorldFromC2\bin\classes
1.7 src
C:\workspace\HelloWorldFromC2\src
Anroid.mk 文件
LOCAL_PATH := $(call my-dir) // 返回当前c代码目录
include $(CLEAR_VARS) // 清楚了所有 已local 开头的配置文件 唯独不清楚LOCAL_PATH
LOCAL_MODULE := hello // 库函数的名字 严格遵守makefile 格式 lib .so 如果前面加lib 不会自动生成了
LOCAL_SRC_FILES := Hello.c
include $(BUILD_SHARED_LIBRARY) // 加入库函数