【NDK开发】android-ndk r10环境搭建
1)打开Android开发者的官网http://developer.android.com/找到Develop点击。如果页面打不开,通过代理来访问。
2)进入后再点击Tools
3)进入后在左侧找到NDK点击,可以见到各种平台的NDK r10。
选择需要的下载
5)解压下载的android-ndk32-r10-windows-x86_64.zip,将其放到你想要的目录下。
注:R7之前的版本,必须要安装Cygwin才能使用NDK。从R7开始,Windows版本的NDK提供了一个ndk-build.cmd脚本,可以直接利用这个脚本编译。想要做到这一 点,只要为Eclipse Android工程添加一个Builder,就能实现Eclipse的自动编译NDK,这一点在后面的步骤会有介绍。
6) NDK实例的实现
启动Eclipse,新建Android工程(此处名为TestNDK),如图所示:
7)在TestNDK工程的根目录下新建文件夹jni,之后找到NDK的安装目录(sampleshello-jnijni)下的 Android.mk和hello-jni.c 这两个文件,将其拷贝到TestNDK->jni文件夹下面。
注:如果你很好奇jni文件夹里的hello-jni.c里的函数命名如此刁钻,是怎么写的,并且你如果你想的更远,已经在考虑自己以后怎么写这种文件,那么我告诉你它里面的函数命名是直接粘贴的一个头文件里的内容。这个头文件可以通过反编译下边提到的HelloJni.java得到。如果你以后要确实要进行NDK开发,那么你肯定要掌握反编译的方法。为了你能够少走弯路,推荐我的另一篇文章《1分钟攻克NDK开发中javah不能反编译的问题》,链接网址http://blog.csdn.net/golden1314521/article/details/23039417 。
8) 找到NDK的安装目录(sampleshello-jnisrccomexamplehellojni)下的HelloJni.java文件,将其拷贝到TestNDK工程src文件夹对应的包下。
9) 修改项目文件AndroidManifest.xml,将activity标签下的 android:name =“com.zhw.testndk. MainActivity”修改为 android:name =“com.example.hellojni.HelloJni”。(注:此处的
TestNDKACtivity为项目自动生成的,项目不同,此处也会不同)
10) 新建并配置一个Builder
点击Project->Properties->Builders->New,新建立一个Builder。在弹出的对话框上面点击Program,OK!如图所示
在弹出的对话框【Edit Configuration】中,配置选项卡【Main】:
Location中需要填入nkd-build.cmd的路径(NDK安装目录下)。
Working Diretcoty中需要填入TestNDK的工程根目录。如图所示:
注:不要漏了
配置选项卡【Refresh】,如图所示:
勾选“Refresh resources upon completion”,
勾选“The entire workspace”,
勾选“Recuresively include sub-folders”。
配置选项卡【Build Options】,如图七所示:
勾选“After a “Clean””,
勾选“During manual builds”,
勾选“During auto builds”,
勾选“Specify working set of relevant resources”。
点击“Specify Resources…”勾选TestNDK工程的“jni“目录 ,Finish!
当在console里面看到如图八所示的信息,则表示一切正常,此时就已经是自动编译代码了。
注:如果不成功:Project->clean->选择工程->点击OK
假如你使用的是NDK-R9版本中的例子,你在console里面会看到比上图要多的编译信息,截图如下
这时候你要检查一下工程根目录下的libs目录下的子目录,要删除libs中多余的子文件夹,只留下armeabi文件夹和以jar为后缀名的jar包。
10)右键点击工程TestNDK,Run As -> Android Application, 运行程序。当出现图所示信息时,NDK实例运行成功!
如果程序运行出错,显示“应用程序**(进程:com.example.***)意外停止,请重试”的错误提示
这个错误产生的原因极有可能是你的JNI文件的命名或包的声明写错了。查一下程序运行的日志logcat,显示错误为“java.lang.UnsatisfiedLinkError:stringFromJNI”,说的是Java层调用本地方法stringFromJNI时,却没有找到这个本地方法,所以除了错。
那么Android虚拟机怎么查找这个本地方法的呢?先说一下Android工程的环境:包名称是com.example.testndk,应用名称是HelloJni,如果Java层调用了本地方法String stringFromJNI(),那么Android虚拟机就会由这三个变量生成一个名字:jstring Java_com_example_testndk_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) ,并在本地方法中严格按照这个名字查找同名的本地方法。如果找不到,就会返回上图的错误。所以要确认一下JNI文件的命名或包的声明是否与Java文件中的一致。
在本地文件(即C或C++文件)改正此错误后,运行,正常显示。
【NDK开发】android-ndk r10环境搭建的更多相关文章
- Android NDK 开发(一)--环境搭建【转】
转载请注明出处:http://blog.csdn.net/allen315410/article/details/41800955 Android下的NDK开发是Android开发中不可或缺的一部分, ...
- 在vs2012中用C#开发Android应用Xamarin环境搭建
Xamarin是Mono创始人Miguel de Icaza创建的公司,旨在让开发者可以用C#编写iOS, Android, Mac应用程序,也就是跨平台移动开发. 简介 Xamarin是基于Mono ...
- Android流媒体开发之路二:NDK开发Android端RTMP直播推流程序
NDK开发Android端RTMP直播推流程序 经过一番折腾,成功把RTMP直播推流代码,通过NDK交叉编译的方式,移植到了Android下,从而实现了Android端采集摄像头和麦克缝数据,然后进行 ...
- Android流媒体开发之路三:基于NDK开发Android平台RTSP播放器
基于NDK开发Android平台RTSP播放器 最近做了不少android端的开发,有推流.播放.直播.对讲等各种应用,做了RTMP.RTSP.HTTP-FLV.自定义等各种协议,还是有不少收获和心得 ...
- Android开发:Eclipse+OpenCV环境搭建
一.OpenCV预备: OpenCV是一个跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它由一系列 C 函数和少量 C++ 类构成,同时提供了Pyt ...
- 哪位大兄弟有用 cMake 开发Android ndk的
一直用 Android studio 开发ndk,但是gradle支持的不是很好,只有experimental 版本支持 配置各种蛋疼.主要每次新建一个module都要修改配置半天.之前也看到过goo ...
- Android入门之环境搭建
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/1376935560.html 原创:An ...
- Android自动化测试之环境搭建
Android自动化测试之环境搭建 一.Android-sdk介绍 SDK(Software development kit)软件开发工具包.被软件开发工程师用于为特定的软件包.软件框架.硬件平台. ...
- iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)
iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController) 前面我们介绍了StoryBoard这个新技术,和纯技术 ...
随机推荐
- Windows系统安装Oracle 11g 数据库
一.下载 http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html以下两网址来源此官方下载页 ...
- android AsyncTask实例
.java package com.example.activitydemoay; import android.app.Activity; import android.content.Intent ...
- devtmpfs文件系统创建设备节点
分类: LINUX 原文地址:devtmpfs文件系统创建设备节点 作者:wangbaolin719 http://blog.chinaunix.net/uid-27097876-id-4334356 ...
- lsll 加载段限长指令
static inline unsigned long get_limit(unsigned long segment) { unsigned long __limit; __asm__(&quo ...
- /usr/include/sys/types.h:62: error: conflicting types for ‘dev_t’
/usr/include/sys/types.h:62: error: conflicting types for ‘dev_t’/usr/include/linux/types.h:13: erro ...
- JS MD5
1 /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as ...
- [转]Hide or Remove jquery ui tab based on condition
本文转自:http://stackoverflow.com/questions/19132970/hide-or-remove-jquery-ui-tab-based-on-condition 问: ...
- 初步了解Entity Framework
来源:http://www.cnblogs.com/Wayou/archive/2012/09/20/EF_CodeFirst.html Entity Framework的全称是ADO.NET Ent ...
- java 24 - 7 GUI之 创建多级菜单窗体
需求: 创建多级菜单 步骤: A:创建窗体对象(并设置属性和布局) B:创建菜单栏 C:创建菜单和子菜单 D:逐步添加菜单(子菜单添加到菜单中,菜单添加到菜单栏中) E:窗体中设置菜单栏(菜单栏并不是 ...
- vmware打开出错,需要打开虚拟化的设置