Android ndk开发 生成与 native 方法对应的头文件
生成与 native 方法对应的头文件
在 Android NDK 开发中,C/C++ 中对应于 Java 方法的函数名应该叫什么是很有讲究的,大致是形式是
Java_包名_类名_方法名
所以 C/C++ 中的函数名不能随便取,必须按照规则来。因为这个函数名很繁琐,手动书写十分容易出错,所以这里需要利用 javah
的命令来生成对应于函数的头文件在头文件中会有对应的 C/C++ 函数名,所以直接复制函数名就可以编写自己的逻辑了
那么接下来就利用 javah
生成自己的头文件,命令格式如下
javah -classpath (搜索类目录) -d (输出目录) (类名)
这里需要强调一下的是这里的搜索类目录,搜索的是这个 Java 类的 .class
文件 ,所以在在执行生成头文件的命令时,需要使用快捷键 ctrl+F9
或者 Android Studio 顶部菜单栏 build -> Make Project,手动生成这个类的 class 文件
生成完 class 文件过后,就可以利用头文件生成对应的头文件了,命令如下:
javah -classpath app\build\intermediates\classes\debug -d ./app/src/main/jni com.innofang.ndkdemo.JniUtil
这里只需要将上面括号类的内容按照自己项目的情况进行修改就可以了。但是,这么长的命令,难道每次添加 native 方法都要自己手动输入生成头文件吗?
在这里可以利用一个小技巧,就是利用 Android Studio 的 External Tools 工具 ,一件生成头文件
File -> Settings 或者 Ctrl+Alt+S
打开设置界面,接着点击 Tools ,找到 External Tool,
点击 +
新建一个 Exteranl Tools
输入图示信息
在 Name 区域输入 Generate Header File
Program : $JDKPath$\bin\javah
Parameters : -classpath $OutputPath$ -d ./app/src/main/jni $FileClass$
Working directory : $ProjectFileDir$
其余的勾选项对照上图即可
然后点击 OK 就完成了
使用时,只需要右击java文件,找到 External Tool ,点击 Generate Header File 即可
切换到 Project 视图,就可以看到在 main 包下多了一个 jni 的文件,里面就是刚刚生成的头文件
Q: 出现类似 错误: 找不到 'com.innofang.ndkdemo.jnituil' 的类文件。
的情况
A:在生成头文件之前要先生成类文件,使用快捷键 ctrl+F9
或者 Android Studio 顶部菜单栏 build -> Make Project