• 1. Enabling the digital futureAndroid 开发概述 Tao Tu 03/15/2010
  • 2. Agenda课程的目标 Android 系统架构 SDK 开发环境的搭建 应用程序的创建和调试 模拟器的使用 NDK开发环境的搭建 Android应用程序的结构及程序开发流程 源代码的获取和编译
  • 3. 课程的目标 通过本课程的讲解,让学员们能够独立搭建Android的开发环境,能够熟练掌握Android下应用程序的开发的整体流程。
  • 4. Android系统架构
  • 5. Android系统架构应用层 Java编写的在虚拟机中运行的程序 核心应用:E-mail, SMS, Calendar, Camera, Contact等 应用框架层 View System: 构建应用程序View ContentProvider: 实现应用程序间数据共享 Resource Manager: 提供非代码资源的访问 Notification Manager: 在状态栏中显示提示消息 Activity Manager: 管理应用程序生命周期, 导航回退 Windows Manager: 管理窗口程序 Package Manager: Android 系统内程序管理
  • 6. Android系统架构系统运行库层 Bionic系统C库:C语言标准库 Media Framework: 基于PacketVideo OPENCORE SGL: 2D图形引擎 SSL: 位于TCP/IP和各应用层协议之间,为数据通信提供支持 OpenGL ES 1.0: 3D效果支持 SQLite: 关系数据库 Webkit: Web浏览器引擎 FreeType: 位图和矢量
  • 7. Android系统架构Dalvik 虚拟机, 非Java 虚拟机 Dalvik 基于寄存器架构, Java虚拟机是栈机(stack machine) 特点: 虚拟机很小,使用的空间也小 Dalvik没有JIT编译器 常量池已被修改为只使用32位的索引,以简化解释器 它使用自己的字节码,而非Java字节码
  • 8. Android系统架构HAL层 HAL is the hardware abstraction layer which is defined by Android platform. The HAL layer is between Linux kernel and android C++ libraries, it provides the following functions: Access to hardware Access to kernel drivers or proprietary user-space drivers Support for the driver without standard APIs (e.g. vibrator)
  • 9. Android系统架构Linux内核层 基于Linux 2.6内核, 显示驱动: 基于Linux帧缓冲驱动 键盘驱动 Flash内存驱动: 照相机驱动: 音频驱动: 蓝牙驱动: 基于IEEE 802.15.1标准驱动 WiFi 驱动: 基于IEEE 802.11 标准驱动 Binder IPC: 特殊驱动, 提供进程间通信功能 Power Management: 电池电量等管理
  • 10. SDK 开发环境的搭建系统要求: Windows XP及以上版本, Mac OS, Linux 等 软件要求 JDK 1.6 (http://java.sun.com) Eclipse (http://www.eclipse.org) Android SDK (http://developer.android.com/sdk/index.html) ADT (https://dl-ssl.google.com/android/eclipse)
  • 11. SDK 开发环境的搭建安装Java SE JDK 配置JAVA环境变量 增加变量 JAVA_HOME, 值为 JDK 安装路径 在PATH 中增加%JAVA_HOME%\bin 创建变量 CLASSPATH, 值为: %JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;
  • 12. SDK 开发环境的搭建
  • 13. SDK 开发环境的搭建安装 Android SDK 下载和解压Android SDK widows 版本 系统变量PATH中添加 SDK目录下tools 路径 下载安装Eclipse 在Eclipse 中安装ADT 启动Eclipse->Help->Software Updates->Available Software->add site 输入https://dl-ssl.google.com/android/eclipse ->OK 勾选Developer Tools -> Install 完成, 重启Eclipse 在Eclipse 中配置SDK 启动Eclipse->Windows->Preference->Android->设置SDK 路径-> OK
  • 14. SDK 开发环境的搭建
  • 15. SDK 开发环境的搭建
  • 16. SDK 开发环境的搭建SDK Tools 介绍和使用 Android.bat: 创建和管理 AVDs Emulator: 运行模拟器 Mksdcard: 创建Disk Image, 模拟SD卡 ADB: 连接和调试设备或模拟器 DDMS: Dalvik Debug Monitor Service, 强大调试工具 Hierarchy Viewer: 层级观察器. 调试和优化UI Monkey: 随机可重复的压力测试工具 TraceView: 图形化分析跟踪日志工具
  • 17. 模拟器的使用AVD : Android Virtual Devices 模拟类似设备效果 模拟器创建和配置 Android 模拟器运行 模拟器 Skin
  • 18. 模拟器的使用
  • 19. NDK 开发环境的搭建Android NDK 简介 NDK 安装和配置 系统和软件需求 搭建 编译NDK 程序 NDK 开发 JNI 接口设计 实现 Android.mk Application.mk
  • 20. Android NDK 简介Android NDK是一系列工具的集合 包含了一套交叉编译工具,它可以生产Linux,MAC和Windows(用Cygwin)上的原生ARM的二进制码。 提供了一系列的工具,帮助开发者快速开发C或C++的动态库,并能自动将so和Java应用一起打包成apk。 集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件就可创建出so。
  • 21. Android NDK 简介Android NDK提供一套原生API的系统头文件 Libc(c library)headers:C标准库 Libm(math library)headers:标准数学库 JNI interface headers:JNI接口 Libz(Zlib compression)headers:压缩库 Liblog(Android logging)header:log库 A Minimal set of headers for C++ support:一部分C++库
  • 22. NDK 安装和配置系统和软件需求 Android SDK 1.5及以上版本 Windows XP/Vista/ Mac OS X 10.4.8/X86/ Linux 交叉编译环境:Cygwin http://www.cygwin.com/
  • 23. NDK 安装和配置NDK开发环境搭建 1.安装Cygwin 安装Cygwin时,需要把Devel项的安装由default变成install,其它选项保持不变 2.运行Cygwin,输入“make -v”和”gcc -v”来检测是否安装成功。
  • 24. NDK 安装和配置NDK开发环境搭建 2.安装NDK 1.把ndk的解压包放到指定目录,如把android-ndk-r3-windows包直接放到D:\android\simulator\public\Android\android-sdk-windows-2.0目录。 2. 修改cygwin目录下的.bash_profile文件尾部添加以下代码,然后启动cygwin。 NDKROOT=/cygdrive/d/android/simulator/public/Android/android-sdk-windows-2.0/android-ndk-r3-windows export NDKROOT 3. 验证NDK是否安装好 进入NDKROOT目录,然后输入build/host-setup.sh,看装配置是否成功。
  • 25. NDK 安装和配置编译NDK程序 1. 编译C/C++程序: 启动cygwin,进入NDK的根目录,输入“make APP=hello-jni” 就会编译hello-jni下的c文件。 2. 将hello-jni工程导入到eclipse中
  • 26. NDK 安装和配置
  • 27. NDK 安装和配置编译NDK程序 3.导入后,展开工程; 4.运行项目。
  • 28. NDK 安装和配置编译NDK程序
  • 29. Android应用程序的结构及程序开发流程Android平台应用程序主要包括三层结构:JAVA应用程序程序、JNI链接层、C/C++ libraries功能实现层
  • 30. Java应用程序层 主要应用程序及Framework:Media player, Photo album 等。 Native C/C++ Libs 层 Video/Audio/Image Codec, OpenGL, OPENCore架构等。 JNI(C/C++)层 Java应用程序层和Native Libs层相互沟通的一个桥梁,通过JNI层实现了Java和Native Libs层函数的调用,以及数据的共享。Android应用程序的结构及程序开发流程
  • 31. Android应用程序的开发流程 1、创建Java工程 2、编写Java程序 3、编写JNI层程序 4、C/C++程序的编写及编译 5、将动态链接库复制到Java工程,运行Java程序 6、编译调试 Android应用程序的结构及程序开发流程
  • 32. Eclipse开发环境的建立 1)下载解压Eclipse开发环境(v3.4.2); 2)配置preference参数,主要是ADT参数需要更新; 创建Android工程 1)New一个全新的工程; 2)创建已有Source的工程; 相关工具: URL\tools\eclipse3.4.2.zip 相关文档: URL\documents\basic\Android开发入门指导.doc第四章Android程序开发及代码调试
  • 33. Android应用程序的创建和调试创建HelloActivity项目 New -> Android Project Create Project from existing sample Build Target: 编译目标的版本 Min SDK Version: 最小运行版本 运行HelloActivity Run as Android Project
  • 34. Android应用程序的创建和调试
  • 35. Android应用程序的创建和调试Log方式调试 VERBOSE、DEBUG、INFO、WARN、ERRO 程序开关: if (IS_DEBUG) { Log.d("TAG", "MSG"); 设备开关: Java: if (Log.isLoggable("TAG", Log.INFO)) { Log.d("TAG", "MSG");} Adb Shell: setprop log.tag.TAG VERBOSE Breakpoint: Toggle breakpoint Debug as F5 step into F6 step over am tools adb shell am start –n {包名}/{包名}.活动名
  • 36. Android平台帮助信息网络方式 http://developer.android.com/reference/ 本地 /docs/reference/packages.html Eclipse 鼠标停留在关键词上出现ToolTip
  • 37. Android平台帮助信息源代码的参考 \frameworks\base\core\java下文件复制到 \platforms\android-X\sources “Ctrl+ 点击” 跟踪类到其源代码 Tips: Ctrl+Shift+U 查找当前变量在类中的引用 Ctrl+H 查找当前类或方法
  • 38. Android平台应用程序结构分析HelloActivity的源代码 development/samples/HelloActivity/ |-- Android.mk |-- AndroidManifest.xml |-- res |   |-- layout |   |   `-- hello_activity.xml |   `-- values |       `-- strings.xml |-- src |   `-- com |       `-- example |           `-- android |               `-- helloactivity |                   `-- HelloActivity.java
  • 39. Android平台应用程序结构分析编译的中间结果 out/target/common/obj/APPS/HelloActivity_intermediates|-- classes.dex                (字节码) |-- classes.jar                  (JAR文件) |-- public_resources.xml (根据resources结构生成的xml) `-- src     |-- R.stamp     `-- com         `-- example             `-- android                 `-- helloactivity                     `-- R.java        (resources生成的文件)
  • 40. 应用程序结构分析编译的中间结果 classes |-- META-INF |   `-- MANIFEST.MF `-- com     `-- example         `-- android             `-- helloactivity                 |-- HelloActivity.class                 |-- R$attr.class                 |-- R$id.class                 |-- R$layout.class                 |-- R$string.class                 `-- R.class
  • 41. Android平台应用程序结构分析目标apk文件 out/target/product/generic/obj/APPS/HelloActivity_intermediates/package.apk_FILES/ |-- AndroidManifest.xml |-- META-INF |   |-- CERT.RSA |   |-- CERT.SF |   `-- MANIFEST.MF |-- classes.dex |-- res |   `-- layout |       `-- hello_activity.xml `-- resources.arsc
  • 42. Android编译开发环境及版本管理编译服务器 编译服务器:172.17.195.156 Android开发包管理 1)最新开发包:服务器“/usr/local/Adroid_版本号” 2)旧开发包:“/usr/local/mydroid” Android编译器管理 1)编译器目录:服务器“/usr/local/ndk”目录下 2)定制编译器目录;如:“/usr/local/ndk_for_Marvell“
  • 43. 内部发布文档及其工具路径: URL: \\hz-share\Training\Mobile BU Training\PPT&Materials\Android from TaoTu 用户的管理 用户的目录:推荐的服务器上“/home/用户名” ; 申请用户时,请发邮件给wliu@arcsoft.com.cn,邮件中包括用户名,密码,所在的team等,会及时为你开通相关用户。 Note: 须将自己代码mount到自己账户目录下进行编译,mount的方法请参考, URL\documents\basic\PC机如何mount到linux服务器.docAndroid编译开发环境及版本管理
  • 44. 模拟器版本的管理 1)官方发布版本: URL\simulator\public\android-sdk-windows-1.5_r1.zip 2)内部编译出的版本: URL\simulator\public\android-sdk-windows_1.5_0420.zip Note:主要以官方发布的版本为准 文档发布的管理 1)基础文档: URL\documents\basic 2)技术专题性文档: URL\documents\Technical documentsAndroid编译开发环境及版本管理
  • 45. Android平台源代码的获取和编译创建~/bin文件夹: $ cd ~ $ mkdir bin $ echo $PATH 下载repo 脚本: $ curl http://android.git.kernel.org/repo >~/bin/repo $ chmod a+x ~/bin/repo 初始化repo $ mkdir mydroid $ cd mydroid $ repo init -u git://android.git.kernel.org/platform/manifest.git 同步代码 $ repo sync  
  • 46. Android平台源代码的获取和编译源代码编译:  $ cd ~/mydroid   $ make 应用程序工程编译  $ . build/envsetup.sh   $ mmm development/samples/HelloActivity/
  • 47. Android平台源代码的获取和编译Linux 环境中, 下载 Android 源代码 Required Packages: Git 1.5.4 or newer and the GNU Privacy Guard.  JDK 5.0, update 12 or higher. flex, bison, gperf, libsdl-dev, libesd0-dev, libwxgtk2.6-dev (optional), build-essential, zip, curl.   $ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zipcurl libncurses5-dev zlib1g-dev
  • 48. Thanks!