从 C 开始 Android NDK 实战 [1] : 安装 NDK

 


 

Android 手机已经满大街都是了, 价格也是相当便宜. 许多做 C/C++ 的程序员肯定会这么想, 我可以试一下?

当然. 你可以. 新版的 NDK-r7 已经全面支持 C++ 了, 这是一个好消息. 不过, 丑话说在前头, Android 手机的
硬件, 五花八门, 驱动质量也是参差不齐.

正如 google 声明的, Android 只要 Java 就够了. Android 手机上能跑的, Java 都可以做.  Java 做不了,
需要 C 来做的, Android 手机跑不了 ! 为什么? Java 可以, 更高效的 C 却不行? 它们的承担的任务不一样嘛.
打算用 C 来做的, 那一定是 Java 干不了的重活, 这重活, 那 Android 手机硬件可能也承担不起.

大家都知道, Android 提供了 MediaPlayer 库, 甚至还提供了 C 库, 用这个库来写一个  MediaPlayer 程序应
该是没有问题的吧? 特别对于 google 的程序员, 那不是一天的功夫就可以做好的吗? 可是你见过 google 做的
MediaPlayer 播放器吗? 没有!
 
Google 在 NDK 说明文档的第一页第一段这么写着, " NDK 不是为了解决 Java 的什么问题, 使用 C 也不一定能
带来效率. " 潜台词是, NDK 仅仅为了满足 C 程序员的好奇心 !

这么说起来, 你根本不需要继续往下看了 ? 是的. 我相信你一定有这样的好奇心, 要搞个明白才行. 如果你坚持
看下去, 我也会送一个份小礼, 告诉你 NDK 能做什么. "这什么", 不是他们说的"那什么".

那什么, 我们就开始吧.

你在这里看到的, 将和所有你在其它地方看到的所谓"教程"都不一样. 我们从 C 开始, 简单到你不相信.

你要做的第一件事, 到 google 的网站上下载 Android SDK. 慢...慢....! 你只要下载 Android NDK for linux.

很难想象 在 windows 下用 make, gcc,,,,,行吗? 还是按老规矩来, 到 linux 下面用吧. 我说你只要下载 NDK,
还有一层意思是说, 你千万不要下载 eclipse 编辑器, 这个东西是 Java 上跑的, 慢得受不了. 注意, 千万不要
下载这个!!!

NDK 不需要特别的 IDE 或者 Editor. NDK gcc 跟其它 gcc 长得完全一样. 我看见很多程序员用 vi. 乖乖, 对于
使用 vi 的程序员, 我只能脱帽致敬! 我似乎看到古老的打字机. 建议你找个好用的吧. 例如 ubuntu 自带的 geany,
Fedora 自带的 gedit.

如果只做 NDK, 那不需要下载 Android SDK ( java ). 如果真的想下载 SDK ( java ) 最好下载 windows 版本的.
( 没错, windows 版本 ! ) 再一次叮嘱, 在 windows 下使用 SDK 也不要用 eclipse ! 就用 记事本 ( notepad )
或者下载一个轻便的 C/C++/java 编辑器, 例如前面说的 geany ( windows 版 )

所有的 Android 教程(包括 google 的正本教程 ) 都告诉你要下载 eclipse, 那是给不懂 C 的 Java 程序员用的.
不是你 C 程序员该用的. C 程序员最讲效率了, 写的程序讲效率, 写程序本身也要讲效率. eclipse 光启动就需要
一袋烟的功夫!

下载了 NDK 没有 ? 慢...慢...! 不要按 google 的教程来做, 听我的 !

把那个 NDK 的 tar 文件 ( android-ndk-r7-linux-x86.tar.tar ) 解到任意一个目录下, 例如, /NDK 目录.

看看文档 /NDK/docs/STANDALONE-TOOLCHAIN.html. 不要看得太明白, 千万不要按它说的做! 跟我做就行了. 执行

/NDK/build/tools/make-standalone-toolchain.sh --ndk-dir=/NDK

这时, 它提示已经生成一个 tar 文件放到 /temp 目录下. 取出来, 解到一个目录下, 那个目录名比较长, 我们改为
短一点的, 例如, /NDK-gcc 现在你已经有了一个完整的 NDK gcc 工具链, 它可以工作了. 为了方便, 你应该在 系统
 PATH 中加入路径 /NDK-gcc/bin. 它的 gcc 名字是 arm-linux-androideabi-gcc ( g++ )

这就行了? Yes ! 要不试一试? 来段经典 hello 程序.

hello.cpp 文件


#include <stdio.h>

 

int main( int argc, char **argv )

{

 for( int i=0; i<100; i++ )

 printf( "hello world ! [%d]\n", i );

  

 return 0 ;

}

 

makefile 文件

prefix=arm-linux-androideabi-

G++  = ${prefix}g++ 
GCC  = ${prefix}gcc

hello : hello.o
 ${G++} -o hello hello.o -static

hello.o : hello.cpp
 ${G++} -c hello.cpp


别忘记下面这一步

make

请注意, 链接时使用 -static 选项.

拿到真机上试一下? 那需要 SDK 或其它上传工具. 下面使用 SDK adb 工具

进入手机  adb shell
su
mkdir /data/data/test
exit
exit
这时退回 windows 下, 推送文件
adb push hello /data/data/test
再进入手机 adb shell
chmod 777 /data/data/test/hello
/data/data/test/hello
看到没有? hello world !

简单不? 我前面说过, NDK gcc 就是一个 gcc !  跟其它的 gcc 一样.

前面说过, 你有耐心看完这篇文章的话, 我会告诉你 NDK 能做什么: 它能做一般的程序. 非 JNI 程序. 当然,
这样的程序是不是能让用户来安装的, 它只能预装. 通常这样的程序( 那一定是 Java 干不了的重活 ) 可能
还需要硬件的驱动程序配合. 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值