Android Jni(Java Native Interface)笔记

首先记录一个问题,关于如何用javah生成头文件的。

总是提示“无法访问android.app.Activity”,网上查了说是要指定android.jar的位置,可以在classpath里指定,也可以在命令中直接指定。在windows下两种都试了,都不行。于是装ubuntu。装ubuntu挺麻烦,一开始想用wubi在windows下安装,失败。后来用了某个启动器在硬盘安装。还有分配swap,根目录/,home目录的大小。。真是难倒外行人。安装好了之后试了一下,好像还是不行。。

再百度。在csdn上找到答案。按照链接里11楼的说法,要这么写:

javah -classpath bin/classes -bootclasspath /home/larry/adt-bundle-linux-x86-20140702/sdk/platforms/android-20/android.jar -d jni com.example.hellojni.MainActivity

-classpath后面跟着的bin/classes指定的就是class的path,这里我是创建了一个HelloJni的项目,包名是com.example.hellojni,里面有一个Activity是MainActivity,我是在Hellojni目录下执行上面的命令的,所以要跟bin/classes指定类目录;

-bootclasspath我猜想是引导后面的android.jar这一参数用的。之前搜了很多答案都没有提到这个。大多数是直接用这个android.jar的路径后面上一个冒号,然后就跟了类的地址。

-d jni代表把生成的h文件放到根目录的jni文件夹里面。

另外一种方法,按照12楼的说法,我还试了把android.jar添加到classpath里去,不行,还是提示无法访问android.app.Activity,可能是我加classpath的方式不对?不得而知,不去整了。

图在这里:

下面重新开始学习JNI。。

----------------------------------------------------------------------------------

找到一篇这个人的笔记,觉得写得很好,就按照他的来试试吧。

Android Jni(Java Native Interface)笔记

时间: 2024-10-11 15:22:15

Android Jni(Java Native Interface)笔记的相关文章

JNI(Java Native Interface)_02

JNI(Java Native Interface)_02 ndk开发常用术语 观察jni.h文件的c语言细节: 交叉编译 在一种平台下编译出能够在另外一种平台下运行二进制代码 平台(1,操作系统:windows linux mac os solaris 2,cpu x86 arm mips) 交叉编译原理 源代码--->编译---->动态库(.dll,.so)-->目标平台运行 windows 源代码编译成 linux,arm下的可执行文件 ndk开发工具 ndk (native de

JNI(Java Native Interface)_03

JNI(Java Native Interface)_03 c/c++区别 jni调用: * c: jstring str = (*env)->NewStringUTF(env,getHello()); * c++:jstring str = (env)->NewStringUTF(getHello()); * 区别如下: * 1,c++中把(*env) 的\*号去掉 * 2,调用函数的时候吧参数env去掉 * 3,c中是结构体 c++是类 * 4,c结构体中的函数指针 c++类的成员函数(c

JNI(Java Native Interface)_01

JNI(Java Native Interface)_01 习惯 1.技术是什么? 2.为什么要使用这个技术? 3.怎么使用? 4.实际怎么应用? jni 是什么 * jni (java native interface) * 两张不同编程语言之间通讯 java: 特点:一次编写,到处运行 java源代码--->.class--->JVM--->os c/c++ 源代码--->os(01) java(中国人)---JNI---c/c++(日本人) jni:两种不同编程语言之间的通讯

Java固有接口JNI(Java Native Interface)之HelloWorld

1.编写java程序 public class HelloWorld { public native void displayHelloWorld();//所有native关键词修饰的都是对本地的声明 static { System.loadLibrary("hello");//载入本地库 } public static void main(String[] args) { new HelloWorld().displayHelloWorld(); } } 2.编译 javac Hel

Mac下Java JNI (java native interface)调C

1.编写带有native声明的方法的Java类 2.使用javac命令编译编写的Java类 3.使用java -jni className 来生成后缀名为.h的头文件 4.使用其他语言(C.C++)实现本地方法 5.将本地方法编写的文件生成动态链接库 一代码:(不要带包路径) /** * native-0study * * @author xuedui.zhao * @create 2018-04-23 */public class HelloWorld { public native void

android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )

JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类库无法满足要求,且在数学运算,实时渲染的游戏上,音视频处理等方面上与C/C++相比效率稍低. 然后,Java语言无法直接操作硬件,C/C++代码不仅能操作硬件而且还能发挥硬件最佳性能. 接着,使用Java调用本地的C/C++代码所写的库,省去了重复开发的麻烦,并且可以利用很多开源的库提高程序效率.

java native interface JNI 调用Java方法

在上一篇文章中介绍了JNI,以及java调用JNI,这篇讲一下 JNI调用java方法. 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函数.JNI通过ID识别域和方法,一个域或方法的ID是任何处理域和方法的函数的必须参数. 下表列出了用以得到静态(static)和实例(instance)的域与方法的JNI函数.每个函数接受(作为参数)域或方法的类,它们的名称,符号和它们对

Java Programming Tutorial Java Native Interface (JNI)

1.  Introduction At times, it is necessary to use native codes (C/C++) to overcome the memory management and performance constraints in Java. Java supports native codes via the Java Native Interface (JNI). JNI is difficult, as it involves two languag

Android(java)学习笔记255:JNI之JNI概念

1. JNI是什么? java native interface (java本机接口) 比如方法声明: public final native Class<?>  getClass():   (来自源码Object.java) 上面方法没有方法体,但是它不是抽象方法,它是具体方法,因为它加了native修饰了,说明这个方法是使用底层C实现的. java提供JNI这个接口规范,可以去调用其他程序语言编写的功能模块(不必要利用java重新开发),可以调用C/C++,或者VB等等. 2.  为什么要