当前位置:首页 > 开发 > IT生活 > 正文

windows下自动生成文件夹下所有JNI所需的.h头文件

发表于: 2011-12-26   作者:cherishLC   来源:转载   浏览次数:
摘要: 以下程序打包成jar后在生成的.class文件的根路径(如elcipse工程的bin文件夹)下运行即可!! 生成的.h文件放在当前目录的h文件夹下 import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; i
以下程序打包成jar后在生成的.class文件的根路径(如elcipse工程的bin文件夹)下运行即可!!
生成的.h文件放在当前目录的h文件夹下
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class GenerateHFile {
	static String suffix = ".class";
	static String outputFolder = ".\\h\\";//输出文件夹

	/**生成以classRoot为根文件夹的类的JNI用的.h文件,其中folder为当前路径,他应为classRoot的一个子路径
	 * @param folder 当前文件夹
	 * @param classRoot 类文件的根路径
	 */
	static void generateHFile(File folder, File classRoot) {
		File fs[] = folder.listFiles();
		for (File file : fs) {
			if (file.isDirectory()) {
				generateHFile(file, classRoot);
			} else if (file.getName().endsWith(suffix)) {
				String exe = "javah";
				String arg = classRoot.getAbsolutePath();
				String tmp = file.getAbsolutePath();
				tmp = tmp.substring(arg.length() + 1,
						tmp.length() - suffix.length());
				tmp = tmp.replace(File.separator.charAt(0), '.');
				String cmds[] = { exe, "-d", outputFolder,"-classpath",arg, tmp };
				try {
					Process p = Runtime.getRuntime().exec(cmds);
					p.waitFor();
				} catch (IOException e) {
					e.printStackTrace();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

				System.out.println(arg);
			}
		}
	}

	static String prefix = "JNIEXPORT";

	/**
	 * 清除不包含native方法的h文件,根据文件中是否含有"JNIEXPORT"来进行判断
	 */
	static void clean() {
		File[] fs = new File(outputFolder).listFiles();
		Label: for (int i = 0; i < fs.length; i++) {

			try {
				BufferedReader br = new BufferedReader(new FileReader(fs[i]));

				while (br.ready()) {
					String s = br.readLine();
					if (s.startsWith(prefix)) {
						continue Label;
					}
				}
				br.close();
				System.out.print("has deleted successfully: " + fs[i]);
				boolean b = fs[i].delete();
				System.out.println(" : " + b);

			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		File dir = new File(".");
		new File(outputFolder).mkdirs();
		generateHFile(dir, dir);
		clean();

	}
}

windows下自动生成文件夹下所有JNI所需的.h头文件

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
jni开发接口头文件的定义很重要,如果频繁的修改上层的接口,一键生成/更新jni头文件就显得尤为快捷.
jni开发接口头文件的定义很重要,如果频繁的修改上层的接口,一键生成/更新jni头文件就显得尤为快捷.
在JNI开发中,首先要将建立的anroid类编译成.h文件,编译用到命令javah,由于第一次用,以前对java
在JNI开发中,首先要将建立的anroid类编译成.h文件,编译用到命令javah,由于第一次用,以前对java
首先确保java的环境变量配置好了。 1:打开cmd 进入doc命令窗口: 进入class所在目录,我的class是在F
在用JNI时需要为C或C++代码生成头文件,JNI有它一套固定的格式,可以利用eclipse插件使用自动进行生
本文介绍两种利用javah命令生成jni头文件的方法,第一种为大众所知的javah命令,第二种为整合javah
0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo
本文介绍两种利用javah命令生成jni头文件的方法,第一种为大众所知的javah命令,第二种为整合javah
最近要用到Android NDK,调用本地代码。就学了下Android NDK,顺便与大家分享。下面以一个具体的实
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号