在安卓JNI开发中,经常会用到javac和javah命令,这2个命令短小精干,常有四两拨千斤之感。
这里用一个简单的例子,演示javac
和javah
的用法。
创建一个项目目录,这儿以~/java_demo2
为例。此目录即为项目的根目录。
1. 创建目录结构
- 包名PackageName我这里设定为
com.yigangfang.demo2
,所以要创建相应的目录结构:
mkdir -p com/yigangfang/demo2
参数-p
的作用是,可以一次创建几个上下级目录。
2. 在目录com/yigangfang/demo2
中新建文件HelloThere.java
内容如下:
package com.yigangfang.demo2;
public class HelloThere {
static {
System.loadLibrary("HelloThere");
}
public static native void hello(String msg);
public static void main(String[] args) {
hello("Hello, there!" );
}
}
3. 生成.class文件
在目录com/yigangfang/demo2
中执行
javac HelloThere.java
会在相同目录下生成一个文件HelloThere.class
4. 设置classpath环境变量
回到项目根目录:
cd ~/java_demo2
设置classpath变量为项目根目录:
set classpath=~/java_demo2
5. 生成头文件
在项目根目录执行:
javah -jni com.yigangfang.demo2.HelloThere
将会在根目录下生成一个头文件:com_yigangfang_demo2_HelloThere.h
内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_yigangfang_demo2_HelloThere */
#ifndef _Included_com_yigangfang_demo2_HelloThere
#define _Included_com_yigangfang_demo2_HelloThere
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_yigangfang_demo2_HelloThere
* Method: hello
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_com_yigangfang_demo2_HelloThere_hello
(JNIEnv *, jclass, jstring);
#ifdef __cplusplus
}
#endif
#endif
网友评论