
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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)