1、 找不到类文件 或 Not a valid class name
android studio的terminal终端出了问题,没法使用,然后到文件目录用cmd adb来编译.h文件。
在文件系统中打开,比如 我要编译的文件是FFmpegUtils.java
它的绝对路径是D:\AndroidDemos\FFmpegDemo\app\src\main\java\com\wyl\ffmpegdemo\FFmpegUtils.java
(小白:终端必须要锁定到目标文件的绝对路径出,D:\AndroidDemos\FFmpegDemo\app\src\main\java\com\wyl\ffmpegdemo
,如下面执行命令,否则是不会生成对应的h文件,我一开始定位的是src\main\java目录,执行命令后没有生成,也没有报错。后面知道是可以自定义生成路径,以及生成的h文件名字)
执行命令:
D:\AndroidDemos\FFmpegDemo\app\src\main\java\com\wyl\ffmpegdemo>
javah -classpath "D:\AndroidDemos\FFmpegDemo\app\src\main\java" com.wyl.ffmpegdemo.FFmpegUtils
首先要指定 编译文件的路径 -classpath
命令后是 要编译的类的除开包名的父级目录D:\AndroidDemos\FFmpegDemo\app\src\main\java
并且需要用引号,如果是路径包含空格,得用双引号。
com.wyl.ffmpegdemo
是目标文件FFmpegUtils
的包名,这里的包名写法就是文件里package对应的写法,不要写成xxx/xxx/xxx的
能够确认的是 -classpath对应的路径+ 包名.类名 就是目标java文件的绝对路径
一般的javah命令编译h文件就是这样了
找不到类文件或Not a valid class name,要么是没有指定对classpath,要么就是类名前没有加上包名
2、编码GBK的不可映射字符
当java文件里面含有中文时,比如一些注释,执行javah会报如下错误:
错误: 编码GBK的不可映射字符
错误: 编码GBK的不可映射字符
错误: 编码GBK的不可映射字符
错误: 编码GBK的不可映射字符
解决办法:
在执行的命令里添加上-jni -encoding UTF-8
如:
D:\AndroidDemos\FFmpegDemo\app\src\main\java\com\wyl\ffmpegdemo>
javah -jni -encoding UTF-8 -classpath "D:\AndroidDemos\FFmpegDemo\app\src\main\java" com.wyl.ffmpegdemo.FFmpegUtils
注意该指令要写在-classpath前面。