JNI开发的流程①

 
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就是要加载的模块的名字

转载于:https://www.cnblogs.com/nangongyibin/p/10425279.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Android Studio 中进行 JNIJava Native Interface)开发流程如下: 1. 创建新的 Android 项目或打开现有项目。 2. 在项目的 `app` 模块下创建 `jni` 文件夹。可以右键点击 `app` 模块,选择 "New" -> "Folder" -> "JNI Folder"。 3. 在 `jni` 文件夹中创建一个新的 C/C++ 文件,例如 `native-lib.cpp`。 4. 在 `native-lib.cpp` 文件中编写您的 C/C++ 代码,可以与 Java 代码进行交互。 5. 打开 `CMakeLists.txt` 文件,它位于 `app` 模块的根目录中。如果没有该文件,则可以创建一个。 6. 在 `CMakeLists.txt` 文件中添加以下内容: ```cmake # 添加自动生成的 C/C++ 头文件 include_directories(src/main/cpp) # 添加你的 C/C++ 源文件 add_library(native-lib SHARED src/main/cpp/native-lib.cpp) ``` 7. 在 `MainActivity.java`(或您想要使用 JNI 的任何其他类)中,添加以下代码来加载和调用本地库: ```java static { System.loadLibrary("native-lib"); } // 调用本地方法示例 public native String yourNativeMethod(); ``` 8. 点击顶部菜单栏的 "Build" -> "Make Project" 来构建项目。 9. 如果一切顺利,您就可以在您的 Java 代码中调用您定义的本地方法了。 请注意,这只是一个简单的 JNI 开发流程示例。在实际开发中,您可能还需要处理类型转换、异常处理等其他细节。同时,您还需要了解更多关于 JNI 的知识,例如如何在 Java 和 C/C++ 之间传递数据、使用 JNI 的限制和最佳实践等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值