1、Enabling the digital future,开发概述,Tao Tu 03/15/2010,课程的目标,通过本课程的讲解,让学员们能够独立搭建Android的开发环境,能够熟练掌握Android下应用程序的开发的整体流程。,Android系统架构,Android系统架构,应用层 Java编写的在虚拟机中运行的程序 核心应用:E-mail, SMS, Calendar, Camera, Contact等 应用框架层 View System: 构建应用程序View ContentProvider: 实现应用程序间数据共享 Resource Manager: 提供非代码资源的访问 Noti
2、fication Manager: 在状态栏中显示提示消息 Activity Manager: 管理应用程序生命周期, 导航回退 Windows Manager: 管理窗口程序 Package Manager: Android 系统内程序管理,Android系统架构,系统运行库层 Bionic系统C库:C语言标准库 Media Framework: 基于PacketVideo OPENCORE SGL: 2D图形引擎 SSL: 位于TCP/IP和各应用层协议之间,为数据通信提供支持 OpenGL ES 1.0: 3D效果支持 SQLite: 关系数据库 Webkit: Web浏览器引擎 Fre
3、eType: 位图和矢量,Android系统架构,Dalvik 虚拟机, 非Java 虚拟机 Dalvik 基于寄存器架构, Java虚拟机是栈机(stack machine) 特点: 虚拟机很小,使用的空间也小 Dalvik没有JIT编译器 常量池已被修改为只使用32位的索引,以简化解释器 它使用自己的字节码,而非Java字节码,Android系统架构,HAL层HAL is the hardware abstraction layer which is defined by Android platform. The HAL layer is between Linux kernel and
4、 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),Android系统架构,Linux内核层 基于Linux 2.6内核, 显示驱动: 基于Linux帧缓冲驱动 键盘驱动 Flash内存驱动: 照相机驱动: 音频驱动: 蓝牙驱动: 基于IEEE 802.
5、15.1标准驱动 WiFi 驱动: 基于IEEE 802.11 标准驱动 Binder IPC: 特殊驱动, 提供进程间通信功能 Power Management: 电池电量等管理,SDK 开发环境的搭建,系统要求: Windows XP及以上版本, Mac OS, Linux 等 软件要求 JDK 1.6 (http:/) Eclipse (http:/www.eclipse.org) Android SDK (http:/ ADT (https:/dl- 开发环境的搭建,安装Java SE JDK 配置JAVA环境变量 增加变量 JAVA_HOME, 值为 JDK 安装路径 在PATH 中
6、增加%JAVA_HOME%bin 创建变量 CLASSPATH, 值为: %JAVA_HOME%lib;%JAVA_HOME%libtools.jar;%JAVA_HOME%libdt.jar;,SDK 开发环境的搭建,SDK 开发环境的搭建,安装 Android SDK 下载和解压Android SDK widows 版本 系统变量PATH中添加 SDK目录下tools 路径 下载安装Eclipse 在Eclipse 中安装ADT 启动Eclipse-Help-Software Updates-Available Software-add site 输入https:/dl- -OK 勾选De
7、veloper Tools - Install 完成, 重启Eclipse 在Eclipse 中配置SDK 启动Eclipse-Windows-Preference-Android-设置SDK 路径- OK,SDK 开发环境的搭建,SDK 开发环境的搭建,SDK 开发环境的搭建,SDK Tools 介绍和使用 Android.bat: 创建和管理 AVDs Emulator: 运行模拟器 Mksdcard: 创建Disk Image, 模拟SD卡 ADB: 连接和调试设备或模拟器 DDMS: Dalvik Debug Monitor Service, 强大调试工具 Hierarchy View
8、er: 层级观察器. 调试和优化UI Monkey: 随机可重复的压力测试工具 TraceView: 图形化分析跟踪日志工具,模拟器的使用,AVD : Android Virtual Devices 模拟类似设备效果 模拟器创建和配置 Android 模拟器运行 模拟器 Skin,模拟器的使用,NDK 开发环境的搭建,Android NDK 简介 NDK 安装和配置 系统和软件需求 搭建 编译NDK 程序 NDK 开发 JNI 接口设计 实现 Android.mk Application.mk,Android NDK 简介,Android NDK是一系列工具的集合 包含了一套交叉编译工具,它可
9、以生产Linux,MAC和Windows(用Cygwin)上的原生ARM的二进制码。 提供了一系列的工具,帮助开发者快速开发C或C+的动态库,并能自动将so和Java应用一起打包成apk。 集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件就可创建出so。,Android NDK 简介,Android NDK提供一套原生API的系统头文件 Libc(c library)headers:C标准库 Libm(math library)headers:标准数学库 JNI interface headers:JNI接口 Libz(Zlib compr
10、ession)headers:压缩库 Liblog(Android logging)header:log库 A Minimal set of headers for C+ support:一部分C+库,NDK 安装和配置,系统和软件需求Android SDK 1.5及以上版本Windows XP/Vista/Mac OS X 10.4.8/X86/Linux交叉编译环境:Cygwin http:/ 安装和配置,NDK开发环境搭建 1.安装Cygwin安装Cygwin时,需要把Devel项的安装由default变成install,其它选项保持不变 2.运行Cygwin,输入“make -v”和”
11、gcc -v”来检测是否安装成功。,NDK 安装和配置,NDK开发环境搭建 2.安装NDK1.把ndk的解压包放到指定目录,如把android-ndk-r3-windows包直接放到D:androidsimulatorpublicAndroidandroid-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 e
12、xport NDKROOT 3. 验证NDK是否安装好 进入NDKROOT目录,然后输入build/host-setup.sh,看装配置是否成功。,NDK 安装和配置,编译NDK程序 1. 编译C/C+程序: 启动cygwin,进入NDK的根目录,输入“make APP=hello-jni” 就会编译hello-jni下的c文件。 2. 将hello-jni工程导入到eclipse中,NDK 安装和配置,NDK 安装和配置,编译NDK程序 3.导入后,展开工程; 4.运行项目。,NDK 安装和配置,编译NDK程序,Android应用程序的结构及程序开发流程,Android平台应用程序主要包括三
13、层结构:JAVA应用程序程序、JNI链接层、C/C+ libraries功能实现层,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应用程序的结构及程序开发流程,Android应用程序的开发流程1、创建Java工程2、编写Java
14、程序3、编写JNI层程序4、C/C+程序的编写及编译5、将动态链接库复制到Java工程,运行Java程序6、编译调试,Android应用程序的结构及程序开发流程,Eclipse开发环境的建立1)下载解压Eclipse开发环境(v3.4.2);2)配置preference参数,主要是ADT参数需要更新; 创建Android工程1)New一个全新的工程;2)创建已有Source的工程; 相关工具: URLtoolseclipse3.4.2.zip 相关文档: URLdocumentsbasicAndroid开发入门指导.doc第四章,Android程序开发及代码调试,Android应用程序的创建和
15、调试,创建HelloActivity项目 New - Android Project Create Project from existing sampleBuild Target: 编译目标的版本 Min SDK Version: 最小运行版本运行HelloActivity Run as Android Project,Android应用程序的创建和调试,Android应用程序的创建和调试,Log方式调试 VERBOSE、DEBUG、INFO、WARN、ERRO 程序开关: if (IS_DEBUG) Log.d(“TAG“, “MSG“); 设备开关: Java: if (Log.isLo
16、ggable(“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 包名/包名.活动名,Android平台帮助信息,网络方式 http:/ 本地 /docs/reference/packages.html Eclipse 鼠标停留在关键词上出现ToolTip,Android平台帮助信息,源代码的参考 frame
17、worksbasecorejava下文件复制到 platformsandroid-Xsources “Ctrl+ 点击” 跟踪类到其源代码Tips: Ctrl+Shift+U 查找当前变量在类中的引用 Ctrl+H 查找当前类或方法,Android平台应用程序结构分析,HelloActivity的源代码 development/samples/HelloActivity/ |- Android.mk |- AndroidManifest.xml |- res | |- layout | | - hello_activity.xml | - values | - strings.xml |- s
18、rc | - com | - example | - android | - helloactivity | - HelloActivity.java,Android平台应用程序结构分析,编译的中间结果 out/target/common/obj/APPS/HelloActivity_intermediates|- classes.dex (字节码) |- classes.jar (JAR文件) |- public_resources.xml (根据resources结构生成的xml) - src |- R.stamp - com - example - android - helloacti
19、vity - R.java (resources生成的文件),应用程序结构分析,编译的中间结果 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,Android平台应用程序结构分析,目标apk文件 out/target/product/generic/obj/APPS/HelloActivity
20、_intermediates/package.apk_FILES/ |- AndroidManifest.xml |- META-INF | |- CERT.RSA | |- CERT.SF | - MANIFEST.MF |- classes.dex |- res | - layout | - hello_activity.xml - resources.arsc,Android编译开发环境及版本管理,编译服务器编译服务器:172.17.195.156 Android开发包管理1)最新开发包:服务器“/usr/local/Adroid_版本号” 2)旧开发包:“/usr/local/mydr
21、oid” Android编译器管理1)编译器目录:服务器“/usr/local/ndk”目录下2)定制编译器目录;如:“/usr/local/ndk_for_Marvell“,内部发布文档及其工具路径:URL: hz-shareTrainingMobile BU TrainingPPT&MaterialsAndroid from TaoTu 用户的管理用户的目录:推荐的服务器上“/home/用户名” ;申请用户时,请发邮件给,邮件中包括用户名,密码,所在的team等,会及时为你开通相关用户。Note:须将自己代码mount到自己账户目录下进行编译,mount的方法请参考, URLdocumen
22、tsbasicPC机如何mount到linux服务器.doc,Android编译开发环境及版本管理,模拟器版本的管理1)官方发布版本: URLsimulatorpublicandroid-sdk-windows-1.5_r1.zip2)内部编译出的版本: URLsimulatorpublicandroid-sdk-windows_1.5_0420.zip Note:主要以官方发布的版本为准 文档发布的管理1)基础文档: URLdocumentsbasic2)技术专题性文档: URLdocumentsTechnical documents,Android编译开发环境及版本管理,Android平台
23、源代码的获取和编译,创建/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,Android平台源代码的获取和编译,源代码编译:$ cd /mydroid $ make
24、应用程序工程编译$ . build/envsetup.sh $ mmm development/samples/HelloActivity/,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,Thanks!,