Author: geneblue
Blog: https://geneblue.github.io/
本章讲述JNI是如何映射java类型到native C类型的。
Primitive Types
表3-1表明了java基本类型和平台依赖的(machine-dependent)等价native类型。
Author: geneblue
Blog: https://geneblue.github.io/
本章讲述JNI是如何映射java类型到native C类型的。
表3-1表明了java基本类型和平台依赖的(machine-dependent)等价native类型。
Author: geneblue
Blog: https://geneblue.github.io/
本篇主要关注JNI设计中的主要问题。这里讲述的大多数问题都与本地方法有关。Invocation API的介绍在Chapter 5中。
本地代码通过JNI函数可以获取JVM的一些特性。JNI函数可以通过一个接口指针获取。该接口指针是一个双重指针(指向指针的指针)。指针指向了一个指针数组,指针数组中的每一个成员都指向一个接口函数。每一个接口函数都在数组中预定义了一个偏移地址。下图可以表明接口指针的组织关系。
Author: geneblue
Blog: https://geneblue.github.io/
在使用NDK的时候,发现自己对jNI机制并不是很了解,就把官方文档拿来看了看并翻译了一下。官方文档地址看这里。自己也是首次翻译英文资料,有翻译不妥的地方请联系我,我将及时更改。
本篇开始介绍JNI(Java Native Interface)技术。JNI是一种本地编程接口。它允许运行在java VM 中的java代码与使用C/C++或汇编等其它编程语言写成的应用或者库进行交互操作。
JNI机制能够存在的最重要一点在于利用了JVM的基础实现是没有被限制死。因此,JVM的构建者可以增添对JNI的支持而不会影响到VM的其他部分。开发人员在编写完一个版本的native程序或库后就可以在所有支持JNI技术的JVM中运行。
Author: geneblue
Blog: https://geneblue.github.io/
平时写Android程序时遇到的一些错误, 在此记录方便以后查找。
logcat中报错提示如下: java.lang.NoClassDefFoundError: com.google.zxing.EncodeHintType
这个问题是在二维码编码中遇到的但是在代码使用的jar包中明明已经定义了该类,就是提示找不到该类,最后查找别人的解决办法,将jar文件存放在libs文件夹下就顺利解决了,之前我将其存放在了自定义的lib文件夹下。可问题是为什么别的jar文件放在lib下依然可以顺利使用jar中的类呢????????
Author: geneblue
Blog: https://geneblue.github.io/
为了更好了解DEX文件格式,写了个java版的DEX解析器,可以打印出一个dex文件中的字符串,字段和类中调用了哪些方法。具体代码见这里
java文件为Hello.java:
public class Hello {
public int foo(int a, int b) {
return (a + b) * (a - b);
}
public static void main(String[] argc) {
Hello hello = new Hello();
System.out.println(hello.foo(5, 3));
}
}