新版本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上层应用开发人员 ...
随机推荐
- wIndows phone 7 解析Html数据
原文:wIndows phone 7 解析Html数据 在我的上一篇文章中我介绍了windows phone 7的gb2312解码, http://www.cnblogs.com/qingci/arc ...
- python几道简单的算法题
最近看了python的语法,但是总感觉不知道怎么使用它,还是先来敲敲一些简单的程序吧. 1.题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十 ...
- python学习笔记--for循环
推荐一个学习语言的网站:http://www.codecademy.com 有教程,可以边学边写,蛮不错的. for循环: 1.for loops allow us to iterate throug ...
- java平台的常用资源
分离领域 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.thanks. 构建 这里搜集 ...
- 佛祖保佑 永无BUG 永不改动
//////////////////////////////////////////////////////////////////// // _ooOoo_ // // o8888888o // / ...
- 前台技术--通过javaScript提交表单
window.location=pp+"?username="+getCookie("username")+"&userid="+g ...
- hadoop-ha组态
HADOOP HA组态 hadoop2.x的ha组态.这份文件是在那里的描述中hdfs与yarn的ha组态. 这份文件的假设是zk它已被安装并配置,事实上,任何安装. hdfs ha组态 首先.配置c ...
- 深度分析 Java 的 ClassLoader 机制(源码级别)(转)
写在前面:Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中,JVM在加载类的时候,都是通过ClassLoa ...
- current online redo logfile 丢失的处理方法
昨天做了rm -rf操作后的恢复演练,并且是在没有不论什么备份的情况下.今天在做破坏性操作前,做了个rman全备,然后在线删除所有数据库文件,包含控制文件,数据文件,在线日志文件,归档文件等.来看看有 ...
- PHPCMS V9{loop subcat(0,0,0,$siteid) $r}怎么解释?
{loop subcat(0,0,0,$siteid) $r}{/loop} /** * 获取子栏目 * @param $parentid 父级id * @param $type 栏目类型 * ...