![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android系统之JNI
文章平均质量分 90
JNI相关
hc-斌斌
这个作者很懒,什么都没留下…
展开
-
android JNI调用(Android Studio 3.0.1)(转)
最近回头复习了一下android 的jni调用,却发现按以前的方法调用失败,一怒之下就重新摸索,碰了几次壁,发现网上好多教程都不能成功调用,于是记录一下现在AS版本成功好用的调用方法。这里设定你的ndk已经下载并且设置没问题.源码链接:http://download.csdn.net/download/yeyuehei/10149844当前android studio 版本3.0.1,步骤如下:1.设置jni -h 和ndk -build的快捷方式2.java代码写c回调的方法,及grade转载 2021-08-27 13:05:05 · 494 阅读 · 0 评论 -
避免最常见的 10 大 JNI 编程错误的技巧和工具
避免最常见的 10 大 JNI 编程错误的技巧和工具Java™ 本机接口(Java Native Interface,JNI)是一个标准的 Java API,它支持将 Java 代码与使用其他编程语言编写的代码相集成。如果您希望利用已有的代码资源,那么可以使用 JNI 作为您工具包中的关键组件 —— 比如在面向服务架构(SOA)和基于云的系统中。但是,如果在使用时未注意某些事项,则 JNI 会...转载 2020-04-22 14:50:25 · 833 阅读 · 2 评论 -
Android底层JNI中的JavaVM和JNIEnv对象
最近在做关于安卓安全方面的东西,需要对底层进行注入,在看雪论坛上看了不少资料,查阅了相关书籍了解了一下,需要用到JNI。利用JNI可以实现Java和底层的C/C++模块相互沟通(NDK的框架用到了该外观设计模式,Facade Pattern) 其具体步骤如下:(1)创建一个包含native本地方法的类;(2)利用javah工具生成C/C++语言的头文件;(3)创转载 2015-10-16 14:09:17 · 1978 阅读 · 0 评论 -
JNI学习之步步深入四--皇后的祝福
上篇中简单介绍了,java中的类型和C中的类型的映射的,本篇将以一个无聊的实例来看看JNI中数组的使用。 皇后的祝福,思路很简单,就是利用我们耳熟能详的把皇后问题结合JNI来实现一点点小小的乐趣,在快乐中学习JNI。。。。 1、用C语言实现八皇后的算法,我们知道八皇后有92种解,每种解是一个数据,对应这当前这组解中八个皇后的位置。 2、在java中通转载 2015-07-27 15:00:24 · 321 阅读 · 0 评论 -
JNI编程指南
原链接:http://www.ibm.com/developerworks/cn/java/j-jni/ 使用 Java Native Interface 的最佳实践原创 2020-04-22 14:54:59 · 258 阅读 · 0 评论 -
JNI/NDK开发指南(十一)
异常简介异常,显而意见就是程序在运行期间没有按照正常的程序逻辑执行,在执行过程当中出现了某种错误,导致程序崩溃。在Java中异常分为运行时异常(RuntimeException)和编译时异常,在程序中有可能运行期间发生异常的逻辑我们会用try…catch…来处理,如果没有处理的话,在运行期间发生异常就会导致程序奔溃。而编译时异常是在编译期间就必须处理的。本章主要介绍运行时异常。 示例1:转载 2017-04-15 12:34:09 · 245 阅读 · 0 评论 -
Android JNI局部引用表溢出
在《JNI/NDK开发指南(十)——JNI局部引用、全局引用和弱全局引用》这篇文章中详细介绍了在JNI中三种引用的使用方式,区别、应用场景和开发注意事项。由于都是理论,看完之后可能印象不够深刻,由其是在开发当中容易出错的地方。所以这篇文章用一个例子说明引用使用不当会造成的问题,以引起大家对这个知识点的重视。首先创建一个Android工程,在主界面放一个文本框和一个按钮,文本框用于接收创建局部引转载 2017-04-15 12:29:58 · 1338 阅读 · 0 评论 -
JNI/NDK开发指南(十)
这篇文章比较偏理论,详细介绍了在编写本地代码时三种引用的使用场景和注意事项。可能看起来有点枯燥,但引用是在JNI中最容易出错的一个点,如果使用不当,容易使程序造成内存溢出,程序崩溃等现象。所以讲得比较细,有些地方看起来可能比较啰嗦,还请轻啪!《Android JNI局部引用表溢出:local reference table overflow (max=512)》这篇文章是一个JNI引用使用不当转载 2017-04-15 12:28:16 · 297 阅读 · 0 评论 -
JNI/NDK开发指南(九)
在前面几章我们学习到了,在Java中声明一个native方法,然后生成本地接口的函数原型声明,再用C/C++实现这些函数,并生成对应平台的动态共享库放到Java程序的类路径下,最后在Java程序中调用声明的native方法就间接的调用到了C/C++编写的函数了,在C/C++中写的程序可以避开JVM的内存开销过大的限制、处理高性能的计算、调用系统服务等功能。同时也学习到了在本地代码中通过JNI提供的转载 2017-04-15 12:23:56 · 325 阅读 · 0 评论 -
JNI/NDK开发指南(八)
在第6章我们学习到了在Native层如何调用Java静态方法和实例方法,其中调用实例方法的示例代码中也提到了调用构造函数来实始化一个对象,但没有详细介绍,一带而过了。还没有阅读过的同学请移步《JNI/NDK开发指南(六)——C/C++访问Java实例方法和静态方法》阅读。这章详细来介绍下初始一个对象的两种方式,以及如何调用子类对象重写的父类实例方法。我们先回过一下,在Java中实例化一个对象和转载 2017-04-15 12:21:22 · 290 阅读 · 0 评论 -
JNI/NDK开发指南(六)
通过前面5章的学习,我们知道了如何通过JNI函数来访问JVM中的基本数据类型、字符串和数组这些数据类型。下一步我们来学习本地代码如何与JVM中任意对象的属性和方法进行交互。比如本地代码调用Java层某个对象的方法或属性,也就是通常我们所说的来自C/C++层本地函数的callback(回调)。这个知识点分2篇文章分别介绍,本篇先介绍方法回调,在第七章中介绍本地代码访问Java的属性。在这之前,先转载 2017-04-15 12:19:06 · 285 阅读 · 0 评论 -
JNI/NDK开发指南(五)
JNI中的数组分为基本类型数组和对象数组,它们的处理方式是不一样的,基本类型数组中的所有元素都是JNI的基本数据类型,可以直接访问。而对象数组中的所有元素是一个类的实例或其它数组的引用,和字符串操作一样,不能直接访问Java传递给JNI层的数组,必须选择合适的JNI函数来访问和设置Java层的数组对象。阅读此文假设你已经了解了JNI与Java数据类型的映射关系,如果还不了解的童鞋,请移步《JNI/转载 2017-04-15 12:17:53 · 258 阅读 · 0 评论 -
Android NDK开发Crash错误定位
在Android开发中,程序Crash分三种情况:未捕获的异常、ANR(Application Not Responding)和闪退(NDK引发错误)。其中未捕获的异常根据logcat打印的堆栈信息很容易定位错误。ANR错误也好查,Android规定,应用与用户进行交互时,如果5秒内没有响应用户的操作,则会引发ANR错误,并弹出一个系统提示框,让用户选择继续等待或立即关闭程序。并会在/data/a转载 2017-04-15 12:12:04 · 293 阅读 · 0 评论 -
JNI/NDK开发指南(四)
从第三章中可以看出JNI中的基本类型和Java中的基本类型都是一一对应的,接下来先看一下JNI的基本类型定义:typedef unsigned char jboolean;typedef unsigned short jchar;typedef short jshort;typedef float jfloat;typedef double转载 2017-04-15 12:03:17 · 245 阅读 · 0 评论 -
JNI/NDK开发指南(三)
当我们在调用一个Java native方法的时候,方法中的参数是如何传递给C/C++本地函数中的呢?Java方法中的参数与C/C++函数中的参数,它们之间是怎么转换的呢?我猜你应该也有相关的疑虑吧,咱们先来看一个例子,还是以HelloWorld为例:HelloWorld.java:package com.study.jnilearn;class MyClass {}public c转载 2017-04-15 12:01:50 · 306 阅读 · 0 评论 -
JNI/NDK开发指南(二)
通过第一篇文章,大家明白了调用native方法之前,首先要调用System.loadLibrary接口加载一个实现了native方法的动态库才能正常访问,否则就会抛出java.lang.UnsatisfiedLinkError异常,找不到XX方法的提示。现在我们想想,在Java中调用某个native方法时,JVM是通过什么方式,能正确的找到动态库中C/C++实现的那个native函数呢?JVM转载 2017-04-15 12:00:19 · 432 阅读 · 0 评论 -
JNI/NDK开发指南(一)
JNI全称是Java Native Interface(Java本地接口)单词首字母的缩写,本地接口就是指用C和C++开发的接口。由于JNI是JVM规范中的一部份,因此可以将我们写的JNI程序在任何实现了JNI规范的Java虚拟机中运行。同时,这个特性使我们可以复用以前用C/C++写的大量代码。开发JNI程序会受到系统环境的限制,因为用C/C++语言写出来的代码或模块,编译过程当中要依赖当前操转载 2017-04-15 11:57:36 · 320 阅读 · 0 评论 -
JNI开发指南
JNI/NDK开发指南(开山篇)相信很多做过Java或Android开发的朋友经常会接触到JNI方面的技术,由其做过Android的朋友,为了应用的安全性,会将一些复杂的逻辑和算法通过本地代码(C或C++)来实现,然后打包成so动态库文件,并提供Java接口供应用层调用,这么做的目的主要就是为了提供应用的安全性,防止被反编译后被不法分子分析应用的逻辑。当然打包成so也不能说转载 2017-04-15 11:55:25 · 290 阅读 · 0 评论 -
JNI资源释放
JNI 编程实现了 native code 和 Java 程序的交互,因此 JNI 代码编程既遵循 native code 编程语言的编程规则,同时也遵守 JNI 编程的文档规范。在内存管理方面,native code 编程语言本身的内存管理机制依然要遵循,同时也要考虑 JNI 编程的内存管理。本章简单概括 JNI 编程中显而易见的内存泄漏。从 native code 编程语言自身的内转载 2017-02-04 14:43:03 · 655 阅读 · 0 评论