话说 AndroidStudio从面世以来就一直被质疑能不能用这玩意开发NDK哪,从1.3以后貌似就支持的差不多了,现在都2.2了我才用他来玩NDK, 真是惭愧啊,鼓捣了一下午,看了几篇博客,想到了高中生物课本的一句话,”一猪生九仔,连母十个样啊!!”既然AndroidStudio已经这么人性化了,看了几个决定自己点点看,但是一些地方还是要谢谢那几篇博客啦!
ndk 环境配置搭建
配置ndk 到我们的环境变量中去,和当初我们配置adb是一样的,打开我们的.bash_profile文件(Windows 请自行Google),把我们的 ndk 路径放进去,话说现在AndroidStudio已经很完美的支持ndk了,ndk的下载可以像下载sdk那样下载了,下载完你的目录会多出一个ndk-bundle目录,那就是我们需要关心并把他的路径放到bash_profile文件中去的.使其bash_profile文件生效,并在终端输入ndk-build,如果有信息输出并不是error级别的那就证明 ok 了.
新建 ndk 项目
我们用 AndroidStudio(2.1.2) 新建我们的 ndk 项目,和 Android 项目一样,这里我打算用 ndk写一个求和的 demo,MainActivity就是一个 TextView 显示我们的求和结果,没有说的,然后我们新建一个 Java 类,用来实现native方法
1 | public class NDKTest{ |
这里暂时用到这两个文件,如何才能发挥他们的威力,下面会讲.那么这里面有这么一行System.loadLibrary("NDKDEMO");
,那我们就要开始配置我们的 ndk 到项目使其生效,首先打开local.properties这个文件,把 ndk 的路径像 sdk 那样配置进去,然后在gradle.properties这个文件尾加上android.useDeprecatedNdk=true
,最后在 app gradle 文件中加上
1 | ndk{ |
看出来了吧,上面的System.loadLibrary其实就是这地方的moduleName,同步我们的工程,应该不会报错!
jni 的两种生成姿势
AndroidStudio的智能体现
我们在 MyNDK 中定义了一个 native 方法,但是他报红了,我们使用 AndroidStudio 的智能提示, alt+enter, 看到第一个选项就是
然后我们看到 main 下面多出了一个 jni 目录,下面多出了和moduleName一样的文件,打开我们可以看到
1 |
|
形式就是包名+ native类名+方法名,这样就OK, 我们把 a+b 返回,然后我们在 MainActivity 中
1 | NDKTest myNdk = new NDKTest(); |
这样 TextView 中显示2,成功.
最装逼也是最常用的姿势
这一种是我们最常用的姿势,在 AndroidStudio 中打开终端,定位到我们的 Java 目录,输入javah -jni packageName+className
去我们的 jni 目录看见生成了一个很长的.h 文件,以本例为例,生成了一个这东西ndktst_android_com_ndkdemo_NDKTest.h
,一般不在这个文件中进行操作,会在复制一个文件,命名为.cpp的文件,
1 |
|
然后我们新建一个C++类,自动生成. h 和. cpp的文件,.h 文件中我们这样写
1 |
|
.cpp 这样写
1 |
|
上面那个很长的. cpp 文件应该找到解释了吧,我们只不过是把加法运算的方法重新定义了类,在那里面调用.最后运行的结果是一样的!!!
大功告成
这里我们只是传递了 int 类型的,那么我们在实际开发中用到的不止 int 类型,可能我们要传一个对象等等啊,就完全不一样了,我们要去看官方文档,有点复杂,这篇文章只是和大家一起在 AndroidStudio 上面先把 ndk 玩转而已!!!真实开发中用到的时候再来填坑吧!!!!
一个好朋友献上的,😄😄
版权声明:
除非注明,本博文章均为原创,转载请以链接形式标明本文地址。