一、NDK
<wbr><span>NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so 和java 应用一起打包成apk。</span>怎么在eclipse装这两个我就不多说了。大家按照以前装adt和sdk的方法来搞就好了。不过有一点是要注意的:因为cygwin是在window上模拟linux的控制台环境,所以对于访问文件的路径是不能带有空格的,貌似也不能带中文。所以ndk的解压后存放的路径必须不能包括空格或中文,比如这种“D:\Program Files\android-ndk-windows”在cygwin是不能识别成功的。</wbr>
二、安装cygwin
<wbr><wbr><wbr> 大家可以网上搜一下</wbr></wbr></wbr>
三、配置NDK环境变量
<wbr><wbr><wbr><wbr>上述三样安装成功后,就是配置NDK环境变量的问题了。</wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>1、<wbr>首先找到cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件,我的是:E:\cygwin\home\Administrator\.bash_profile。(注意:我安装的时候我的home文件夹下面神马都没有,解决的办法:首先打开环境变量,把里面的用户变量中的HOME变量删掉,在E:\cygwin\home文件夹下建立名为Administrator的文件夹(是用户名),然后把E:\cygwin\etc\skel\.bash_profile拷贝到该文件夹下)。</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>2、 <wbr>打开bash_profile文件,(此处必须要使用UltraEdit文件编辑器打开,并且打开后不要转换格式!使用其他编辑工具打开的话编辑后是乱码,不能执行!)添加NDK=/cygdrive/<你的盘符>/<android ndk 目录> 例<wbr><wbr>如:</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
NDK=/cygdrive/e/android-ndk-r5
export NDK
NDK这个名字是随便取的,为了方面以后使用方便,选个简短的名字,然后保存
<wbr><wbr><wbr><wbr><wbr>3、打开cygwin,输入cd $NDK,如果输出上面配置的/cygdrive/e/android-ndk-r5信息(输出的信息为ndk的安装目录),则表明环境变量设置成功了。</wbr></wbr></wbr></wbr></wbr>
四:用NDK来编译程序
1、现在用安装好的NDK来编译一个简单的程序。在NDK的安装目录下新建一个apps目录存放工程。在apps目录下新建一个myjni目录。打开eclipse,新建一个android工程,新建工程时需要取消复选框“Use default location”,并指定预先建立的myjni文件夹作为工程文件夹。
2、在eclipse里编写Jnitest.java文件:
package minQ.android;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class Jnitest extends Activity {
<wbr></wbr>
private TextView tvTextView;
public native String speak();//声明共享库的函数,不需要在java里实现
String string;
static{
System.loadLibrary("myjni");//动态加载共享库
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
string = speak();
tvTextView = (TextView)findViewById(R.id.myTextView01);
tvTextView.setText(string);
}
}
说明:
程序开始运行的时候会加载myjni,<wbr>static区声明的代码会先于onCreate方法执行。如果你的程序中有多个类,而且如果myjni这个类不是你应用程序的入口,那么myjni(完整的名字是libmyjni.so)这个库会在第一次使用myjni这个类的时候加载<span style="line-height:24px; font-family:Verdana,sans-serif,宋体; background-color:rgb(255,255,255)"><span style="color:#6f3198"><span style="font-family:Verdana,sans-serif,宋体; line-height:24px; background-color:rgb(255,255,255)"><span style="color:#6f3198">。</span></span></span></span></wbr>
3、应用此java文件生成.h文件。使用windows cmd控制台进入到工程目录下的bin目录,输入命令:

其中-classpath表示类的路径bin;
-d jni表示生成的文件存放的路径
minQ.Android.Jnitest表示类的完整路径。
生成的.h头文件将会放在bin\jni目录下
4、在工程目录下建立Application.mk文件:
APP_PROJECT_PATH:=$(call my-dir)
APP_MODULES :=myjni
说明:在进行NDK开发时,在应用程序目录中一定要有Application.mk文件。用来声明Android工程需要调用的非托管模块(如静态库或共享库)。第一行变量APP_PROJECT_PATH表示Android工程所在的目录。在生产共享库文件后,apk将自动将共享库文件拷贝到Android工程\libs\armeabi目录中。第二行变量APP_MODULES表示Android工程需要调用的非托管模块。
5、接下来在工程目录下新建jni目录,把bin\jni目录下的.h头文件移动到此目录下,并且在目录下编写minQ_android_Jnitest.c文件和Android.mk文件。
minQ_android_Jnitest.c文件内容:
<wbr></wbr>
#include<stdlib.h>
#include<stdio.h>
#include"minQ_android_Jnitest.h"//include刚才生成的头文件
jstring Java_minQ_android_Jnitest_speak(JNIEnv* env, jobject this){
<wbr>return (*env)->NewStringUTF(env,"This is the first NDK program!");</wbr>
}
说明:jstring表示Java字符串,Java_minQ_android_Jnitest_speak的构成为Java_<包名称>_<类>_<函数>,其中<函数>的名称和参数要与Jnitest.java文件定义的函数一致。
Android.mk文件内容:
<wbr></wbr>
LOCAL_PATH :=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=myjni
LOCAL_SRC_FILES :=minQ_android_Jnitest.c
include $(BUILD_SHARED_LIBRARY)
说明:LOCAL_PATH<wbr>:=<wbr>$(call
<wbr>my-dir) <wbr></wbr></wbr></wbr></wbr>一个Android.mk <wbr>文件首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数’my-dir’,<wbr>由编译系统提供,用于返回当前路径(即包含Android.mk<wbr>file文件的目录)。</wbr></wbr></wbr>
include <wbr>$( <wbr>CLEAR_VARS) <wbr></wbr></wbr></wbr>CLEAR_VARS由编译系统提供,指定让GNU <wbr>
MAKEFILE为你清除许多LOCAL_XXX变量(例如LOCAL_MODULE, <wbr>LOCAL_SRC_FILES, <wbr>LOCAL_STATIC_LIBRARIES,<wbr>等等...),除LOCAL_PATH<wbr>。这是必要的,因为所有的编译控制文件都在同一个GNU
<wbr>MAKE执行环境中,所有的变量都是全局的。<br><br><strong>LOCAL_MODULE <wbr>:= myjni</wbr></strong>编译的目标对象,LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。<br><br>
注意:编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'myjni'的共享库模块,将会生成'libmyjni.so'文件。 <wbr><br><br>
重要注意事项: <wbr><br><br>
如果你把库命名为‘libmyjni’,编译系统将不会添加任何的lib前缀,也会生成 <wbr>'libmyjni.so',这是为了支持来源于Android平台的源代码的Android.mk文件,如果你确实需要这么做的话。<br><br><strong>LOCAL_SRC_FILES <wbr>:= <wbr>myjni.c <wbr></wbr></wbr></wbr></strong>LOCAL_SRC_FILES变量必须包含将要编译打包进模块中的C或C++源代码文件。注意,你不用在这里列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。<wbr><br><br>
注意,默认的C++源码文件的扩展名是’.cpp’. <wbr>指定一个不同的扩展名也是可能的,只要定义LOCAL_DEFAULT_CPP_EXTENSION变量,不要忘记开始的小圆点(也就是’.cxx’,而不是’cxx’)<br><br><strong>include <wbr>$(BUILD_SHARED_LIBRARY) <wbr></wbr></wbr></strong>BUILD_SHARED_LIBRARY表示编译生成共享库,是编译系统提供的变量,指向一个GNU<wbr>Makefile脚本,负责收集自从上次调用'include<wbr>$(CLEAR_VARS)'以来,定义在LOCAL_XXX变量中的所有信息,并且决定编译什么,如何正确地去做。还有<wbr>BUILD_STATIC_LIBRARY变量表示生成静态库:lib$(LOCAL_MODULE).a,<wbr>BUILD_EXECUTABLE
<wbr>表示生成可执行文件。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><p style="margin:0px 0px 15px; padding:0px">完成到这里,jni目录下就有三个文件:</p>
<p style="margin:0px 0px 15px; padding:0px"><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=7aa2703601010jrx&url=http://s5.sinaimg.cn/orignal/7aa270364ba3c54121904" target="_blank"><img title="Eclipse+CDT+cygwin+NDK" name="image_operate_18201330668350734" alt="Eclipse+CDT+cygwin+NDK" src="http://s5.sinaimg.cn/middle/7aa270364ba3c54121904&690"></a></p>
<p style="margin:0px 0px 15px; padding:0px">6、此时我们可以启动cygwin编译我们的工程。myjni是apps目录下的应用程序目录名称。在指定应用程序(目录)名称后,NKD编译系统会首先找到目录中的Application.mk文件,根据Application.mk文件的信息,确定该Android共享需要使用的<span style="font-family:Verdana,sans-serif,宋体; line-height:24px; background-color:rgb(255,255,255)">APP_MODULES</span>模块;然后在jni目录中搜索所有Android.mk文件,在找到与<span style="font-family:Verdana,sans-serif,宋体; line-height:24px; background-color:rgb(255,255,255)">APP_MODULES</span>模块匹配的Android.mk文件后,根据Android.mk文件提供的信息编译指定的C/C++源代码文件,形成共享库文件;最后将生产的共享库文件拷贝到Android工程的指定目录中。</p>
<p style="margin:0px 0px 15px; padding:0px"><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=7aa2703601010jrx&url=http://s13.sinaimg.cn/orignal/7aa270364ba3c5e829eec" target="_blank"><img title="Eclipse+CDT+cygwin+NDK" name="image_operate_92721330668770571" alt="Eclipse+CDT+cygwin+NDK" src="http://s13.sinaimg.cn/middle/7aa270364ba3c5e829eec&690" width="507" height="144"></a></p>
<p style="margin:0px 0px 15px; padding:0px"><span style="color:#6f3198">说明:启动cygwin后,直接输入命令cd $NDK可以进入ndk安装目录,然后进入myjni工程目录,输入命令$NDK/ndk-build (以上说用的$NDK对应于你在安装cygwin时操作bash_profile文件在后面添加的名称一样,见三.2步)。</span></p>
<p style="margin:0px 0px 15px; padding:0px">7、打开工程myjni目录,会发现在该目录下自动生成两个文件:libs和obj。生成的.so文件在libs\armeabi目录下。在eclipse下刷新工程,重新编译生成apk,libhello-jni.so共享库会一起打包在apk文件内。然后可以顺利地运行你的第一个NDK程序了!</p>
</wbr>
分享到:
相关推荐
总之,Android NDK结合Cygwin的交叉编译环境,为开发者提供了在Windows下开发和优化Android原生代码的强大能力。掌握这些工具和流程,能帮助开发者充分利用C/C++的性能优势,打造出高效、稳定的应用程序。
Cygwin+NDK配置最新最全,Cygwin配置,NDK配置
### Windows 下 Eclipse 集成 Cygwin 编译 Android NDK 在 Windows 环境下使用 Eclipse ...通过以上步骤,可以在 Windows 环境下通过 Eclipse 集成 Cygwin 来高效地编译 Android NDK,极大地提高了开发效率和便利性。
Android NDK(Native Development Kit)是Google为Android平台提供的一款用于开发原生代码的应用程序工具集,它允许开发者使用C和C++等低级语言编写性能敏感或需要访问硬件的代码。在Android应用开发中,NDK常用于...
【知识点详解】 在Android开发中,有时需要使用C++或其他低级语言来实现...然而,需要注意的是,虽然Cygwin和NDK能提供强大的开发能力,但管理这种混合环境可能较为复杂,且需要对Unix和Android原生开发有一定的了解。
### 非常强大的Eclipse中Android NDK开发环境的配置说明 #### 一、概述 本文档将详细介绍如何在Eclipse中配置Android NDK开发环境,并实现C/C++代码的自动编译以及通过Eclipse使用Ant生成JNI所需的头文件。配置流程...
- **操作系统**:官方推荐使用 Ubuntu 系统进行开发,但在 Windows 上也可以通过 Cygwin 实现对 NDK 的支持。 - **版本要求**:NDK 仅适用于 Android 1.5 及以上版本。 ##### 3.2 使用示例 开发者可以通过以下步骤...
在配置完成后,可以使用 Cygwin 和 Android NDK 进行开发,例如可以使用 Cygwin 的 GCC 编译器编译 C 代码,并使用 Android NDK 的工具将编译后的代码嵌入到 Android 应用程序中。 Cygwin 和 Android NDK 是两个...
一个使用cygwin做ndk的文档,可供初学者参考参考。。
在Windows环境下搭建Android NDK开发环境,首先需要安装Cygwin,这是一个模拟Linux环境的工具,它提供了类似UNIX的功能,使得开发者可以在Windows上使用Linux命令行工具。以下是Cygwin的安装步骤: 1. 访问Cygwin...
而Cygwin则为Windows环境下搭建NDK开发环境提供了便利。 #### 二、NDK简介 **NDK**(Native Development Kit)是Google提供的用于开发Android原生应用程序的一套工具集。它允许开发者使用C或C++来编写Android应用...
### Android NDK开发流程 #### 一、简介 在移动应用开发领域,Android平台因其开放性和灵活性而备受开发者青睐。为了充分利用硬件性能并实现高性能计算,Android提供了NDK(Native Development Kit)工具集,允许...
这对于Android NDK开发来说尤其重要,因为许多编译和构建工具在Windows下并不原生支持,而cygwin则填补了这一空白。 在Android NDK开发过程中,开发者常常需要将C或C++源代码(.c文件)编译成动态链接库(.so文件)...
在实际开发中,开发者需要注意的是,NDK开发可能会增加项目的复杂性,因为需要处理多语言间的内存管理、异常处理等问题。同时,NDK编译生成的.so库文件会增大APK的大小,因此在考虑使用NDK时,需要权衡性能提升与APK...
本文将详细介绍如何在Windows 64位操作系统环境下配置Android NDK开发环境,并实现无需借助Cygwin即可快速生成`.h`文件及直接编译库的过程。 #### 二、所需工具与环境 在开始之前,请确保您的开发环境中已安装以下...
本资源摘要信息将详细介绍Windows下Eclipse搭建AndroidNDK开发环境的过程,从Cygwin的搭建到Eclipse的配置,囊括了整个开发环境的搭建过程。 Cygwin的搭建 Cygwin是一个类Unix操作系统的模拟环境,可以在Windows...
综上所述,该内容介绍了如何在不需要Cygwin模拟Linux环境的情况下,在Windows平台下快速搭建一个使用Eclipse进行Android NDK开发的环境。这个过程涉及到安装ADT和最新版的NDK,配置Eclipse环境,创建并配置Android...
在移动应用开发领域,Android NDK (Native Development Kit) 提供了一种使用 C 或 C++ 编写原生代码的方式,这对于提高应用程序性能至关重要。本文将详细介绍 Android NDK 的 Hello JNI 示例项目,通过这个例子我们...
具体步骤包括下载并安装Android NDK的安装包,下载Cygwin,然后配置Cygwin以适应NDK开发环境,并验证环境是否能正常工作。 而从版本7开始,NDK不再依赖于Cygwin,开发者可以直接在Eclipse中为Android项目添加...
2. Util:这里包含一些实用工具,如wget、curl等,可能会在NDK开发过程中用到。 安装完成后,你将在Windows中拥有一个类似于Linux的终端,可以执行bash命令。 二、NDK环境搭建 1. 下载NDK:首先,访问Android...