基于Android ndk的软件开发简介 放映

4,649 views
4,508 views

Published on

2010年9月5日广州barcamp分享

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,649
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
50
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

基于Android ndk的软件开发简介 放映

  1. 1. 广州 barcamp(2010 年 9 月 5 日 ) BY 劳永超 http://www.devdiv.net
  2. 2. 基于 Android NDK 的软件开发简介 <ul><li>致谢 </li></ul><ul><li>基于 Android NDK 的原生程序开发 </li></ul><ul><li>简介 - 入门 - 10-20-30 min </li></ul><ul><li>分享适用对象:希望移植 c/c++ 软件到 android 手机的人群、其他任何对这个话题感兴趣的人群 </li></ul><ul><li>程度:入门、介绍性 ( 所以篇幅会控制一下 ) </li></ul>http://www.devdiv.net
  3. 3. 纲要 <ul><li>NDK 简介 </li></ul><ul><li>环境配置 </li></ul><ul><li>开发演示 </li></ul><ul><li>JNI 介绍 </li></ul><ul><li>GDB 调试介绍 </li></ul><ul><li>adb 工具 </li></ul><ul><li>Q&A </li></ul>http://www.devdiv.net
  4. 4. NDK 简介 <ul><li>Native Development Kit 是对 Java SDK 的一个补充 </li></ul><ul><li>基于 c/c++ ( 通过 JNI 和 Java 进行互相调用 ) </li></ul><ul><li>高性能需求 </li></ul><ul><li>移植需求 </li></ul><ul><li>如果需要系统源码的话直接 include 即可 </li></ul>http://www.devdiv.net
  5. 5. 准备条件 <ul><li>android SDK ( 基于 java) + eclipse + ADT 插件 </li></ul><ul><li>了解基于 SDK 的开发,环境能够运行起来 </li></ul><ul><li>安装 NDK( 下载解压即可,这里用 ndk-r4 版本 ) </li></ul><ul><li>安装 cygwin (setup.exe 在线安装,需要安装的软件并不多,全部 default + python+automake 应该就够了 ) -- 使用 *nix 、 mac 的童鞋,忽略我们吧 </li></ul><ul><li>最好给 eclipse 安装上 CDT 插件(别的 IDE 也可) </li></ul>http://www.devdiv.net
  6. 6. cygwin 配置 <ul><li>下载安装好以后第一次运行 </li></ul><ul><li>生成 X:cygwinhomeUSER% 目录 </li></ul><ul><li>修改里面的 .bash_profile ,添加一些变量: </li></ul><ul><li>export NDKR4=/cygdrive/f/google/android-ndk-r4/ </li></ul><ul><li>等等 </li></ul>http://www.devdiv.net
  7. 7. NDK 配置 <ul><li>从 ndk-r4 版本开始,不需要配置了 </li></ul><ul><li>在程序目录下面运行 ndk 脚本,它会根据目录关系来配置好编译环境 </li></ul><ul><li>生成的库是在程序目录 /libs/%target% 下面 </li></ul>http://www.devdiv.net
  8. 8. 编译样例程序 <ul><li>编译 hello-jni( 一起看下 makefile) ,命令行截图如下 </li></ul><ul><li>1. 进入程序目录, 2. 运行 $NDKR4/ndk-build 即可 ( 生成的库在 libs/armeabi 里面 ) </li></ul>http://www.devdiv.net
  9. 9. 运行 <ul><li>进入 eclipse ,导入 hello-jni 程序 </li></ul><ul><li>编辑一下 java 代码 ( 必须重新编译才能打包 libs/armeabi 里面的 lib) </li></ul><ul><li>点击运行 </li></ul>http://www.devdiv.net
  10. 10. JNI 简介 <ul><li>Java Native Interface </li></ul><ul><li>Java + 本地动态库 </li></ul><ul><li>通过 java 定义生成 c/c++ 头文件 </li></ul><ul><li>public native String stringFromJNI(); </li></ul><ul><li>jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) </li></ul>http://www.devdiv.net
  11. 11. 使用 GDB 调试 <ul><li>默认编译是有 -g 参数的,先不要去掉 </li></ul><ul><li>AndroidManifest.xml 里面的 debugable=true </li></ul><ul><li>target 要在 2.2 以上才支持 </li></ul><ul><li>大概是 win 下面的脚本有 bug ,导致 not found gdbserver: /data/data/com.example.hellojni/lib/gdbserver </li></ul><ul><li>自己 push: </li></ul><ul><li>adb push libs/armeabi/gdbserver /data/data/com.example.hellojni/lib/ </li></ul><ul><li>app_process:Nosuch file (同样是 bug,cygwin 下 pull 不了) :adb pull /system/bin/app_process $APP_PROCESS </li></ul><ul><li>$NDKR4/ndk-gdb 开始调试 </li></ul><ul><li>只能调试主线程? </li></ul>http://www.devdiv.net
  12. 12. 集成 ndk 到 eclipse <ul><li>新建一个 eclipse 的 builder </li></ul><ul><li>使用 cygwin, 参数为: </li></ul><ul><li>--login -c &quot;cd $NDKR4/samples/hello-jni && ndk-build&quot; </li></ul><ul><li>个人感觉还不太好用 </li></ul>http://www.devdiv.net
  13. 13. adb 工具 <ul><li>adb logcat 命令查看运行日志 </li></ul><ul><li>c 程序这样调用 : </li></ul><ul><li>#include <android/log.h> ( 从系统源码里面扣出来 ) </li></ul><ul><li>__android_log_write(DEFAULT_UCPLAYER_ANDROID_LOG_LEVEL,&quot;log_tag&quot;,&quot;log sting&quot;); </li></ul>http://www.devdiv.net
  14. 14. FAQ <ul><li>Q: android 是否支持纯 c/c++ 开发应用 ? </li></ul><ul><li>A: 不。上层应用框架是 Java 的,只能通过 JNI 接口来调用 c/c++ 编写的 lib 。 </li></ul><ul><li>Q: 兼容性问题如何处理 ? </li></ul><ul><li>A: 如果不使用 android 系统特定 API 比如其声音、显示等,应该是没有什么兼容性问题的,和普通的 linux 区别不大;如果用到 android 特定的 API 或者私有的函数 ( 存在于一些内置 lib 里面 ) ,则推荐根据 SDK 版本来进行兼容性处理。 </li></ul><ul><li>Q: 还需要了解什么 ? </li></ul><ul><li>A: 实际上很多,包括如何创建一个完整的 Java+native 的工程, JNI 接口规范(比如接口定义、内存使用、异常处理等)、相关工具的使用(头文件生成、 aidl 生成等), JVM 工作原理, Coredump 的利用, Makefile 规范,等等,更多请 Google </li></ul>http://www.devdiv.net
  15. 15. Q&A <ul><li>有问题除了到 Google 官方邮件列表,还可以找: </li></ul><ul><li>gtalk: fluke.l@gmail.com </li></ul><ul><li>论坛 http://www.devdiv.net/bbs </li></ul><ul><li>有一些经验是凭借记忆来进行分享的,由于不够严谨,所以错误难免,请见谅 </li></ul><ul><li>参考: </li></ul><ul><li>http://developer.android.com </li></ul><ul><li>google </li></ul>http://www.devdiv.net

×