这篇文章是我一年前写的,当时只是写的word文档,今天将其中的步骤按照该文档重新走了一遍,还是挺详细的,不会没有关系,只要认真参照教程,那么windows下androidNDK开发不是梦,好了,下面看教程。
android应用的ndk开发基础,即在android应用中用java文件调用c文件
1.首先需要安装windows下模拟linux环境的cygwin软件,如下:
1.下载setup.exe
到官网www.cygwin.com 在屏幕的中央是一个黑绿两色组成的 “C” 徽标,标题是“Install or update now.”。在该链接上点击,这将下载一个小程序 setup.exe(250KB)。这个安装程序将在您的机器上引导 Cygwin 环境的安装或更新过程。
2.运行setup.exe,进行安装,如下图:
图 1. Cygwin 环境的安装向导
点击 Next按钮。
选择下载位置
在这个页面上,选择"Install from Internet"。
图 2. 选择安装类型
一直点击 Next按钮,一直到出现下图界面:
选择一个下载站点。因为这些站点是义务的镜像,所以选择一个下载点有点风险(通常它们是可用的,但有时不可用)。通常,试试离你比较近的那个站点。(有一个http://mirrors.163.com最快)
点击 Next按钮。
选择包进行安装
在这个页面上,您将选择要安装的包。默认情况下,Cygwin 基本包将不安装 GCC,因此,您必须修改默认设置。
将鼠标移动到 Devel边的加号(+)上,然后点击它展开 Devel类。
这一步,我们选择需要下载安装的组件包,为了使我们安装的Cygwin能够编译程序,我们需要安装gcc编译器,默认情况下,gcc并不会被安装,我们需要选中它来安装。为了安装gcc,我们用鼠标点开组件列表中的“Devel”分支,在该分支下,有很多组件,我们必须的是:
binutils
gcc
gcc-mingw
gdb
make
鼠标点击组件前面的循环按钮,会出现组建的版本日期,我们选择最新的版本安装,下图是选中后的四类组件的截图:
binutils 组件
gcc 组件
gcc-mingw 组件
gdb组件
注意还有make组件
选完以后,我们选择下一步,进入安装过程,如下图所示,
一直到下载完成,就ok了!
3.测试是否安装成功
运行cygwin,输入make -v 和 gcc -v 如果能找的,则表示安装成功。
安装NDK
安装ndk很简单,只需要把下载的ndk文件解压缩到指定的目录即可。
配置NDk
修改Cygwin目录/home/username 下的.bash_profile文件,在文件末尾加入如下代码:
NDKROOT=/cygdrive/ndk文件的路径(如NDKROOT=/cygdrive/d/android/ndk)
export NDKROOT
(注意:NDKROOT名字可以自己,ndk文件路径是你 解压缩后ndk的路径,特别注意将斜杠换成反斜杠 和 去掉d:中的:(windows和linux路径区别问题))
2.打开eclipse,新建android工程hello-jni,在工程的根目录下新建jni文件夹
A.在HelloJni.java的关键代码如下
TextView tv = new TextView(this); tv.setText( stringFromJNI() ); setContentView(tv); public native String stringFromJNI();//这个是声明的本地方法 public native String unimplementedStringFromJNI(); //用静态快加载libhello-jni.so文件 static { System.loadLibrary("hello-jni"); }
B.开始,运行cmd,cd进入hello-jni工程的HelloJni.java的目录,javac HelloJni.java生成字节码
C.进入hello-jni工程的bin目录,运用javah生成 .h 文件
Javah -classpath . -jni 包名.类名
3.将生成的 .h 文件的函数头文件,复制到新建的hello-jni.c文件里,注意在hello-jni.c文件里需要引入#include <jni.h>文件,hello-jni.c文件如下:
#include <string.h> #include <jni.h> /* This is a trivial JNI example where we use a native method * to return a new VM String. See the corresponding Java source * file located at: * * apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java */ Jstring //这个是用javah生成的头 Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) { #if defined(__arm__) #if defined(__ARM_ARCH_7A__) #if defined(__ARM_NEON__) #define ABI "armeabi-v7a/NEON" #else #define ABI "armeabi-v7a" #endif #else #define ABI "armeabi" #endif #elif defined(__i386__) #define ABI "x86" #elif defined(__mips__) #define ABI "mips" #else #define ABI "unknown" #endif return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI " ABI "."); }
4.新建android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
简单说明一下
LOCAL_PATH := $(call my-dir)
LOCAL_PATH 表示此时位于工程目录的根目录中 (call my-dir)返回当前目录的地址
LOCAL_MODULE := NewJNI
LOCAL_MODULE 用来区分 Android.mk 中的每一个模块。文件名必须为一 不能有空格 这个
是你以后库文件生成的文件名 编译器会自动给你加上前缀 lib 和后缀.so.
LOCAL_SRC_FILES := com_demo_jni_Jni.c
include $(BUILD_SHARED_LIBRARY)
BUILD_SHARED_LIBRARY 的意思就是建立一个动态共享库库
2.,将写好的hello-jni.c文件和android.mk文件拷贝到jni文件夹下
3.右键工程,properties
点击builders----->new------->program
Location的参数是cygwin的安装路径下的bin文件夹下的bash.exe文件
Working Directory的参数是cygwin的安装路径下的bin文件夹路径
Arguments的参数是:
--login -c “cd/cygdrive/创建的工程的路径&&$NDK/ndk-build”
在这里我的创建的工程的路径是:f/codethree/hello-jni(注意f盘符没有:即不是f:)
$NDK是当时安装cygwin时在cygwin的安装路径下的C:\cygwin64\home\Administrator的.bash_profile文件配置的ndk的解压路径,如下:
NDK=/cygdrive/f/android/androidNDK/android-ndk-r9d-windows-x86_64/android-ndk-r9d
export NDK
注意在勾选Specify working set of relevant resources时指定资源选择你的工程的jni目录即可。
当以上步骤都正确配置无误,保存配置后应该就会自动编译jni目录下的C相关代码并输出相应的.so库文件到工程的libs目录下,libs目录会自动创建。也会自动创建obj目录
编译时控制台输出类似如下:
再运行工程,结果正确。
以后修改了C代码,保存后也会自动触发编译,省时省力。
若是用代码方式实现的编译生成的.so文件的方式,如下:
截图如下;
四、配置NDK路径设置
可以在cygwin中通过vim修改,也可以在windows安装目录中修改 home\<你的用户名>\.bash_profile 文件中最后添加环境变量
NDK=/cygdrive/e/Andriod/develop/android-ndk-r4
export NDK
其中NDK=/cygdrive/<你的盘符>/<android ndk 目录> ,"NDK"这个名字随便起,以后经常用不要太长。
重启cygwin,输入:
cd $NDK
可进入ndk对应目录说明设置OK。
五、编译演示工程
现在就可以编译相关NDK工程了(一些用c/c++写的程序),编译方法如下:
1、在cygwin命令行下,进入android项目工作目录:
cd $NDK
2、依次进入samples\hello-jni目录,(完整路径示例: E:\Andriod\develop\android-ndk-r4\samples\hello-jni)
3、运行
$NDK/ndk-build
注意:该命令$NDK和/ndk-build是连接到一起的,中间没有空格,实际使用时是打入完整的$NDK/ndk-build,不要只打ndk-build。
4、正常编译完成后会在你的项目libs/armeabi目录下生成对应的 .so文件。
至此,window下androidndk的开发环境搭建以及简单的开发案例就结束了。