The quiter you become,the more you are able to hear!

Author: geneblue

Blog: https://geneblue.github.io/

本篇主要关注JNI设计中的主要问题。这里讲述的大多数问题都与本地方法有关。Invocation API的介绍在Chapter 5中。

JNI Interface Functions and Pointers

本地代码通过JNI函数可以获取JVM的一些特性。JNI函数可以通过一个接口指针获取。该接口指针是一个双重指针(指向指针的指针)。指针指向了一个指针数组,指针数组中的每一个成员都指向一个接口函数。每一个接口函数都在数组中预定义了一个偏移地址。下图可以表明接口指针的组织关系。

Read more »

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中运行。

Read more »

Author: geneblue

Blog: https://geneblue.github.io/

平时写Android程序时遇到的一些错误, 在此记录方便以后查找。

类中方法找不到问题

logcat中报错提示如下: java.lang.NoClassDefFoundError: com.google.zxing.EncodeHintType

这个问题是在二维码编码中遇到的但是在代码使用的jar包中明明已经定义了该类,就是提示找不到该类,最后查找别人的解决办法,将jar文件存放在libs文件夹下就顺利解决了,之前我将其存放在了自定义的lib文件夹下。可问题是为什么别的jar文件放在lib下依然可以顺利使用jar中的类呢????????

Read more »

Author: geneblue

Blog: https://geneblue.github.io/

为了更好了解DEX文件格式,写了个java版的DEX解析器,可以打印出一个dex文件中的字符串,字段和类中调用了哪些方法。具体代码见这里

0X01 准备工作

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));
   }
}
Read more »