【JNI编程】使用javah命令生成头文件报错的解决方案

异常信息:

提示找不到某个类(要进行编译的类)

产生异常的开发环境:

jdk7.0

ndk版本:

android-ndk-r7b

解决方案:

在环境变量classpath中添加android.jar这个文件的目录

如:E:\eclipse\android-sdks\platforms\android-8\android.jar

问题描述:

刚开始研究JNI,然后让这个问题折腾了一上午,使用javah来生成java的class文件没问题,但是生成包含android特有的类库的class文件就出错,说是找不到某个类(我的是找不到Activity这个类),然后配置好环境变量之后,问题解决。之前的JNI开发,不需要配置这个环境变量,应该是新版本才出现的问题。

javah命令简单介绍

F:\workspace\Jni\bin\classes>javah com.example.jni.MainActivity

javah命令主要用于jni编程中,生成本地类方法的头文件

在上面的语句中,我们定位到classes文件夹,这个文件夹用于存放编译好的class文件,然后我们把输入<package>+类名就可以生成相应类的native方法的头文件声明。要注意的是,这样生成的.h文件是和classes文件夹的子目录下。

我们在进行JNI编程的时候,一般在项目的根目录下面建立一个jni的文件夹,用于存放我们的c文件,h文件以及mk文件,那么如果我们想生成的h文件直接在jni文件夹下面,应该怎么操作呢?

我们使用下面的命令即可

F:\workspace\Jni\bin\classes>javah -d ../../jni com.example.jni.MainActivity

和第一条指令相比,多了-d ../../jni,-d的意思是创建一个文件夹,而../../jni的意思就是在当前目录的父目录的父目录下面创建一个jni文件夹,而classes的父目录的父目录就是项目的根目录,所以这样就可以直接在我们的jni文件夹下面生成我们需要的h文件

【JNI编程】使用javah命令生成头文件报错的解决方案

时间: 2024-11-10 12:39:23

【JNI编程】使用javah命令生成头文件报错的解决方案的相关文章

命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法

在学习NDK中,当我在项目的bin/classes目录下使用javah命令生成头文件时,出现了“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”这个问题,如下 跳转到项目的src目录下使用javah命令,而不是在项目的bin/classes目录下使用javah命令即可! 无法访问android.app.Activity是说明没有引入android.jar包可以看看java -h里面的具体说明.其中有一个-bootclasspath

itext生成PDF文件报错“Font &#39;STSong-Light&#39; with &#39;UniGB-UCS2-H&#39; is not recognized.”

最近需要写一个抽取表结构的工具,类似于powerdesigner中的表图,其中有一步用到了itext这个第三方jar包来生成pdf文件,碰到了一个问题,记录于此. 问题描述: 工程使用maven构建,pom.xml中对于jar包的定义如下: <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</vers

MyEclipse导入jquery-1.8.0.min.js等文件报错的解决方案

MyEclipse导入jquery-1.8.0.min.js等文件报错的解决方案 版权声明:本文为博主原创文章,未经博主允许不得转载. MyEclipse导入jQuery-1.8.0.min.js等文件的时候有时候会报了一堆missing semicolon的错误.怎么解决这个报错呢?方法如下: 1.选中报错的jquery文件例如“jquery-1.8.0.min.js”. 2.右键选择 MyEclipse-->Exclude From Validation . 3.再右键选择 MyEclips

在Android工程中加入AIDL文件时,gen目录生成的文件报错-问题解决

from://http://blog.csdn.net/watt520/article/details/10099047 今天在弄清除缓存的东东,按照网上别人的方法,创建了一个AIDL文件,这个时候发现gen目录下自动生成的java文件报错了,内容是里面的一些方法要去掉override,但是去掉之后还是报错,所以我想应该不是要去掉override..于是又四处寻找问题解决办法,最终看到某某大神说和JDK版本有关系,我表示很无语,不过,我试着把properities->java compiler里

linux系统unzip文件报错的解决方案

data.zip文件有4G多,解压的时候出问题了. Archive:  data.zip End-of-central-directorysignature not found.  Either thisfile is not a zipfile, or itconstitutes one disk of a multi-partarchive.  In the latter case the centraldirectory and zipfile comment will be found

worker中加载本地文件报错的解决方案

如果在一个swf的主线程中加载文件时,报安全沙箱的错误, 网上有诸多的解决方案.但是如果在一个worker中加载本地文件报类似如下的错误: *** 安全沙箱冲突 *** SecurityError: Error #2148 不能访问本地资源. 网上给出的方案几乎都不能有效的解决问题, 之所以说几乎, 是因为如果以后读者搜到这篇文章时, 有效的解决方案就在这里. 即在本地架设一个http资源服务器, 加载的时候不要用本地地址作为加载路径,而是使用http 地址作为加载地址即可正确加载.

[JNI开发]使用javah命令生成.h的头文件

第一步:进入对应的.java目录 javac xxx.java 生成对应的xxx.class文件 第二步:退回到/java目录 javah -classpath . -jni 包名.类名 原文地址:https://www.cnblogs.com/lx17746071609/p/11896813.html

webservice生成客户端文件报错

E:\soft\Java\JDK1.8\bin\java.exe -classpath E:\code\test\out\production\test;E:\code\test\lib\ha-api.jar;E:\code\test\lib\javax.annotation.jar;E:\code\test\lib\gmbal-api-only.jar;E:\code\test\lib\FastInoset.jar;E:\code\test\lib\jaxb-api.jar;E:\code\t

WINDOWS下cocostudio头文件报错解决办法

感谢这个作者的参考:http://www.itnose.net/detail/6099109.html Cocos2d-x 3.2 学习日志,移植出现error C1083: 无法打开包括文件:"extensions/ExtensionMacros.h": No such file 或者 无法打开包括文件:"cocostudio/cocostudio.h": No such file 今天在做Mac下3.2移植到windows平台的时候候导入扩展包出现了错误,经过多