美文网首页Android进阶
Java JNI中javac和javah的使用

Java JNI中javac和javah的使用

作者: 汶水一方 | 来源:发表于2018-03-31 13:24 被阅读926次

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

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

    创建一个项目目录,这儿以~/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       
    

    相关文章

      网友评论

        本文标题:Java JNI中javac和javah的使用

        本文链接:https://www.haomeiwen.com/subject/jaygcftx.html