Android安装NDK运行环境无需cygwin
2016-03-15 08:58
309 查看
本菜鸟在查阅了很多文章,又是去折腾cygwin之类的,虽然可以编译出so文件,但运行项目却有很多问题。当发现最新的ndk不需要cygwin的时候,跪了(orz)。
现在进入正题。
首先创建工程:
Step1:到Android官网下载Android的开发工具ADT(Android Development Tool的缩写),该工具集成了最新的ADT和NDK插件以及Eclipse,还有一个最新版本SDK。解压之后就可以用了,非常爽!
ADT插件:管理Android SDK和相关的开发工具的
NDK插件:用于开发Android NDK的插件,ADT版本在20以上,就能安装NDK插件,另外NDK集成了CDT插件
也可以在线更新ADT、NDK插件,不过速度超级慢...所以果断在网上下载集成开发工具ADT,下载链接见:http://developer.android.com/sdk/index.html
Step2:到Android官网下载最新的NDK,注:NDK版本在r7以上之后就集成了Cygwin,而且还是十分精简版。比起下载Cygwin要方便多啦!下载链接见:http://developer.android.com/tools/sdk/ndk/index.html
下载完成之后,解压搞定!
Step3:打开Eclipse,点Window->Preferences->Android->NDK,设置NDK路径,例如Shamoo的是E:\android-ndk-r9c
Step4:新建一个Android工程,在工程上右键点击Android Tools->Add Native Support...,然后给我们的.so文件取个名字,例如:my-ndk
这时候工程就会多一个jni的文件夹,jni下有Android.mk和my-ndk.cpp文件。Android.mk是NDK工程的Makefile,my-ndk.cpp就是NDK的源文件。
Step5:接下来仿着NDK的demo,Hello-JNI工程写一下。使用Alt + '/'可以代码提示!很爽!有木有?之前用CDT时候死活都按不出代码提示,郁闷...
JNI接口的命名规范是:Java_ + 调用该方法的包名(包名的点用_代替) + _ + 调用该接口的类名 + _ + 方法名,对于实例方法,有两个参数是必要的,一个JNI的环境指针JNIEnv *,另一个是调用该方法的Java实例jobject
my-ndk.cpp:
?
TestActivity.java:
?
使用ndk库必须在static代码块里面用System.loadLaibrary加载.so库
Step6:完成了,然后运行。运行之前先编译NDK,然后在编译JAVA代码。编译也许会遇到Unable to launch cygpath. Is Cygwin on the path?错误,解决办法如下:
1.工程右键,点Properties->C/C++ Build的Building Settings中去掉Use default build command,然后输入${NDKROOT}/ndk-build.cmd
2.在C/C++ Build中点击Environment,点Add...添加环境变量NDKROOT,值为NDK的根目录
3.再编译,问题就解决啦!
运行时崩溃,遇到java.lang.UnsatisfiedLinkError: stringFromJNI错误,解决办法:在C++文件中函数定义前添加extern "C"修饰
?
原因是:使用extern "C"修饰,编译器会按C语言的方式编译和连接。在C语言中,函数编译之后函数名与C++函数编译之后不同,例如foo(int x, int y),C可能会编译成_foo的名字,而C++因为支持重载,所以会编译成像_foo_int_int这种带参数的函数名。如果是按照C语言的编译方式,调用foo函数是找不到_foo的函数名就会报出函数名找不到的错误。所以要添加extern
"C"修饰。
接着搭建NDK环境
使用工具:
工具自己去google下载吧
搭建:
adt-bundle
ndk
打开 Window --》 Preferreces
选择sdk的根目录
选择ndk的根目录
将ndk下samples目录下hello-jni项目导入
项目导入之后,添加编译器,选择项目,右击properties(NDK_builder我事先做好的,这里我们要new一个新的)
选择program
下面按图设置好
勾选项目
将编译器up到最先位置
这样环境便搭建好了~~~~~~~
开始测试:
项目可能会报出很多problem,但是这是没问题的,将problem删除,clean一下项目,会生成so文件
添加so到运行库
添加后打开Configure Build Path,勾上所添加的so文件,eclipse是默认不会自动帮你勾上的
运行项目
大功告成!~~!
注意:
现在进入正题。
首先创建工程:
Step1:到Android官网下载Android的开发工具ADT(Android Development Tool的缩写),该工具集成了最新的ADT和NDK插件以及Eclipse,还有一个最新版本SDK。解压之后就可以用了,非常爽!
ADT插件:管理Android SDK和相关的开发工具的
NDK插件:用于开发Android NDK的插件,ADT版本在20以上,就能安装NDK插件,另外NDK集成了CDT插件
也可以在线更新ADT、NDK插件,不过速度超级慢...所以果断在网上下载集成开发工具ADT,下载链接见:http://developer.android.com/sdk/index.html
Step2:到Android官网下载最新的NDK,注:NDK版本在r7以上之后就集成了Cygwin,而且还是十分精简版。比起下载Cygwin要方便多啦!下载链接见:http://developer.android.com/tools/sdk/ndk/index.html
下载完成之后,解压搞定!
Step3:打开Eclipse,点Window->Preferences->Android->NDK,设置NDK路径,例如Shamoo的是E:\android-ndk-r9c
Step4:新建一个Android工程,在工程上右键点击Android Tools->Add Native Support...,然后给我们的.so文件取个名字,例如:my-ndk
这时候工程就会多一个jni的文件夹,jni下有Android.mk和my-ndk.cpp文件。Android.mk是NDK工程的Makefile,my-ndk.cpp就是NDK的源文件。
Step5:接下来仿着NDK的demo,Hello-JNI工程写一下。使用Alt + '/'可以代码提示!很爽!有木有?之前用CDT时候死活都按不出代码提示,郁闷...
JNI接口的命名规范是:Java_ + 调用该方法的包名(包名的点用_代替) + _ + 调用该接口的类名 + _ + 方法名,对于实例方法,有两个参数是必要的,一个JNI的环境指针JNIEnv *,另一个是调用该方法的Java实例jobject
my-ndk.cpp:
?
?
Step6:完成了,然后运行。运行之前先编译NDK,然后在编译JAVA代码。编译也许会遇到Unable to launch cygpath. Is Cygwin on the path?错误,解决办法如下:
1.工程右键,点Properties->C/C++ Build的Building Settings中去掉Use default build command,然后输入${NDKROOT}/ndk-build.cmd
2.在C/C++ Build中点击Environment,点Add...添加环境变量NDKROOT,值为NDK的根目录
3.再编译,问题就解决啦!
运行时崩溃,遇到java.lang.UnsatisfiedLinkError: stringFromJNI错误,解决办法:在C++文件中函数定义前添加extern "C"修饰
?
"C"修饰。
接着搭建NDK环境
使用工具:
adt-bundle-windows-x86:eclipse+sdk+adt的集成工具包,也可以用eclipse自己先搭建
android-ndk-r9-windows-x86_64:ndk,请下载r8以上的,那样可以不安装cygwin
工具自己去google下载吧搭建:
1.首先分别解压工具
adt-bundlendk
2.添加sdk和ndk
打开 Window --》 Preferreces 选择sdk的根目录
选择ndk的根目录
3.添加测试项目hello-jni
将ndk下samples目录下hello-jni项目导入项目导入之后,添加编译器,选择项目,右击properties(NDK_builder我事先做好的,这里我们要new一个新的)
选择program
下面按图设置好
勾选项目
将编译器up到最先位置
这样环境便搭建好了~~~~~~~
开始测试:
项目可能会报出很多problem,但是这是没问题的,将problem删除,clean一下项目,会生成so文件
添加so到运行库
添加后打开Configure Build Path,勾上所添加的so文件,eclipse是默认不会自动帮你勾上的
运行项目
大功告成!~~!
注意:
新版的SDK版本能够自动将libs里的包导入,不需要build->add ....了··你把你的Libraries中导入的包删除了,然后clean下 |
相关文章推荐
- Android View总结
- Android中关于aar的一些知识
- Android中图片压缩技术以及图片缓存避免OOM
- Android4.2.2源码目录结构分析
- Android4.2.2源码目录结构分析
- Android 内存优化大全(中)
- Android开发之初识MVP模式
- Android开发之初识MVP模式
- Windows7部署Android开发环境
- Android 进程常驻(2)----细数利用android系统机制的保活手段
- android studio 系列二
- Android——手机尺寸相关的概念 +尺寸单位+关于颜色
- 如何修改android工程的包名?
- android-自定义控件之液位指示器
- Android——区别DVM与JVM (2)
- 在Android Studio中如何添加GSON 并使用GsonFormat快速实现实体类
- Android 事件处理基于Handler 消息处理
- 基于Android的Java学习路线图-转载自遥哥20160302
- Java与Android不得不说的故事 --摘自网友博客20160302
- 在android studio中,查看SHA1和MD5