`

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

    博客分类:
  • Java
阅读更多
以下程序打包成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();

	}
}
分享到:
评论

相关推荐

    android_jni操作指南.pdf

    - 通过 `javah` 命令生成 `.h` 头文件。 2. **使用 C/C++ 实现本地方法**: - 在工程的根目录下创建 `jni` 文件夹。 - 创建 `.c` 文件以实现 `.h` 文件中定义的本地方法。 3. **生成动态链接库 .so 文件**: - ...

    Eclipse里Android JNI的开发方法

    - **头文件生成**:使用`javah`命令自动生成所需的C/C++头文件。 - **Makefile配置**:通过编写`Android.mk`文件配置编译规则,确保正确生成`.so`库。 - **调试与运行**:完成编译后,通过Eclipse运行应用进行调试和...

    android jni开发指南

    - 使用 `javah` 命令生成相应的 `.h` 头文件。 2. **实现本地方法** - 在项目的 `jni` 文件夹下创建对应的 `.c` 或 `.cpp` 文件,实现 Java 类中声明的本地方法。 - 示例代码如下: ```c #include ...

    Android SDK-NDK-JNI的介绍

    注意需要包含 `jni.h` 和之前生成的 `HelloWorld.h` 头文件,并且函数名必须与生成的签名一致。 4. **编译本地库**: 在 Windows 下,可以使用 VC 的 `cl` 命令进行编译。 ```sh cl -I%JAVA_HOME%\include -I%...

    android jni锅炉压力测试

    1. **JNI函数声明**:使用`javah`命令自动生成的JNI头文件(如`NDKtestJNI.h`),包含了Java类中所有声明为native的方法的C/C++函数原型。例如,你可能会看到一个名为`JNIEXPORT void JNICALL Java_...

    Android利用.c文件生成So库

    创建对应的JNI头文件,通常命名为`my_function.h`,它将定义Java可以调用的C函数原型。在Android Studio中,可以使用`javah`命令自动生成,或者直接手动编写。例如: ```c /* DO NOT EDIT THIS FILE - it is ...

    Android studio配置创建JNI 安卓工程

    - 这样就会在`app/src/main/`目录下生成一个`jni`文件夹。 ##### 4.3 配置相关文件 - **4.3.1 配置`app`下的`build.gradle`文件** 确保`ndk`块位于`defaultConfig`内部,参照以下示例进行配置: ```groovy ...

    android-ndk初学,一个简单实例实现

    这将生成一个`.h`文件,该文件包含了C/C++代码所需的Java类和方法的声明。 6. **拷贝头文件**:将生成的头文件移动到`jni`文件夹下,这样C/C++编译器就知道需要实现哪些函数。 7. **构建原生库**:编辑`Android.mk...

    jni_demo学习样例

    这个"jni_demo学习样例"是一个用于教学和实践的资源包,包含了学习JNI开发所需的基础元素。 首先,我们来看"使用eclipse直接生成so文件.pdf",这可能是一个指南,详细解释了如何在Eclipse集成开发环境中配置和构建...

    JDK路径下各个文件夹的作用.pdf

    `jre` 文件夹代表 Java 运行时环境 (Java Runtime Environment),它包含了运行 Java 程序所需的所有库文件和工具。与 `JDK` 不同的是,`jre` 不包含编译工具和其他开发工具,只用于运行已编译好的 Java 程序。 ####...

    是男人就下100层——BOX2D版 JNI代码

    这个头文件包含了方法的原型和JNI函数调用所需的类型转换。 3. **C++代码实现**:在生成的头文件中,我们可以编写具体的C++实现,完成本地方法的功能。在本例中,这可能包括初始化Box2D世界,创建物理对象,处理...

    libwebp-0.4.2-windows-x64.zip

    - 解压zip文件:首先,你需要将"libwebp-0.4.2-windows-x64.zip"解压到本地文件夹,得到所需的库文件。 - 配置环境:在Java项目中,确保正确设置库路径,并将相应的.dll文件添加到系统的PATH环境变量。 - 编写...

    使用JNA替代JNI调用DLL,并解决内存溢出问题

    例如,如果开放平台提供了C/C++开发的二进制数据解析服务,且给出了相应的.h头文件,那么在Java中直接调用并解析这些数据可能会相当复杂且效率不高。 #### 解决方案概述 为了解决上述问题,一种常见的策略是请求C++...

    centos-java-gdal.zip

    `centos-java-gdal.zip`文件包含了完成这一过程所需的所有步骤和资源。这个压缩包很可能是为了解决Java在CentOS系统上与GDAL库的集成问题,使得Java代码可以直接调用GDAL的函数,从而提高性能和效率。 GDAL是一个...

    Android开发手记一_NDK编程实例

    最后,根据操作系统选择合适的方式来选择所需的Android Platform和其他组件。在Windows系统下,可以运行SDKSetup.exe;在Linux系统下,则需要运行位于tools目录下的`android`命令。 完成上述步骤后,便可以在...

    Windows下使用NDK编译ISP效果库文件-公开1

    NDK 是一套用于Android平台的交叉编译工具集,它包括了编译、链接以及生成动态或静态库所需的各种工具。在Windows下配置NDK,首先需要下载适用于Windows的NDK版本,如NDK r19c或更高版本。解压后,将NDK路径添加到...

    openjdk-21-windows-x64-bin.zip

    5. **lib** 目录:包含了运行Java应用程序所需的库文件,如类库(rt.jar)、JVM库(jli.dll)和其他辅助工具。 6. **legal** 目录:存放了关于软件许可的法律文件,确保合规性。 7. **man** 目录(如果存在):...

    Android Studio&ndk开发感受

    最后,在Android Studio中右击jni文件夹执行ndk-build命令,即可生成所需的.so文件。如果在构建过程中遇到任何问题,可以通过查看logcat中的信息来诊断错误原因,进而解决问题。最后,通过运行应用来测试native方法...

    jdk-8u261-windows-x64.rar

    这个压缩文件包含了开发和运行Java应用程序所需的所有组件。 【描述】中连续三次提及"jdk-8u261-windows-x64",暗示了这是关于Java 8 Update 261的重点讨论,可能是在强调其重要性或确保用户了解这个特定版本。 ...

    NDK开发的简单实例(JNI及Android的C组件实现)

    基于NDK TOOL的动态库实现,包含JNI调用、动态库的编译。 1、编译本地调用的JAVA类 2、使用javah从JAVA类中转换成相应的头文件(已有...3、实现相对应的*.c并调用C组件(在jni文件夹下) 3、使用C实现所需功能的C组件

Global site tag (gtag.js) - Google Analytics