Android进阶

Java JNI中javac和javah的使用

2018-03-31  本文已影响926人  汶水一方

在安卓JNI开发中,经常会用到javac和javah命令,这2个命令短小精干,常有四两拨千斤之感。

这里用一个简单的例子,演示javacjavah的用法。

创建一个项目目录,这儿以~/java_demo2为例。此目录即为项目的根目录。

1. 创建目录结构

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       
上一篇下一篇

猜你喜欢

热点阅读