[Android] 环境配置之Android Studio开发NDK
2015-10-20 18:48
603 查看
========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:Genius-Android
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/42040963
========================================================
NDK 开发哪家强?XX XX 找 Blue Fly.
说到 NDK 开发,其实是为了有些时候为了项目需求需要调用底层的一些 C/C++ 的一些东西;另外就是为了效率更加高些。
但是很多时候能不用就不用;这个是啥原因?个人感觉有些时候是觉得麻烦,首先要配置 NDK 还要 下载 Cygwin ,配置 Cygwin ,然后需要编译生成,哎太麻烦了。如果你说使用 Eclipse,的确这样在编译上是能简单很多,但是前期也是需要配置一大堆;哎,配置错了还伤不起。
现在谷歌主力推动 Android Studio 这个是个不错的工具,至少现在来看在 Eclipse 上能做到的 这边都有,这边有的Eclipse上不一定有。
下面来说说 在 Android Studio 中怎么进行 NDK 的开发。
在我的上一篇文章 [Android] 环境配置之正式版Android Studio 1.0 中有介绍了。
NDK 环境搭建
下载:http://developer.android.com/tools/sdk/ndk/index.html
Windows32:android-ndk-r10d-windows-x86.exe
Windows64:android-ndk-r10d-windows-x86_64.exe
Mac OS X 32-bit:android-ndk-r10d-darwin-x86.bin
Mac OS X 64-bit:android-ndk-r10d-darwin-x86_64.bin
Linux 32-bit (x86):android-ndk-r10d-linux-x86.bin
Linux 64-bit (x86):android-ndk-r10d-linux-x86_64.bin
都是可执行文件,下载后点击即可解压到当前文件夹;当然你可以使用命令行来进行跨文件夹解压的。
![](http://static.oschina.net/uploads/img/201412/21201600_HcmA.jpg)
建立对应的类,在 MathKit 中我们实现计算 INT 值的平方数。
![](http://static.oschina.net/uploads/img/201412/21201600_EPJl.jpg)
这个想必大家并不陌生吧,该文件就是 java 类对应的 头文件,当然如果你比较厉害的话可以不用这样生成,自己敲代码完成也行;反正我是不行。
如下,建立文件夹:
![](http://static.oschina.net/uploads/img/201412/21201601_NFRP.jpg)
拷贝之前的文件进去:
![](http://static.oschina.net/uploads/img/201412/21201601_9SoX.jpg)
分别实现:
net_qiujuer_ndkdemo_jni_MathKit.cpp
net_qiujuer_ndkdemo_jni_StringKit.cpp
![](http://static.oschina.net/uploads/img/201412/21201601_wpvY.jpg)
该设置不是必须,如果你设置了环境变量则可不用设置;如果没有但是又没有设置将会出现:
![](http://static.oschina.net/uploads/img/201412/21201602_e0Jw.jpg)
设置 APP 项目 build.gradle
![](http://static.oschina.net/uploads/img/201412/21201602_RT58.jpg)
该设置是为了设置生成的Jni名称为:JniDemo。
主文件调用:
![](http://static.oschina.net/uploads/img/201412/21201603_yn7Y.jpg)
![](http://static.oschina.net/uploads/img/201412/21201603_riKV.jpg)
可以看见是非常简单的;这个调用可以说是我操作过最简单的了;甚至于生成 .H 文件都可以编辑 .sh 文件来进行批处理(这个后面有时间再说).
Android.mk
Application.mk
而这里这两个文件都没有建立,那么是怎么决定的呢?
我们可以在 ndk 的 modelName 上按住 Ctrl 进行点击将会出现这个界面:
![](http://static.oschina.net/uploads/img/201412/21201603_vziV.jpg)
这些就是全部能够设置的参数。分别对应:
好了,就这些祝大家成功。项目打包上传。
本次项目点击这里下载。
========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:Genius-Android
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/42040963
========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:Genius-Android
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/42040963
========================================================
NDK 开发哪家强?XX XX 找 Blue Fly.
说到 NDK 开发,其实是为了有些时候为了项目需求需要调用底层的一些 C/C++ 的一些东西;另外就是为了效率更加高些。
但是很多时候能不用就不用;这个是啥原因?个人感觉有些时候是觉得麻烦,首先要配置 NDK 还要 下载 Cygwin ,配置 Cygwin ,然后需要编译生成,哎太麻烦了。如果你说使用 Eclipse,的确这样在编译上是能简单很多,但是前期也是需要配置一大堆;哎,配置错了还伤不起。
现在谷歌主力推动 Android Studio 这个是个不错的工具,至少现在来看在 Eclipse 上能做到的 这边都有,这边有的Eclipse上不一定有。
下面来说说 在 Android Studio 中怎么进行 NDK 的开发。
准备工作
Android Studio 环境搭建在我的上一篇文章 [Android] 环境配置之正式版Android Studio 1.0 中有介绍了。
NDK 环境搭建
下载:http://developer.android.com/tools/sdk/ndk/index.html
Windows32:android-ndk-r10d-windows-x86.exe
Windows64:android-ndk-r10d-windows-x86_64.exe
Mac OS X 32-bit:android-ndk-r10d-darwin-x86.bin
Mac OS X 64-bit:android-ndk-r10d-darwin-x86_64.bin
Linux 32-bit (x86):android-ndk-r10d-linux-x86.bin
Linux 64-bit (x86):android-ndk-r10d-linux-x86_64.bin
都是可执行文件,下载后点击即可解压到当前文件夹;当然你可以使用命令行来进行跨文件夹解压的。
建立一个项目 NDKDemo:
![](http://static.oschina.net/uploads/img/201412/21201600_HcmA.jpg)
建立对应的类,在 MathKit 中我们实现计算 INT 值的平方数。
public class MathKit { public static native int square(int num); static { System.loadLibrary("JniDemo"); } }StringKit 这个就是充数用的:
public class StringKit { public static native void setNull(String str); static { System.loadLibrary("JniDemo"); } }
准备 .h 文件
进入Java目录;CMD 进入该目录进行 javah 操作:![](http://static.oschina.net/uploads/img/201412/21201600_EPJl.jpg)
这个想必大家并不陌生吧,该文件就是 java 类对应的 头文件,当然如果你比较厉害的话可以不用这样生成,自己敲代码完成也行;反正我是不行。
如下,建立文件夹:
![](http://static.oschina.net/uploads/img/201412/21201601_NFRP.jpg)
拷贝之前的文件进去:
![](http://static.oschina.net/uploads/img/201412/21201601_9SoX.jpg)
分别实现:
net_qiujuer_ndkdemo_jni_MathKit.cpp
#include <net_qiujuer_ndkdemo_jni_MathKit.h> JNIEXPORT jint JNICALL Java_net_qiujuer_ndkdemo_jni_MathKit_square (JNIEnv *env, jclass cls, jint num) { return num*num; }
net_qiujuer_ndkdemo_jni_StringKit.cpp
#include <net_qiujuer_ndkdemo_jni_StringKit.h> JNIEXPORT void JNICALL Java_net_qiujuer_ndkdemo_jni_StringKit_setNull (JNIEnv *env, jclass obj, jstring str) { }
设置项目
设置根目录中的:local.properties![](http://static.oschina.net/uploads/img/201412/21201601_wpvY.jpg)
该设置不是必须,如果你设置了环境变量则可不用设置;如果没有但是又没有设置将会出现:
![](http://static.oschina.net/uploads/img/201412/21201602_e0Jw.jpg)
设置 APP 项目 build.gradle
![](http://static.oschina.net/uploads/img/201412/21201602_RT58.jpg)
该设置是为了设置生成的Jni名称为:JniDemo。
主文件调用:
![](http://static.oschina.net/uploads/img/201412/21201603_yn7Y.jpg)
现在点击运行:
![](http://static.oschina.net/uploads/img/201412/21201603_riKV.jpg)
可以看见是非常简单的;这个调用可以说是我操作过最简单的了;甚至于生成 .H 文件都可以编辑 .sh 文件来进行批处理(这个后面有时间再说).
更多
在平时的那些操作中我们不可避免的要建立:Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := genius LOCAL_SRC_FILES := net_qiujuer_imageblurring_jni_ImageBlur.cpp LOCAL_LDLIBS := -lm -llog -ljnigraphics include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := all APP_PLATFORM:= android-19 APP_OPTIM := release
而这里这两个文件都没有建立,那么是怎么决定的呢?
我们可以在 ndk 的 modelName 上按住 Ctrl 进行点击将会出现这个界面:
![](http://static.oschina.net/uploads/img/201412/21201603_vziV.jpg)
这些就是全部能够设置的参数。分别对应:
ndk{ moduleName "JniDemo" // 设置生成的文件名 cFlags "-DANDROID_NDK -D_RELEASE" //这个对应的是生成模式 ldLibs "m", "log", "jnigraphics" //这个对应 LOCAL_LDLIBS 但是需要去掉前面的 “l” abiFilters "all" //这个是对应的 APP_ABI stl "stlport_shared" //这个对应的是 APP_STL }
好了,就这些祝大家成功。项目打包上传。
本次项目点击这里下载。
========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:Genius-Android
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/42040963
========================================================
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题