androidjni开发一:jni基础知识(代码片段)

长沙火山 长沙火山     2022-12-08     139

关键词:

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 实现步骤

  1. Java中声明Native方法(即需要调用的本地方法)
  2. 编译上述 Java源文件javac(得到 .class文件)
  3. 通过 javah 命令导出JNI的头文件(.h文件)
  4. 使用 Java需要交互的本地代码 实现在 Java中声明的Native方法
  5. 编译.so库文件
  6. 通过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的关系

  1. JNI是Java中的接口,用于Java与本地语言的交互;
  2. NDK是安卓的开发工具包,用于快速开发C、C++的动态库,并和SO文件一起打包成APK;
  3. 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... 查看详情