基于Android ndk的软件开发简介 放映
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 5,359 views

2010年9月5日广州barcamp分享

2010年9月5日广州barcamp分享

Statistics

Views

Total Views
5,359
Views on SlideShare
5,359
Embed Views
0

Actions

Likes
4
Downloads
49
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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