使用javah快速生成本地方法及生成so动态库文件
1、生成包含本地方法的.h文件
如果使用jdk1.6可以直接到bin/classess,在cmd窗口使用如:javah com.lqr.test.MainActivity 命令,即可在bin/classess目录下生成包含本地方法的.h文件。如果使用jdk1.7及以上版本,则要到src目录下操作以上命令,会在src目录下生成包含本地方法的.h文件,原因是1.7后会检查类的关联。
2、得到本地方法:打开生成好的.h文件,把相应的本地方法复制到自己的xxx.c文件中,注意要实现该方法,否则会报方法找不到这种错误。
报错代码如下:
Caused by: java.lang.UnsatisfiedLinkError: Native method not found: com.lqr.test.MainActivity.result_from_c:(II)I
3、到jni目录下,使用ndk-build命令即可在lib目录下生成对应处理器平台的so动态库文件。说明:在jni中,下划线"_"表示层级结构,所以如果本地方法名尽量避免使用下划线。
如果一定要用到下划线,解决方法有:
(1)用javah直接生成对应本地方法,jdk会自动帮我们生成正确无误的方法名。
(2)简单粗暴的在方法名的每个下划线后面写上一个数字1即可,如 result_from_c 对应是 result_1from_1c