Android开发概览

2,558 views

Published on

2010年8月28日 广州UC DevDiv技术沙龙 fluke android开发分享

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

No Downloads
Views
Total views
2,558
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
38
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Android开发概览

  1. 1. Dev Div 移动开发社区广州沙龙 BY 劳永超 http://www.devdiv.net
  2. 2. Android 平台特性及开发介绍 <ul><li>致谢 </li></ul><ul><li>分享一下 android 开发的概况 </li></ul><ul><li>介绍 android 的特性 </li></ul><ul><li>45 分钟左右分享 欢迎打断 </li></ul><ul><li>15 分钟交流 </li></ul>http://www.devdiv.net
  3. 3. 主要内容 <ul><li>Android 设备介绍 </li></ul><ul><li>热门应用介绍 </li></ul><ul><li>应用开发环境搭建 </li></ul><ul><li>Android 应用开发框架概览 </li></ul><ul><li>NDK 环境介绍 </li></ul>http://www.devdiv.net
  4. 4. Android 设备 http://www.devdiv.net
  5. 5. 设备特性 & 系统特性 <ul><li>大尺寸、高分辨率( HVGA 以上)、(电容式)触摸屏、可旋转屏幕 </li></ul><ul><li>传感器应用(触摸、重力、加速度、 GPS 位置等) </li></ul><ul><li>CPU 频率高、视频硬件解码、图形硬件加速 </li></ul><ul><li>高速网络( HSDPA,WIFI ) </li></ul><ul><li>多点触摸(实际上用的并不多) </li></ul><ul><li>电子市场 ( Android market ,目前已有数万应用供下载) </li></ul><ul><li>i18n 做得很好 </li></ul><ul><li>特别的系统通知栏 </li></ul>http://www.devdiv.net
  6. 6. 必须面对的问题 <ul><li>山寨化趋势很严重 ( 硬件多样化 ) </li></ul><ul><li>改制系统( Ophone, lephone? ) </li></ul><ul><li>兼容性问题必须考虑? </li></ul>http://www.devdiv.net
  7. 7. Android 热门应用 <ul><li>Google 系列服务 ( 联系人同步、 Email 、 Gtalk) </li></ul><ul><li>游戏(目前益智类的比较多) </li></ul><ul><li>LBS 、 SNS (FourSquare, Google Map, Google Places, Latitude ,导航、 Layar Browser) </li></ul><ul><li>视频 ( Flash 、 youtube 、 Animal Planet 、优库) </li></ul><ul><li>资讯天气( UC 桌面、天气频道) </li></ul>http://www.devdiv.net
  8. 8. Layar Reality Browser http://www.devdiv.net
  9. 9. Android 体验 <ul><li>简单演示下模拟器上面的几个基本操作 </li></ul><ul><li>触摸 </li></ul><ul><li>电话 </li></ul><ul><li>程序进入退出 </li></ul>http://www.devdiv.net
  10. 10. Android 开发概览 <ul><li>Google 主导开发的基于 Linux+ 自家 Java 虚拟机( Dalvik )的手机系统 </li></ul><ul><li>开源,可以从 android.git.kernel.org 获取源码 </li></ul><ul><li>Android 的核心是一个应用框架 ( 任务调度、窗口管理、任务间通信、视图管理、软件包管理、电话管理、资源管理、位置管理、通知管理等 ) </li></ul><ul><li>应用程序一般离不开应用框架 </li></ul>http://www.devdiv.net
  11. 11. Android 开发概览 http://www.devdiv.net
  12. 12. Android 程序基本骨架 <ul><li>一个应用程序的基本骨架 </li></ul><ul><li>AndroidManifest.xml ( 程序的各大组件都在里面有描述 ) </li></ul><ul><li>主 Activity 类(入口) </li></ul><ul><li>资源( Layout, 图片,文字等) </li></ul><ul><li>下面看一个 AndroidManifest.xml </li></ul>http://www.devdiv.net
  13. 13. Android 开发概览 <ul><li><?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?> </li></ul><ul><li><manifest . . . > </li></ul><ul><li><application . . . > </li></ul><ul><li>< activity android:name=&quot;com.example.project.FreneticActivity&quot; </li></ul><ul><li>android:icon=&quot;@drawable/small_pic.png&quot; </li></ul><ul><li>android:label=&quot;@string/freneticLabel&quot; </li></ul><ul><li>. . . > </li></ul><ul><li></activity> </li></ul><ul><li>. . . </li></ul><ul><li></application> </li></ul><ul><li></manifest> </li></ul>http://www.devdiv.net
  14. 14. 演示 AndroidSkeleton 程序 <ul><li>IDE 中创建(导入工程) </li></ul><ul><li>查看 AndroidMenifest.xml 文件 </li></ul><ul><li>查看主类 </li></ul><ul><li>菜单处理 </li></ul><ul><li>Intent 打开 </li></ul><ul><li>Activity 退出 </li></ul><ul><li>资源 </li></ul>http://www.devdiv.net
  15. 15. 开发环境搭建 <ul><li>android SDK ( 通过安装器来安装,从 http://developer.android.com 下载 ) </li></ul><ul><li>eclipse + ADT 插件 (插件地址也可以从 developer.android.com 获取) </li></ul><ul><li>从 eclipse 配置 android SDK 路径 </li></ul><ul><li>NDK 后面讲 </li></ul>http://www.devdiv.net
  16. 16. Android 开发入门 <ul><li>文档 docs 目录下面 </li></ul><ul><li>自带 Samples </li></ul><ul><li>源码 </li></ul>http://www.devdiv.net
  17. 17. Android 组件介绍 <ul><li>参考 docs/guide/topics/fundamentals.html </li></ul><ul><li>Activity ( 界面类 ) </li></ul><ul><li>Services ( 后台服务 ) </li></ul><ul><li>Broadcast Receiver </li></ul><ul><li>Content Provider (ContentResolver) </li></ul><ul><li>生命周期问题 </li></ul><ul><li>Intent ( 组件之间互相调用的纽带 -- 异步消息 ) </li></ul>http://www.devdiv.net
  18. 18. Activity 和用户界面开发 <ul><li>可视界面 </li></ul><ul><li>界面资源定义 </li></ul><ul><li>输入事件 </li></ul>http://www.devdiv.net
  19. 19. 可视界面 <ul><li>丰富的界面组件( TextView,WebView,List,Grid,Button,Checkbox,Radio,Dialog,Progressbar,Toast.. ) </li></ul><ul><li>onCreate() setContentView() </li></ul><ul><li>资源组织 ( 排版、图片、字符 -i18n) </li></ul>http://www.devdiv.net
  20. 20. 界面排版 <ul><li>res/layout </li></ul><ul><li>xml 方式描述 </li></ul><ul><li>LinearLayout </li></ul><ul><li>RelativeLayout </li></ul><ul><li>FrameLayout </li></ul><ul><li>界面类 </li></ul>http://www.devdiv.net
  21. 21. Android 资源定义 <ul><li>多分辨率支持 </li></ul><ul><li>i18n 支持 </li></ul><ul><li>二进制文件支持 </li></ul><ul><li>被编译成 R 类 </li></ul>http://www.devdiv.net
  22. 22. Android 资源使用 <ul><li>通过资源 ID 来访问定义好的资源 </li></ul><ul><li>mBtnRecentCall = (Button)findViewById( R.id.button_recentcall ); </li></ul><ul><li>versionName.setText( R.string.versionName ); </li></ul><ul><li>LayoutInflater :从 xml 中读取一个 view 布局的方法。 </li></ul><ul><li>View v = Inflater.inflate( resourceid , null); </li></ul>http://www.devdiv.net
  23. 23. Android 视图结构 <ul><li>跑题了, View 没讲。。 </li></ul><ul><li>Layout 是一种 ViewGroup </li></ul>http://www.devdiv.net
  24. 24. 数据和界面之间的绑定 <ul><li>Adapter 与 AdapterView </li></ul><ul><li>Gallery, ListView, and Spinner 是最常见的 AdapterView, 实际上是 ViewGroup, 他们的子 View 是通过 adapter 的 getView 来获得的。 </li></ul><ul><li>具体传递给 getView 的参数在不同的 AdapterView 里面是不同,这里不展开讨论 </li></ul>http://www.devdiv.net
  25. 25. 主动画图 <ul><li>游戏可能需要 </li></ul><ul><li>GLSurface </li></ul><ul><li>SurfaceView </li></ul><ul><li>按照自己的帧率主动更新画面 </li></ul>http://www.devdiv.net
  26. 26. 输入事件 <ul><li>屏幕触摸事件会通过 ViewGroup 下发到事件区域的 View 中 </li></ul><ul><li>要处理这些事件只要重载 View.OnClickListener 即可。 </li></ul><ul><li>如果是按键责重载 onKeyDown() </li></ul>http://www.devdiv.net
  27. 27. Intent 的结构 <ul><li>就是一个结构化的消息 </li></ul><ul><li>Action ACTION_VIEW, ACTION_EDIT 等 自定义比如 &quot;my.pkg.action.SOME_ACTION&quot; </li></ul><ul><li>Data 数据内容 </li></ul><ul><li>Type MIME 类型 </li></ul><ul><li>Catetory 区分 Intent 类别 </li></ul><ul><li>系统特殊用途的 CATEGORY_LAUNCHER </li></ul><ul><li>其他 </li></ul><ul><li>Component 具体的类名 </li></ul><ul><li>Extra (dict) </li></ul><ul><li>Flags </li></ul>http://www.devdiv.net
  28. 28. Intent 带来的好处 <ul><li>使得 Activity 的耦合度非常低 </li></ul><ul><li>组件可重用 </li></ul><ul><li>IntentChooser </li></ul>http://www.devdiv.net
  29. 29. Intent 例子 <ul><li>打开网页: </li></ul><ul><li>1. Uri uri = Uri.parse(&quot;http://google.com&quot;); </li></ul><ul><li>2. Intent it = new Intent(Intent.ACTION_VIEW, uri); </li></ul><ul><li>3. startActivity(it); </li></ul><ul><li>打开另外一个 Activity </li></ul><ul><li>Intent i = new Intent(this, BookList.class); </li></ul><ul><li>// i.setAction(&quot; areader.action.AREADER_BOOKLIST &quot;); </li></ul><ul><li>startActivity(i); </li></ul>http://www.devdiv.net
  30. 30. Intent-Receiver <ul><li>Intent 接收方 </li></ul><ul><li>还是 AndroidManifest.xml </li></ul><ul><li><activity android:name=&quot;.BookList&quot;> </li></ul><ul><li><intent-filter> </li></ul><ul><li><action android:name=&quot;areader.action.AREADER_BOOKLIST&quot; /> </li></ul><ul><li><category android:name=&quot;android.intent.category.DEFAULT&quot; /> </li></ul><ul><li></intent-filter> </li></ul><ul><li></activity> </li></ul>http://www.devdiv.net
  31. 31. 生命周期 -Activity <ul><li>OnCreate 创建 </li></ul><ul><li>OnDestroy 消亡 </li></ul><ul><li>onPause 保存数据 </li></ul><ul><li>onResume 恢复数据 </li></ul>http://www.devdiv.net
  32. 32. 生命周期 -Service http://www.devdiv.net
  33. 33. BroadCast Receiver <ul><li>这类组件用于接受广播,然后返回。 </li></ul><ul><li>广播组件在返回以后被视为非活动状态 </li></ul><ul><li>对于非活动状态的 BroadCast Receiver 的生命周期,这次不做探讨 ( 参考 /docs/guide/topics/fundamentals.html#lcycles) 。 </li></ul>http://www.devdiv.net
  34. 34. BroadCast Receiver 例子 <ul><li>接受系统启动的广播,如来电通程序一定会这样做: </li></ul><ul><li><receiver android:name=&quot;.BootReceiver&quot;> </li></ul><ul><li><intent-filter> </li></ul><ul><li><action android:name=&quot; android.intent.action.BOOT_COMPLETED &quot; /> </li></ul><ul><li></intent-filter> </li></ul><ul><li></receiver> </li></ul><ul><li>public void onReceive(Context context, Intent intent) { </li></ul><ul><li>context.startService(new Intent(context, LocationService.class)); // 让 service 来做吧,我的生命周期结束了 </li></ul><ul><li>} </li></ul><ul><li>不但可以通过 manifest.xml 静态注册,还可以通过 registerReceiver 动态注册 </li></ul>http://www.devdiv.net
  35. 35. Service <ul><li>不带界面的逻辑 </li></ul><ul><li>支持远程调用其方法 </li></ul><ul><li>封装了 RPC 处理 </li></ul>http://www.devdiv.net
  36. 36. Service - 系统 Service 例子 <ul><li>mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); </li></ul><ul><li>mNM. notify (R.string.local_service_started, notification); // 直接调用其方法。一般来说 service 在另外一个进程 </li></ul>http://www.devdiv.net
  37. 37. Content Provider <ul><li>进程间共享数据 </li></ul><ul><li>通过 ContentResolver 访问 </li></ul><ul><li>URI 的形式定位资源 </li></ul><ul><li>Content Provider 的生命周期只在调用期间有效 </li></ul><ul><li>可以更新监视者 </li></ul><ul><li>例子 ,NotePad </li></ul>http://www.devdiv.net
  38. 38. Widget <ul><li>通过 RemoveView 展示界面 </li></ul><ul><li>通过 AppWidgetProvider 来实现 update 消息接受,更新画面 </li></ul><ul><li><receiver android:name=&quot;WidPro&quot;> </li></ul><ul><li><meta-data android:name=&quot;android.appwidget.provider&quot; </li></ul><ul><li>android:resource=&quot;@xml/appwidget_provider&quot; /> </li></ul><ul><li><intent-filter> </li></ul><ul><li><action android:name=&quot;android.appwidget.action.APPWIDGET_UPDATE&quot; /> </li></ul><ul><li></intent-filter> </li></ul><ul><li></receiver> </li></ul><ul><li>通过 setOnClickPendingIntent(id,intent) 来指定点击时候的 Intent 。 </li></ul>http://www.devdiv.net
  39. 39. 安全性 <ul><li>系统服务支持权限管理 </li></ul><ul><li>每个程序单独的用户 ID </li></ul><ul><li>单独的目录 </li></ul>http://www.devdiv.net
  40. 40. Native Develop Kit <ul><li>NDK 是被官方支持的,但只有源码的部分功能 </li></ul><ul><li>windows 下面需要 cygwin 支持,基于 gcc cross toolchain 的编译环境 </li></ul><ul><li>支持 gdb 调试 </li></ul><ul><li>整合到 eclipse </li></ul>http://www.devdiv.net
  41. 41. 更多需求 <ul><li>引用源码路径 </li></ul><ul><li>不同的固件版本 </li></ul><ul><li>cupcake/donut/eclair/froyo </li></ul>http://www.devdiv.net
  42. 42. ADB 调试好帮手 <ul><li>查看设备日志 </li></ul><ul><li>adb logcat </li></ul><ul><li>端口映射 </li></ul><ul><li>gdb 远程调试 </li></ul><ul><li>socket 调试 .. </li></ul><ul><li>文件传输 </li></ul><ul><li>终端 adb shell </li></ul>http://www.devdiv.net
  43. 43. 其他 API 集 <ul><li>Google APIs </li></ul><ul><li>有没有人用过 ? </li></ul>http://www.devdiv.net
  44. 44. 感谢 <ul><li>Q&A </li></ul><ul><li>其实 android 很精彩,用过才知道 </li></ul><ul><li>终于结束了 </li></ul>http://www.devdiv.net
  45. 45. 还没结束 <ul><li>联系 [email_address] </li></ul><ul><li>http://www.devdiv.net/bbs </li></ul>http://www.devdiv.net
  46. 46. 参考: <ul><li>1. 公司内部 ppt, 同学们的帮助。 </li></ul><ul><li>2. http://developer.android.com/ 或者 SDK 本地文档,最大最全的资源库 </li></ul><ul><li>3. www.devdiv.net/bbs 牛人出没请小心 </li></ul><ul><li>4. google 关于 android 的几个 groups, 包括 android-developer,android-porting,android-internal 等,适合潜水 </li></ul><ul><li>5. Venus 神庙 android 分析作品集 http://flyvenus.net/?tag=android 写的很好,推荐看看,如果能把作者加为朋友那收获一定更大。 </li></ul><ul><li>6. http://wangstar.javaeye.com/blog/409115 抄了这里的 Animation 介绍,很详细欢迎参考 </li></ul>http://www.devdiv.net
  47. 47. 再次感谢 <ul><li>还没结束 </li></ul><ul><li>后面演讲者的内容更精彩 </li></ul><ul><li>另外,期望下次和大家分享 </li></ul><ul><li>android internals 关于 Binder/SurfaceFlinger/ActivityManager .. </li></ul>http://www.devdiv.net

×