关键词:
JNI基础知识
Android系统底层的框架大多采用的是C或者C++语言实现的,但是Android上层的框架是采用Java实现的,所以我们平常进行Android也是采用Java语言开发。虽然Android底层采用C或者C++实现,但是我们在进行Android开发的时候,却不能直接调用C或者C++,而是需要采用JNI来调用C或者C++,下面小编就为大家介绍什么是JNI?以及怎么使用JNI来实现调用C或者C++语言。
一、JNI 介绍
1.1 简介
JNI 即 Java Native Interface
,通俗的可以理解为Java本地接口。它的作用就是能实现Java与本地其他语言,比如C或者C++进行交互。也就是说可以Java可以通过JNI调用C、C++,同时C、C++也能通过JNI调用Java。
JNI是Java语言中的特性,JNI是属于Java的,与Android其实是没有直接关系的。
1.2 实现步骤
- 在
Java
中声明Native
方法(即需要调用的本地方法) - 编译上述
Java
源文件javac(得到.class
文件) - 通过
javah
命令导出JNI
的头文件(.h
文件) - 使用
Java
需要交互的本地代码 实现在Java
中声明的Native
方法 - 编译
.so
库文件 - 通过
Java
命令执行Java
程序,最终实现Java
调用本地代码
1.3 JNI的使用场景
-
考虑代码安全
在安卓开发中,Java语言开发的代码往往很容易被反编译,但是C语言写的代码编译之后就成了二进制文件,所以比较难被反编译。在一些比较机密的业务可以采用C语言来编写,然后采用Java通过JNI来调C语言。 -
考虑执行效率
一些比较复杂的算法采用java语言实现,可能执行效率比较低,但是如果采用C语言实现,效率可能会更高,因为C语言是更接近底层的语言。所以为了提高执行效率,比如一些视频的处理算法,往往是采用C语言去实现的。在一些比较复杂的算法可以采用C语言来编写,然后采用Java通过JNI来调C语言。
二、NDK介绍
2.1 简介
NDK 即 Native Development Kit
,可以理解为NDK是安卓的一个开发工具包。它的作用是可以快速开发C、C++的动态库,并且自动将SO库和应用一起打包成APK。
NDK是属于安卓的开发工具包,与Java没有直接的关系。
2.2 JNI与NDK的关系
- JNI是Java中的接口,用于Java与本地语言的交互;
- NDK是安卓的开发工具包,用于快速开发C、C++的动态库,并和SO文件一起打包成APK;
- JNI是实现的目的,而NDK是安卓中实现JNI的手段。在AndroidStudio中,是通过NDK实现JNI功能的。
androidjni开发一:jni基础知识(代码片段)
JNI基础知识Android系统底层的框架大多采用的是C或者C++语言实现的,但是Android上层的框架是采用Java实现的,所以我们平常进行Android也是采用Java语言开发。虽然Android底层采用C或者C++实现,但是我们在进行... 查看详情
androidjni开发二:如何生成so库(代码片段)
目录 AndroidJNI开发一:JNI基础知识 AndroidJNI开发二:如何生成SO库 AndroidJNI开发三:SO库的使用 AndroidJNI开发四:鸿蒙JNI开发 一、JNI1.1创建工程用AndroidStudio创... 查看详情
androidjni开发三:so库的使用(代码片段)
目录 AndroidJNI开发一:JNI基础知识 AndroidJNI开发二:如何生成SO库 AndroidJNI开发三:SO库的使用 AndroidJNI开发四:鸿蒙JNI开发 本篇主要介绍如何在普通的安卓工程中使用... 查看详情
androidjni——ndk与jni基础(代码片段)
本系列文章如下:AndroidJNI(一)——NDK与JNI基础AndroidJNI学习(二)——实战JNI之“helloworld”AndroidJNI学习(三)——Java与Native相互调用AndroidJNI学习(四)——JNI的常用方法的中文APIAndroidJNI 查看详情
androidjni开发一:如何生成so库(代码片段)
目录 AndroidJNI开发一:如何生成SO库 AndroidJNI开发二:SO库的使用一、JNI1.1创建工程用AndroidStudio创建一个新的工程,我的AndroidStudio版本为4.2.2。创建工程第一步的时候,需要选择模版... 查看详情
androidjni开发五:jni字符串的处理(代码片段)
JNI字符串处理1.NewStringUTF创建字符串jstringNewStringUTF(constchar*utf)returnfunctions->NewStringUTF(this,utf);参数说明:-utf:字符串说明: 通过调用NewStringUTF函数,会构建一个新的java.lang.String字符串对象。这个新创建的字符 查看详情
androidjni开发五:jni字符串的处理(代码片段)
JNI字符串处理1.NewStringUTF创建字符串jstringNewStringUTF(constchar*utf)returnfunctions->NewStringUTF(this,utf);参数说明:-utf:字符串说明: 通过调用NewStringUTF函数,会构建一个新的java.lang.String字符串对象。这个新创建的字符 查看详情
androidjni详解(代码片段)
目录一、前言:二、JNI简介三、JNI函数注册3.1静态注册:3.2动态注册四、函数签名 4.1什么是函数签名:4.2为什么需要函数的签名:4.3如何获取函数的签名五、JNIEnv5.1何为JNIEnv:5.2通过JNIEnv调用java对象方法5.3跨线程... 查看详情
androidjni开发示例
看源码和写项目时,见过很多JNI和Native相关的代码。有一定C/C++功底的前提下,在既有的框架上,修改和增加JNI、Native代码其实并不是一件困难的事。不过自己一直没有记录开发JNI的完整步骤,即搭建出框架... 查看详情
androidjni局部引用表溢出:localreferencetableoverflow(max=512)(代码片段)
在《JNI/NDK开发指南(十)——JNI局部引用、全局引用和弱全局引用》这篇文章中详细介绍了在JNI中三种引用的使用方式,区别、应用场景和开发注意事项。由于都是理论,看完之后可能印象不够深刻,由其是... 查看详情
androidjni/ndk开发jni实现c/c++与android/java相互调用
前言一直觉得无论是从行业形式来看,还是从就业角度说,学习JNI/NDK开发是一条必经之路。很多说Android和IOS几乎没有市场了,其实只能说现在开发APP的需求没那么多了,再加上之前培训机构疯狂向市场输出Android/... 查看详情
androidjni编程——使用androidstudio编写第一个jni程序
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/。目录(?)[+]1.简单介绍一下NDK和JNINDK:NDK是NativeDevelopmentKit的缩写,是Google提供的一套工具集,可以让你其他语言(C、C++或汇编)开发Android的JNI。NDK可以编... 查看详情
简单地迁移你的androidjni代码逻辑到ios-编写ios下jni.h的替代-ocni.h
1.jni的代码逻辑中与上层平台语言交互了。2.使用非Xcode的ide开发工具,希望使用纯净的c/c++代码,不掺杂其它平台相关的语言语法。3.只想简单地替换jni代码对上层平台语言的功能调用。对了,本文就是这样一个出发点。 先... 查看详情
androidjni出坑指南(代码片段)
本文来自于腾讯Bugly公众号(weixinBugly),作者:qingcuilu,未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/AtxEEN13z_sdbZTpJsKWLw在Android编程中,出于硬件交互,跨平台,安全性,第... 查看详情
2jni说明
1.JAVA调用CLinux是用C语言写的,可以写一个APP简单调用open,read,write来访问驱动程序;Android是用Java写的,Java怎么访问C函数?jni.pdfP117AndroidJNI知识简介http://blog.csdn.net/linweig/article/details/5417319AndroidJNI(实现自己的JNI_OnLoad函数)http://jj 查看详情
androidjni局部引用表溢出:localreferencetableoverflow(max=512)(代码片段)
在《JNI/NDK开发指南(十)——JNI局部引用、全局引用和弱全局引用》这篇文章中详细介绍了在JNI中三种引用的使用方式,区别、应用场景和开发注意事项。由于都是理论,看完之后可能印象不够深刻,由其是... 查看详情
androidjni之java和c互相调用(代码片段)
概述JNI是什么JNI是JavaNativeInterface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。NDK... 查看详情
androidjni开发二:so库的使用(代码片段)
目录 AndroidJNI开发一:如何生成SO库 AndroidJNI开发二:SO库的使用本篇主要介绍如何在普通的安卓工程中使用编译好的SO库文件。首先,新建一个普通的安卓项目工程,我的工程名叫SOTest... 查看详情