NDK环境搭建和使用

1 篇文章 0 订阅
1 篇文章 0 订阅

1、 说明:

a) 搭载android NDK环境需要在eclipse下配置android SDK、ADT等

b) 具体参照博客:http://www.metsky.com/archives/523.html

2、 搭载android NDK环境

a) 下载android NDK

i. 地址:http://developer.android.com/tools/sdk/ndk/index.html

ii. 选择windows版的

b) 解压到工作目录,如G:\qjc\soft\android-ndk-r8b-windows\android-ndk-r8b:

c) Android NDK包含build、docs、samples、sources、GNUmakefile、ndk-build、ndk-gdb及readme等内容,samples下面包含几个实例开发演示项目,可以参照这些示例进行开发

3、 下载Cygwin

a) 由于NDK开发大都涉及到C/C++在GCC环境下编译、运行,所以在Windows环境下,需要模拟Linux模拟编译环境,那么就需要下载Cygwin来在windows环境下模拟Linux环境

b) 下载地址:http://www.cygwin.com/,点击setup.exe:




c) 下载的是一个setup.exe安装文件,具体使用过程如下:

i. 运行setup程序,第一步图略,直接点击Next进入下一步

ii. 选择安装方式,第一次可以采用Direct Connection在线下载安装,如有现成的离线包,可以选择离线安装(Install from Local Directory)

iii. 选择安装目录,比如C:\Cygwin,(注:此目录是指Cygwin最终的安装目录,不是下载文件暂存目录)

iv. 设置本地包暂存路径,比如:

F:\soft\Cygwin\

v. 设置网络连接方式

vi. 选择下载站点地址(注:起初尝试几个看哪个速度快就用哪个地址,如果感觉不是很快可以取消,再重选一个)

vii. 等待加载安装项载入,选择安装项

注:我们编译NDK,在默认设置下,只需选择Devel(点击列表中Devel,将 后面的Default改为Install,图中箭头所示),其它均为默认状态

viii. 等待下载完成

注:下载完成时间决定于你选择的安装包数量及网络连接速度,比如按照本文 默认的选择方式,可能需要4-5个小时,下载后大概968M,下载完成后会自 动安装到上文设置的安装目录

提醒:第一次下载完成后,最好把下载的包目录做个备份,下次安装同样的环 境可以直接使用离线安装方式(第二步中选择本地安装)。

4、 验证Cygwin环境

a) 安装完成后运行Cygwin.bat一次(在C:\cygwin下),以便创建一些用户环境文件

b) 输入make -v和gcc -v

c) 如果检测成功,会有make和gcc相关版本信息打印出来,如下图:

5、 配置NDK的路径

a) 在windows安装目录中修改 home\<你的用户名>\.bash_profile 文件(如:C:\cygwin\home\Administrator)中最后添加环境变量

NDK=/cygdrive/g/qjc/soft/android-ndk-r8b-windows/android-ndk-r8b

export NDK

其中:NDK=/cygdrive/<你的android NDK存放的盘的盘符>/<android ndk 目录> ,"NDK"这个名字随便起,以后经常用不要太长

b) 重启cygwin,输入cd $NDK,可以进行NDK相应的目录说明配置正确

6、 编译示例程序

a) 在cygwin命令行下,依次输入cd $NDK cd samples cd hello-jni

b) 运行,输入$NDK/ndk-build

注:该命令$NDK和/ndk-build是连接到一起的,中间没有空格,实际使用时是打入完整的$NDK/ndk-build,不要只打ndk-build

c) 正常编译完成后会在你的项目libs/armeabi目录下生成对应的 .so文件

7、 测试hello-jni

a) 在Eclipse中导入hello-jni工程

b) 路径:G:\qjc\soft\android-ndk-r8b-windows\android-ndk-r8b\samples\hellp-jni

c) 运行,run as->android application,结果如下图:

8、 Hello-jni分析

a) 打开jni文件夹中的hello-jni.cpp,有这么一句:

return (*env)->NewStringUTF(env, "Hello from JNI !");

实际上我们上面android模拟器TextVIew显示的就是这句话的返回结果

b) 现在我们对程序进行修改

将return (*env)->NewStringUTF(env, "Hello from JNI !");改为

return (*env)->NewStringUTF(env, "Hello from JNI and I change it!");

运行结果:

c) 按道理应该显示的是Hello from JNI and I change it!

i. 原因:修改了之后没有编译,所以要再次执行第6步

ii. 执行了第6步之后再看运行结果:

d) 每次修改了之后都要手动进行编译,这样比较麻烦,下面介绍一种简单的方法(增加一个C-Builer):

i. 右击项目选择properties,出现下面对话框:

ii. 在左边选择Builders,在右边点击New这个按钮,出现

iii. 选择Program,点击OK,出现配置编译器对话框:

iv. name改为C_Builder

v. 设置Location:<你cygwin安装路径>\bin\bash.exe,如:C:\cygwin\bin\bash.exe

vi. 设置Arguments:

--login@-c@"cd@/cygdrive/g/qjc/soft/android-ndk-r8b-windows/android-ndk-r8b/samples/hello-jni@&&@$NDK/ndk-build"(这是我的目录,自己的需要适当修改,不能改动的,--login –c 是神马意思我也不懂,为了方便表示,上面字符串中的4个@其实是空格,输入的时候请换为空格)

Arguments这串参数实际是给bash.exe命令行程序传参数,进入要编译的程序目录,然后运行ndk-build编译程序

vii. 接着切换到Refresh选项卡,给Refresh resources upon completion打上钩

viii. 然后切换到Build Options选项卡,勾选上最后三项

ix. 之后点击Specify Resources按钮,选择资源目录,勾选你的项目目录即可

x. 最后点击Finish,注:如果你配置的编译器在其它编译器下边,记得一定要点Up按钮,把它排到第一位,否则C代码的编译晚于Java代码的编译,会造成你的C代码要编译两次才能看到最新的修改

e) 再次测试

再次改return (*env)->NewStringUTF(env, "hello");

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值