1、配置java环境变量(可以百度,配置完成必须重启terminal才能运行javac、javah等命令)。
2、写好如下HelloNDK.java文件(这个文件演示了jni的调用)
3、然后执行在AndroidStudio中执行Build-->Make Project,生成class文件。
生成class文件放在了 Project的目录\\ndk_demo_2\\build\\intermediates\\classes\\debug\\com\\lcj\\ndk_demo_2中,并且是隐藏的。(不查看这个文件也没关系,当然前提是执行没有错误)
4、生成h文件
4.1在AS的terminal输入javah,然后回车。----------------------------------------这一步可以省略,我这里将javah怎么使用。
出现如下帮助文档。
这里出现了javah的使用帮助。
我们要用的命令是javah -d
javah是生成jni头文件的命令;
-d是生成的头文件存放的目录(这个目录如果事先没有建立,那么运行成功会自动新建);
-classpath从中加载类的路径命令;
4.2、进入到使用cd命令进入HelloNDK.java的文件夹main。 cd 如果不进入这个目录等会运行javah的时候会提示: 错误: 找不到 'com.lcj.ndk_demo_2.HelloNDK' 的类文件。 4.3、运行javah命令:上图第二行。 javah -d jni -classpath ..\\..\\build\\intermediates\\classes\\debug com.lcj.ndk_demo_2.HelloNDK 如上图第二行。只要什么错误都不提示说明运行成功!! 这时就可以去查看main目录下是不是多了一个jni文件夹,里面就是生成的头文件了。 jni 是生成的头文件需要存放的文件夹(一般取名jni才对) ..\\..\\build\\intermediates\\classes\\debug 是class所在目录(Build—>Make Project生成的class文件都在这里,这是一个相对路径) com.lcj.ndk_demo_2.HelloNDK 是class文件的文件名(根据之前的java文件生成的) 使用jni作为输出目录后的截图如下: 头文件出现了!! 下图是头文件内容。里面有一个函数声明,它是自动生成的,名字不要改动!! 5、编写C源文件com_lcj_ndk_demo_2_HelloNDK.c。注意这里的函数名称一定要从之前生成的h文件里面复制过来,以免出错。 6、配置build.gradle文件,加入下图中的语句。 moduleName 就是将来生成的so文件名称的一部分,修改它可以修改so的文件名。 ldLibs 目前不知道是什么 abiFilters 是生成os文件的平台,这里选择了3种。 7、配置ndk路径。打开local.properties,加入NDK的路径(ndk需要单独下载,我在网上下载ndk后放在了和sdk相同的路径下) 8、生成os文件。 8.1、Build->Make Project生成so文件,这时如果只有一个c文件,就会报错,这是一个bug,解决办法很简单,随便新建一个空的c文件就行了。图中bugUtil.c就是我建的空文件。 再次运行,没有出错。 8.2、查看 工程目录\\ndk_demo_2\\build\\intermediates\\ndk\\debug\\lib目录里面各有一个os文件 9、调用jni。 10、运行!!成功!!