总共有三种方式生成Jni头文件,但归根结底只有一种,只是操作方法不一样,我在这里做一下记录,方便下次使用。
创新互联是一家专业从事网站建设、网络营销、重庆小程序开发公司、网站运营为一体的建站企业;在网站建设告别千篇一律,告别似曾相识,这一次我们重新定义网站建设,让您的网站别具一格。成都响应式网站建设公司,实现全网营销!一站适应多终端,一样的建站,不一样的体验!
1.1
1.利用Android Studio的Terminal,进入你自己的Android工程文件的app/src/main目录,例如(D:\Users\AndroidStudio\Application\app\src\main)
在Terminal中输入命令
cd app\src\main
这样就进入到了main目录,可以使用dir命令查看当前目录有哪些文件
总共有三种方式生成Jni头文件
2. 在Terminal中输入命令
javah -d jni -jni -classpath ..\..\build\intermediates\classes\debug com.example.lenovo.application.JniClass
解释:
-ddir 输出目录,后面跟上要生成的目录名
-jni 生成Jni样式的标头文件
-classpathpath 指定加载类的路径,后面跟上你要生成头文件的这个类的路径,例如:
..\..\..\build\intermediates\classes\debug(这个是类所在的路径)
com.example.lenovo.application.JniClass(类的包名)
注意,要生成.class文件,要Make Project
3.如果前面没有出错的话,就能看到jni文件和生成的头文件
其实jni目录可以不用命令生成,Android Studio已经为我们准备好了。
这样就能快速的生成jni目录了。
然后在Terminal中进入到该目录,输入命令
cd app\src\main\jni
在执行如下命令
javah -d jni -jni -classpath ..\..\build\intermediates\classes\debug com.example.lenovo.application.JniClass
这样也能生成头文件
利用Windows的cmd生成jni头文件
1.进入到你自己Android工程目录下的app\build\intermediates\classes\debug
2.然后Shift加鼠标右键,点击红色方框的内容
3.出现cmd命令行,输入如下命令
javah -jni com.example.lenovo.application.JniClass
4.会在当前目录生成*.h头文件,把它拷贝进jni目录就可以了。
jni目录可以按照上面的方法创建
至此,生成jni头文件的三种方法讲解完毕。
Android中JNI是编译so库的源代码,编译成功后会生成SO库,android中最终是使用SO库的。
1.android的NDK开发需要在linux下进行: 因为需要把C/C++编写的代码生成能在arm上运行的.so文件,这就需要用到交叉编译环境,而交叉编译需要在linux系统下才能完成。
2.安装android-ndk开发包,这个开发包可以在google android 官网下载: 通过这个开发包的工具才能将android jni 的C/C++的代码编译成库
3.android应用程序开发环境: 包括eclipse、java、 android sdk、 adt等。
NDK编译步骤:
1.选择 ndk 自带的例子 hello-jni ,我的位于E:\android-ndk-r5\samples\hello-jni( 根据具体的安装位置而定 ) 。
2.运行 cygwin ,输入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,进入到 E:\android-ndk-r5\samples\hello-jni 目录。
3.输入 $NDK/ndk-build ,执行成功后,它会自动生成一个 libs 目录,把编译生成的 .so 文件放在里面。 ($NDK是调用我们之前配置好的环境变量, ndk-build 是调用 ndk 的编译程序 )
4.此时去 hello-jni 的 libs 目录下看有没有生成的 .so 文件,如果有,ndk 就运行正常啦。
Android NDK Jni 开发C和C++的区别
JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java 虚拟机实现下。 标准的java类库可能不支持你的程序所需的特性。 JNI·或许你已经有了一个用其他语言写成的库或程序,而你希望在java程序中使用它。你可能需要用底层语言实现一个小型的时间敏感代码,比如汇编,然后在你的java程序中调用这些功能。 NDK是Google公司推出的帮助Android开发者通过C/C++本地语言编写应用的开发包,包含了C/C++的头文件、库文件、说明文档和示例代码,我们可以理解为Windows Platform SDK一样,是纯C/C++编写的,但是Android并不支持纯C/C++编写的应用,同时NDK提供的库和函数功能很有限,仅仅处理些算法效率敏感的问题,所以推荐初学者学好Java后再学习JNI。 NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。 NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款