javah 找不到Activity类

其实和上一篇问题一样,仍然是classpath路径的问题;创建路径:com.example

public class JniTest extends Activity{


    public static native String hello_jni();

	
	public static void main(String[] args){
		System.out.printf("hello-jni");
		
	}
}

解决方案:

进入 你的项目\app\build\intermediates\classes\debug  通过Android studio进行Build-》Make Project进行生成.class文件

在Terminal进入以上的目录,通过javah -jni com.example.JniTest 如果找不到这个类,参考上一篇文章

找到类之后,会发现提示找不到android.app.Activity类,这是因为classpath没有配置到环境变量中,教大家写一种完整的javah方案,好好看看classpath路径,或许就明白了

 javah -classpath 你的项目路径\app\build\intermediates\classes\debug;你的Androidsdk路径\platforms\android-25\android.jar -jni com.example.JniTest       

上面这段dos命令大家按照自己的实际情况进行写,(如:你的项目路径,是你的项目存在你的硬盘中的绝对路径),android-25,那个Android版本都行

原理:其实就是java在编译class文件中会进行对其中导入的包(android.app.Activity)进行按照环境变量和设置的进行查找,如果查找不到,自然报错

所以,只需要把你的sdk中的编译android的android.jar配置到环境变量中,当然前面的路径,如果你不嫌麻烦,那就把所有工程的目录配置到classpath中,也可以使用DOS中set classpath=你的项目路径\app\build\intermediates\classes\debug 你可能在很多解决方案中看到classpath后面有'.',这个点千万不要点,不知道哪个大哥开始的这个毛病。


好,刚开始写CSDN,由于经验不足,写的文章可能有点bug,如果有什么问题,欢迎留言,看到后回复,下一篇给大家点更方便使用Android studio和ndk开发的干货


自学软硬嵌入式的可加QQ群:371776285

`javah` 是一个用于生成 C 头文件和源文件的 Java 命令行工具,它可以用来创建本地方法接口的头文件。这些头文件和源文件通常用于与 C 或 C++ 代码集成,以便从 Java 代码调用本地(native)方法。不过需要注意的是,随着 JDK 的更新,`javah` 工具已被弃用,并建议使用 `javac -h` 命令替代。以下是使用 `javah`(或 `javac -h`)生成头文件的步骤: 1. 编写 Java :首先,你需要在 Java 中编写,并使用 `native` 关键字声明那些将在本地代码中实现的方法。 2. 编译 Java :使用 `javac` 编译器编译 Java ,确保包含 `native` 方法的没有编译错误。 3. 生成头文件:使用 `javah` 或 `javac -h` 命令生成 C 头文件。命令格式如下: ``` javah -jni FullyQualifiedClassName ``` 或者 ``` javac -h . FullyQualifiedClassName ``` 这里的 `FullyQualifiedClassName` 是包含 `native` 方法的 Java 的完全限定名。 4. 编写本地方法的实现:根据生成的头文件,使用 C 或 C++ 编写本地方法的实现代码。 5. 编译本地代码:将本地代码编译成动态链接库(DLL 在 Windows 上,或者共享库 `.so` 在 Unix/Linux 上)。 6. 加载动态链接库:在 Java 程序中,使用 `System.loadLibrary("libraryName")` 方法加载编译好的动态链接库。 7. 运行 Java 程序:执行包含本地方法调用的 Java 程序,Java 虚拟机会自动调用相应的本地方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值