您的位置:首页 > 编程语言 > Java开发

用javah生成jni本地方法的头文件

2016-06-05 17:57 363 查看

前言

今天写这个总结,让我重做了3遍,我内心是崩溃的.

我试出一个CSDN markdown编辑器的一个BUG.

BUG触发后,CSDN MarkDown博客编辑器会挂掉,网页失去响应. 重新打开编辑器,写博客也会挂掉,一直显示“等待博客站点的响应.

重现方法 : 向代码区贴一段dir /s/b的命令行窗口全选结果. 在我的计算机上,不管是chrome或者360浏览器,都有这个问题,是不是测试的时候没测试到呢?

就贴图了, 不敢再贴结果.



这个图是用eclipse编译android工程后,生成的class文件.

试验总结

建立一个android工程, 在MainActivity写上一个jni本地方法定义.

重新编译工程.

在工程的src目录中,建立一个cmd文件.

javah -classpath "D:\Android\adt-bundle-windows-x86_64-20140702\sdk\platforms\android-20\android.jar;D:\AndroidWorkspace\TestJni\bin\classes" -jni

com.ls.testjni.MainActivity


打开命令行窗口,进入src目录,运行此cmd, 生成头文件.

D:\AndroidWorkspace\TestJni\src>dir
驱动器 D 中的卷是 dat
卷的序列号是 66A6-68F9

D:\AndroidWorkspace\TestJni\src 的目录

2016/06/05  17:44    <DIR>          .
2016/06/05  17:44    <DIR>          ..
2016/06/05  16:16    <DIR>          com
2016/06/05  16:26               176 make_native_h.cmd
1 个文件            176 字节
3 个目录 864,802,648,064 可用字节

D:\AndroidWorkspace\TestJni\src>make_native_h.cmd

D:\AndroidWorkspace\TestJni\src>javah -classpath "D:\Android\adt-bundle-windows-x86_64-20140702\sdk\platforms\android-20
\android.jar;D:\AndroidWorkspace\TestJni\bin\classes" -jni com.ls.testjni.MainActivity

D:\AndroidWorkspace\TestJni\src>dir
驱动器 D 中的卷是 dat
卷的序列号是 66A6-68F9

D:\AndroidWorkspace\TestJni\src 的目录

2016/06/05  17:44    <DIR>          .
2016/06/05  17:44    <DIR>          ..
2016/06/05  16:16    <DIR>          com
2016/06/05  17:44             3,414 com_ls_testjni_MainActivity.h
2016/06/05  16:26               176 make_native_h.cmd
2 个文件          3,590 字节
3 个目录 864,802,643,968 可用字节

D:\AndroidWorkspace\TestJni\src>


打开com_ls_testjni_MainActivity.h, 可以看到jni本地接口已经生成了

/*
* Class:     com_ls_testjni_MainActivity
* Method:    native_fn_help
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_ls_testjni_MainActivity_native_1fn_1help
(JNIEnv *, jclass);


备注-平台SDK版本

工程清单中指定的平台目标版本,应该是android-sdk中已经存在的SDK版本

我这选的是API-15, 对应android-v4.0.3

android.jar路径也要是对应平台中的android.jar

D:\Android\adt-bundle-windows-x86_64-20140702\sdk\platforms\android-20\android.jar

javah -classpath 是全路径名称, 如果编译时,说那个类文件找不到,继续加在-classpath后面,多个全路径之间用;符号隔开

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ls.testjni"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>


D:\Android\adt-bundle-windows-x86_64-20140702\sdk\platforms>dir
驱动器 D 中的卷是 dat
卷的序列号是 66A6-68F9

D:\Android\adt-bundle-windows-x86_64-20140702\sdk\platforms 的目录

2016/05/10  18:47    <DIR>          .
2016/05/10  18:47    <DIR>          ..
2016/05/10  18:42    <DIR>          android-10
2016/05/10  18:37    <DIR>          android-15
2016/05/10  18:34    <DIR>          android-16
2016/05/10  18:31    <DIR>          android-17
2016/05/10  18:28    <DIR>          android-18
2016/05/10  18:24    <DIR>          android-19
2016/05/10  18:19    <DIR>          android-20
2016/05/10  18:15    <DIR>          android-22
2016/05/10  18:11    <DIR>          android-23
2016/05/10  18:47    <DIR>          android-8
0 个文件              0 字节
12 个目录 864,802,562,048 可用字节

D:\Android\adt-bundle-windows-x86_64-20140702\sdk\platforms>


备注-类名

类名要按工程中实际情况来填写



类名为 包名+类名

com.ls.testjni.MainActivity
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: