新版本NDK环境结构(避Cygwin,超快)
曾经做Android的项目要用到NDK就必需要下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配置编译器,环境变量...
麻烦到不想说了,Shamoo在网上查了一下资料,发现了一个超级快配置NDK的办法。
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:新建一个Androidproject,在project上右键点击Android Tools->Add Native Support...,然后给我们的.so文件取个名字,比如:my-ndk

这时候project就会多一个jni的目录。jni下有Android.mk和my-ndk.cpp文件。Android.mk是NDKproject的Makefile。my-ndk.cpp就是NDK的源文件。
Step5:接下来仿着NDK的demo,Hello-JNIproject写一下。使用Alt + '/'能够代码提示!非常爽!有木有?之前用CDT时候死活都按不出代码提示。郁闷...

JNI接口的命名规范是:Java_ + 调用该方法的包名(包名的点用_取代) + _ + 调用该接口的类名 + _ + 方法名。对于实例方法。有两个參数是必要的。一个JNI的环境指针JNIEnv *。还有一个是调用该方法的Java实例jobject
my-ndk.cpp:
|
1
2
3
4
5
6
|
#includeJNIEXPORT jobject returnenv->NewStringUTF("Hello);}</jni.h> |
TestActivity.java:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
publicclassTestActivityextendsActivity static{ System.loadLibrary("my-ndk"); } // publicnativeString @Override protectedvoidonCreate(Bundle super.onCreate(savedInstanceState); TextViewnewTextView(this); tvText.setText(stringFromJNI()); setContentView(tvText); }} |
使用ndk库必须在static代码块里面用System.loadLaibrary载入.so库
Step6:完毕了,然后执行。
执行之前先编译NDK,然后在编译JAVA代码。编译或许会遇到Unable to launch cygpath. Is Cygwin on the path?错误,解决的方法例如以下:
1.project右键。点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"修饰
|
1
2
3
4
5
6
7
8
9
|
extern"C"{JNIEXPORT jobject}JNIEXPORT jobject returnenv->NewStringUTF("Hello);} |
原因是:使用extern "C"修饰,编译器会按C语言的方式编译和连接。在C语言中。函数编译之后函数名与C++函数编译之后不同,比如foo(int x, int y),C可能会编译成_foo的名字,而C++由于支持重载。所以会编译成像_foo_int_int这样的带參数的函数名。假设是依照C语言的编译方式,调用foo函数是找不到_foo的函数名就会报出函数名找不到的错误。所以要加入extern
"C"修饰。
扩展:http://blog.csdn.net/houshunwei/article/details/17217695
Type 'JNIEnv' could not be resolved
等信息解决的方法 http://www.cnblogs.com/hlppsite/p/3349377.html
新版本NDK环境结构(避Cygwin,超快)的更多相关文章
- Android 新版NDK环境搭建(免Cygwin)
使用最新ndk,直接抛弃cygwin,以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配 ...
- windows 下配置ndk环境,无需cygwin
时隔好久要用ndk编译jni库,本以为配制安装cygwin环境,便按部就班的下载安装,但是公司的网速真的不给力,三天安装了三四次都没有安装成功(我选择的是在线安装),于是我便开始查ndk的官网看看,发 ...
- Cocos2d-x 3.0final 终结者系列教程15-win7+vs2012+adt+ndk环境搭建(无Cygwin)
最终不用Cygwin 了.非常高兴 为什么要用Win7? 由于VS2012要求Win7以上系统才干安装! 为什么要用vs2012? 由于VS2012才支持C++11! 为什么要支持C++11? 由于C ...
- NDK环境搭建(Native Code的编译,不需要Cygwin)
分类: android2013-06-21 15:49 475人阅读 评论(0) 收藏 举报 Android NDK 目录(?)[-] System and Software Requirements ...
- windows 环境内网超快同步 DFS
记录下: 在WINDOWS环境下,内网同步使用DFS可以超快实现文件同步,效果非常OK 纯粹记录下!
- Windows XP环境下 搭建Android NDK环境
搭建Android NDK环境 Windows XP环境下 1 一些下载 ① NDK r7:http://developer.android.com/sdk/ndk/index.html ② cygw ...
- android ndk环境配置(转)
转载自:http://jingyan.baidu.com/article/3ea51489e7a9bd52e61bbac7.html android sdk 更新到 r23 时,eclipse 自带 ...
- android NDk环境编译总结
首先,这篇文章的撰写是基于很多前人的优秀的帖子,感谢他们的分享让我能够学习这么多的知识.谢谢 Android NDK开发环境的搭建 前言: Android 上,应用程序的开发,大部分基于 Java 语 ...
- 【转】Windows环境下Android NDK环境搭建
原文网址:http://www.metsky.com/archives/525.html 前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员 ...
随机推荐
- Python3.2官方文件翻译--课堂笔记和异常是阶级
6.7备注 有时喜欢Pasca在"录"和C中"数据体"的数据类型很实用.集合一些数据项. 一个空类定义能够清楚地显示: class Employee: pass ...
- 使用LabVIEWPC的制备
使用LabVIEWPC的制备 1.下载.安装LabVIEW 如今,互联网搜索,你可以搜索出一大推LabVIEW下载并安装破解教程.因此,这里没有具体描述的.请自行百度~~.另外.提醒一下,下载LabV ...
- hadoop 提高hdfs删文件效率----hadoop删除文件流程解析
前言 这段时间在用hdfs,由于要处理的文件比较多,要及时产出旧文件,但是发现hdfs的blocks数一直在上涨,经分析是hdfs写入的速度较快,而block回收较慢,所以分心了一下hadoop删文件 ...
- Enhancing the Application: Advanced JDBC Features(转)
Enhancing the Application: Advanced JDBC Features This chapter describes additional functionality th ...
- ZOJ 2680 Clock()数学
主题链接:problemId=1680" target="_blank">http://acm.zju.edu.cn/onlinejudge/showProblem ...
- bridge pattern
10.5 桥接模式总结 桥接模式是设计Java虚拟机和实现JDBC等驱动程序的核心模式之一,应用较为广泛.在软件开发中如果一个类或一个系统有多个变化维度时,都可以尝试使用桥接模式对其进行设计.桥接模 ...
- 开源 自由 java CMS - FreeCMS1.9 分纪录
项目地址:http://www.freeteam.cn/ 2.4.1 积分记录 查看系统全部会员积分记录. 从左側管理菜单点击积分记录进入. 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- java单元测试(Junit)
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework),供Java开发人员编写单元测试之用. 对不同性质的被 ...
- effective c++ 条款12 copy all parts of an object
这经常发生在更改代码的时候,当有自己的copy 赋值函数或者copy 构造函数时,编译器就不会维护这两个函数.导致发生遗忘. 可能出现的场景 class Customer { private: std ...
- 【Linux】lvm基础操作
新增两块硬盘,来进行实验: [root@jp ~]# fdisk -l Disk /dev/sda: 107.3 GB, 107374182400 bytes 255 heads, 63 sector ...