Android Studio NDK开发案例一 JNI开发入门

本文介绍了Android NDK和JNI的基本概念,阐述了它们在Android开发中的作用和关系。通过一个简单的JNI开发案例,详细讲解了在Android Studio中设置NDK环境,创建C++支持的项目,配置生成SO库,编写JNI接口程序,并最终实现Java调用C++代码的过程。此外,还提到了第三方SO库的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        最近在做Android的项目,用到了JNI,现将NDK的开发流程和方法整理出来,希望能够让刚接触的小伙伴们少走一些弯路。

NDK

        Native Development Kit(NDK)是一系列工具的集合。它提供了一系列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和java一起打包成apk。

JNI

        Java Native Interface(JNI)标准是java平台的一部分,JNI是Java语言提供的Java和C/C++相互沟通的机制,Java可以通过JNI调用C/C++代码,C/C++的代码也可以调用java代码。我们知道,不管是linux还是windows亦或是mac os,这些操作系统,都是依靠C/C++写出来的,还包括一些汇编语言写的底层硬件驱动 。java和C/C++不同 ,它不会直接编译成平台机器码,而是编译成虚拟机可以运行的java字节码的.class文件,所以效率就比不上C/C++代码,但是通过JNI技术可以即时编译成本地机器码。JNI调用示意图:


        从上图可以得知,JNI技术通过JVM调用到各个平台的API,虽然JNI可以调用C/C++,但是JNI调用还是比C/C++编写的原生应用还是要慢一点,不过对高性能计算来说,这点算不得什么,享受它的便利,也要承担它的弊端 。

JNI与NDK的关系

        NDK可以为我们生成了C/C++的动态链接库,JNI是java和C/C++沟通的接口,两者与android没有半毛钱关系,只因为安卓是java程序语言开发,然后通过JNI又能与C/C++沟通,所以我们可以使用NDK+JNI来实现“Java+C”的开发方式。

为什么要NDK开发

        NDK开发具有以下优点: 

       1. 项目需要调用底层的一些C/C++的一些东西(java无法直接访问到操作系统底层(如系统硬件等)),或者已经在C/C++环境下实现了功能代码(大部分现存的开源库都是用C/C++代码编写的。),直接使用即可。NDK开发常用于驱动开发、无线热点共享、数学运算、实时渲染的游戏、音视频处理、文件压缩、人脸识别、图片处理等。 
        2. 为了效率更加高效些。将要求高性能的应用逻辑使用C/C++开发,从而提高应用程序的执行效率。但是C/C++代码虽然是高效的,在java与C/C++相互调用时却增大了开销; 
        3. 基于安全性的考虑。防止代码被反编译,为了安全起见,使用C/C++语言来编写重要的部分以增大系统的安全性,最后生成so库(用过第三方库的应该都不陌生)便于给人提供方便。(任何有效的代码混淆对于会smail语法反编译你apk是分分钟的事,即使你加壳也不能幸免高手的攻击) 
        4. 便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。

NDK开发案例一   JNI开发入门

开发工具:Android Studio 2.3.3

NDK:android-ndk-r14b

 

1、打开Android Studio,选择“Start a new Android Studio procet”创建android工程,如下图:

2、根据项目需要修改"项目名称"、"公司域名"、"app包名"、"工程路径",勾选“Include C++ support”选项,该选项用于支持JNI开发,如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值