加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

JNI开发的流程①

发布时间:2020-12-14 02:31:31 所属栏目:Windows 来源:网络整理
导读:? windows 平台下写 C的代码 ? ? ?运行在linux ? ? ? native 语言 ?平台相关性强? NDK ? native develop kit ? ? ? 交叉编译 ?在一个平台上模拟另外一个平台的特点来编译native 代码 平台 操作系统平台 ? ? ? ?windows ? ?mac os ? ? linux ? 类unix ?iOS ?
?
windows 平台下写 C的代码 ? ? ?运行在linux ? ? ?
native 语言 ?平台相关性强?
NDK ? native develop kit ? ? ?
交叉编译 ?在一个平台上模拟另外一个平台的特点来编译native 代码
平台
操作系统平台 ? ? ? ?windows ? ?mac os ? ? linux ? 类unix ?iOS ? android
CPU 平台 ? ? ? ? ? ? x86 pc(intel amd) ? ? ? ?arm ? ? ? ? mips
?

通用流程

① java代码中声明一个native方法 native方法不用实现
?
    public native String hello();

?

?
②在模块的根目录下创建一个jni目录 创建.c的源代码
JNIEXPORT jstring JNICALL Java_ngyb_jnihello_MainActivity_hello(JNIEnv *env,jobject thiz){
    char* str = "hello c!!!!!!!";
    return (*env)->NewStringUTF(env,str);
}

?

③在jni的目录下创建一个Android.mk文件 ?.mk 是linux makefile 编译文件 向编译系统描述
要编译的源代码在什么目录下 叫什么名字 编译之后生成什么类型的文件 文件名是什么
?
LOCAL_PATH := $(call my-dir)
#获取当前的路径
include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
#LOCAL_MODULE 生成的模块的名字
LOCAL_SRC_FILES := hello.c
#LOCAL_SRC_FILES 指定要编译的代码的名字

include $(BUILD_SHARED_LIBRARY)
#指定生成一个动态链接库   linux下就是.so  windows下就是 .dll

?

?
④调用ndk-build来编译文件
在项目的根目录下来编译 如果找不到模块的话 通过NDK_PROJECT_PATH=app 来指定模块的名字
⑤编译成功之后会生成.so ? ?会放在模块的libs目录下 可以通过 模块的gradle配置 指定.so的位置
在模块的gradle中 android{}内写如下内容
sourceSets.main.jniLibs.srcDirs = [‘libs‘]

?

 
 

?
⑥项目运行之前通过 System.loadlibrary加载.so模块
需要注意 生成的.so文件系统会自动加上一个lib前缀
System.loadLibrary的时候 不要写lib前缀 去掉lib 去掉.so就是要加载的模块的名字

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读