Android Studio 创建JNI工程之最详细教程

1.概述

    在上一篇文章中 JNI技术-入门教程 中,我们只做了简单的用Java文件生成.h的头文件。

    在真正工作中,想要用自己公司的.so库,又恰巧底层使用C/C++写的,那恭喜你,你得学习JNI技术了。以前都是我直接拿同事生成的.so库来使用,jni流程看过,但是没想过自己写Jni工程,这次设计新的 SDK,层次划分到jni要自己去做的时候才知道,jni要写也是很麻烦的,当然这也是指在自己没做过的情况下,这次就自己动手从0到1实现一遍用Android studio编写的工程吧!

2.NDK下载及配置

    想要用工程编写jni首先一定要有NDK,那么NDK是什么呢? 下面先介绍下NDK是什么!

> 定义 :

     Native Development Kit,是 Android的一个工具开发包【NDK是属于 Android 的,与Java并无直接关系】

> 作用:

    快速开发C、 C++的动态库,并自动将so和应用一起打包成 APK

    即可通过 NDK在 Android中 使用 JNI与本地代码(如C、C++)交互,其实最大原因就是可以在工程中帮助你生成jni的.h头文件

>应用场景:

    在Android的场景下 使用JNI 【即 Android开发的功能需要本地代码(C/C++)实现】

 >NDK特点:

>NDK的两种下载方式:

这是Google官方下载: 点击打开下载NDK链接

通过Android studio 下载

在创建的工程 点击 File -> Settings ->

一定要点Apply

OK,NDK下载完成

然后 右键工程-> Open Module -> Android NDK Location -> OK -> 等待编译

查看一下,等待编译


发现根目录local.properties里面多了NDK路径如下图:


接着我们在根目录gradle.properties下面加上如下图:

android.useDeprecatedNdk=true

继续我们在module下面的build.gradle下面加上ndk节点如下图:

ndk {
        moduleName "JniTest"
       
    }

  

3.编写Jni接口


然后Build -> Make Project一下(记住一定不能拉下这一步,要不你编写的接口内容不会同步到class文件中),我们会发现在/JniTest/app/build/intermediates/下面多了一个classes文件夹.我们可以打开AS下面的Terminal进入到classes下面的release文件夹下。注意:创建工程默认为debug模式的,有的可能编译不过,建议更改为release模式

如下图:


正常来说执行到这里  我们只需要输入 javah com.butel.jni.ButelTestJni  就可以生成了,但是有时候会报下图这样的错误:


那到这里  我们还是按照上一篇文章所说的执行 javah -classpath . -jni com.butel.jni.ButelTestJni

好了 到这里  我们的.h文件就生成了!

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio中调用JNI(Java Native Interface)可以实现Java与C/C++之间的相互调用。下面是一般的步骤: 1. 创建JNI文件夹:在Android Studio的项目目录下,创建一个名为"jni"的文件夹。 2. 创建C/C++源文件:在"jni"文件夹中创建一个C/C++源文件,例如"native-lib.c"。 3. 编写C/C++代码:在源文件中编写C/C++代码,实现所需的功能。 4. 生成头文件:在终端或命令提示符中,进入到"jni"文件夹,并执行以下命令生成头文件: ``` javah -d ../app/src/main/cpp -classpath ../app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes com.example.appname.MainActivity ``` 这里的"com.example.appname.MainActivity"是你的Java类的完整路径。 5. 配置CMakeLists.txt:在项目的根目录下找到"CMakeLists.txt"文件,并添加以下内容: ``` # 设置C/C++源文件路径 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -std=c++11") add_library(native-lib SHARED src/main/cpp/native-lib.c) # 链接JNI库 target_link_libraries(native-lib log) ``` 6. 在Java代码中加载JNI库:在需要使用JNI的Java类中,使用`System.loadLibrary("native-lib")`加载JNI库。 7. 调用JNI方法:在Java代码中,使用`native`关键字声明需要调用的JNI方法,并在C/C++代码中实现对应的JNI方法。 8. 构建和运行:点击Android Studio的"Build"菜单,选择"Make Project"来构建项目。然后可以在Java代码中调用JNI方法。 希望以上步骤对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值