android中jni开发怎么生成头文件

android中jni开发怎么生成头文件,第1张

总共有三种方式生成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

解释:

-d<dir>输出目录,后面跟上要生成的目录名

-jni 生成Jni样式的标头文件

-classpath<path>指定加载类的路径,后面跟上你要生成头文件的这个类的路径,例如:

..\..\..\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头文件的三种方法讲解完毕。

在windows环境下生成的动态库是 dll

在linux下生成so

在mac下生成的是dylib

所以对于Android的开发者来说,还是要用ndk的工具

把在idea生成的.h文件粘贴到clion的项目中就可以了,

如果找不到jni.h可以在CMakeList.txt中添加对jni.h文件的引用

如下:

后面三行根据jdk的实际位置填写,作用是导入jni相关的头文件;其他的 *** 作系统可能不完全一致

复制.h头文件 com_shenby_jni_JniExample.h

实现该文件定义的函数 com_shenby_jni_JniExample.c

在CMakeList.txt中添加生成动态共项库

add_library:生成一个库,add_executable:生成一个可执行文件

hello:是生成共享库的名字,前面会自动加上lib前缀,如这里windows生成的是 libhello.dll

SHARED:库的类型为动态,windows上生成.dll,而STATIC 则是生成静态库,windows生成.a文件

com_shenby_jni_JniExample.c :c源文件,多个文件就添加在后面,切记不能添加上面的com_shenby_jni_JniExample.h

文件,否则生成的库中的函数为空

结果如下

就可以把该dll文件粘贴到idea的项目根目录中运行了

java程序

rk3288/frameworks/base/media/java/android/media/MediaScanner.java

文件中class 为public class MediaScanner

正常编译后会在rk3288/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes/android/media目录下生成MediaScanner.class文件。

我们进入rk3288/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes目录,使用如下命令生成jni头文件:

classes]$ javah -classpath . -jni android.media.MediaScanner

classes]$ ls android_media_MediaScanner.h

android_media_MediaScanner.h


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11463202.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存