自信人生两百年,会当水击三千里!
  • Android 初调试

    Android 平台开发,需要在一个模式或者真实的环境之下进行一下调试、验证,至少有三种方式:

    1.       Eclipse + AVD ,通过 Eclipse 或者 Android SDK 自带的命令行创建 Android Virtual Device ;

    2.       Eclipse + Android Device ,通过一个真实 Android 设备通过 USB 和电脑相连进行调试;

    3.       Eclipse + Android System over Virtual Machine ,在系统安装一个虚拟机软件,比方说: VirtualBox VmWare VirtualPC 等,然后下载一个 Android ROM 安装到虚拟机之中,配置虚拟机的网络和 Host 主机相连,然后在 Host 主机中通过 adb 命令 adb connect android-ip 连接虚拟机中的 Android 系统,然后就可以进行调试了。

    对于一些和 ROM 相关的开发、调试,最后现在虚拟机环境下进行调试,以免于把真实 Android Phone 给“砖头”了。

    Android 源代码下载和编译:

    1.       拥有 Ubuntu 系统,进入到 Ubuntu 系统;

    2.       安装 cURL 。什么是 cURL ,官方解释:支持很多协议: FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP curl 同样支持 HTTPS 认证, HTTP POST 方法 , HTTP PUT 方法 , FTP 上传 , kerberos 认证 , HTTP 上传 , 代理服务器 , cookies, 用户名 / 密码认证 , 下载文件断点续传 , 上载文件断点续传 , http 代理服务器管道( proxy tunneling , 甚至它还支持 IPv6, socks5 代理服务器 , 通过 http 代理服务器上传文件到 FTP 服务器等等,功能十分强大。下载地址: http://curl.haxx.se/download.html

    3.       安装 Git

    4.       建立 ~/bin 目录,将这个目录配置到环境变量 ~/.bashrc 里面: export PATH=~/bin:$PATH

    5.       安装 Repo ,通过命令: curl http://android.git.kernel.org/repo >~/bin/repo

    6.       改变 ~/bin/repo的权限: chmod a+x ~/bin/repo

    7.       初始化版本库: repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo

    8.       同步 repo sync

    9.       make(make 的时候出错了,注意查看,极有可能是缺少系统库,根据错误提示安装 系统库即可 )

    10.   最后编译完的库文件,主要集中在 out\target 路径下面。例如编译后的 framework. jar 位置在 out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar

    并且可以参考:
    http://mintelong.iteye.com/blog/466893
    http://www.williamhua.com/2009/04/29/
    http://source.android.com/source/build-numbers.html

    ubuntu 下使用 Eclipse+VirtualBox 进行 Android 开发:
    1.
    安装 Sun JDK;
    2.
    安装 Eclipse + Android plugin;
    3.
    安装 Android SDK for linux, 配置 adb 的所在目录到 path 中;
    4.
    下载 Android 源代码并且编译;
    5.
    安装 virtualbox;
    6.
    下载到开发版本的 android rom iso 文件 ;
    7.
    virtualbox 中创建一个虚拟机,将 iso 加载到虚拟机的光盘中,将 android rom 安装到硬盘中,在安装过程中选择 /system 目录为 read-write ,并且创建 sdk 虚拟卡。 android 自动将其挂在到安装后的 /sdcard 路径 ;
    选择虚拟机的网络方式是 :bridged adapter ,虚拟机的操作系统会自动从 ubuntu 一样,从外部路由器中获取一个独立的 ip ,可以和 ubuntu 互通,也可以通过路由器上网。
    8.
    登录到虚拟机中的 android 系统,通过 devtools 应用的子项 Terminal simulator 进入到命令行界面,通过 ip addr 看到本机的 ip(android-ip).
    9.
    ubuntu 的命令行中: adb connect android-ip
    10. 
    进入到 Eclipse 中,模拟器可以选择 AVD 调试 app 开发,也可以选择 manual 方式到虚拟机中的 android 环境进行开发。 Eclipse 调试环境自动将 apk 发布到虚拟机 Android 的目录 /system/app 下。 .
    11. 
    ubuntu 下,鼠标在 ubuntu 和虚拟机之间切换的快捷键:键盘中的 ctrl + i 就可以了。

     

  • Android 通用架构

    Android 有一个通用的展示软件栈的架构,即是如此图:


    简单介绍:

    Applications 层:主要是 Android 自带的 GMS(Google Mobile Service) 应用和应用开发者开发的应用;

    Application Framework :主要是为 Application 开发者提供各种功能、服务和开发 API

    Android Runtime(Core libraries and Dalvik Virtual Mache) :为应用运行提供运行环境的 Java 虚拟机和运行时库。

    Libraries :主要是 Android 系统运行库和工具集;

           C/C++ 库:

    a)       标准 C/C++ bionic BSD 许可证,可以修改而无需公开源代码。提供 C/C++ 标准库绝大部分的功能,是一个专为嵌入式系统设计的轻量级标准库实现。相对于传统的 glibc ,其体积和内存占用很小。

    b)      C 语言工具库 libcutils :是 Android 系统中的基石库,基本上 Android 中所有的本地库和程序都链接了这个库。

    c)      init 进程:此进程是 Android 设备启动后,系统执行的第一个用户空间的可执行程序,由内核缺省直接启动,以守护进程的形式后台运行。提供以下功能:设备管理、解析并执行初始化脚本 init.rc

    d)      shell 工具: sh toolbox busybox

    e)       C++ 语言工具库 libutils :属于 Android 的底层库。以 C++ 实现,提供的 API 也是 C++ 接口规范。提供基本头文件、 Binder 框架以及使用 Binder 机制的相关库。

    通过 Android 应用程序框架为开发者提供服务的 C/C++ :

    a)       系统 C 库:一个从 BSD 继承来的标准 C/C++ 系统函数库, 是专门为基于嵌入式 Linux 系统的设备定制的。即 bionic libc 库。

    b)      媒体库:基于 PacketVideo OpenCORE 。该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG

    c)      Surface Manager :对显示子系统的管理,并且为多个应用程序提 供了 2D 3D 图层的无缝融合。

    d)      LibWebCore :一个最新的 web 浏览器引擎用,支持 Android 浏览器和一个可嵌入的 web 视图

    e)       SGL - 底层的 2D 图形引擎

    f)       3D libraries :基于 OpenGL ES 1.0 APIs 实现;该库可以使用硬件 3D 加速(如果可用)或者使用高度优化的 3D 软加速。

    g)      SQLite :一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。

    系统工具集 :

    a)       主要以 busybox 为主,链接 bionic libc 库,为大多数嵌入式 Linux 所采用。主要包含一些系统管理工具,全为文本命令行工具。

    b)      另外 Android 官方也提供了专门的调试守护进程,如 adbd 等。

    HAL :一个对硬件访问虚拟化的中间抽象层,接着我们详细介绍;

    Linux Kernel :基于开源 Linux kernel 经过修改的支撑整个软件栈的基础操作系统内核,当前主要是依赖于 Linux kernel 2.6 。驱动主要分为两类,一类是 Android 专用驱动,其并不是硬件驱动,而主要是一些为上层提供服务的辅助功能层,比如 ashmem logger binder power manager ;另一类则是设备驱动则,其多是硬件驱动,属于 Linux 内核标准的驱动,比如 fb 显示驱动 (LCD) 、输入设备驱动 ( 游戏杆、鼠标、键盘、触摸屏 ) 、视频驱动 (Camera) 、音频驱动、 MTD 存储设备驱动、网络驱动 ( 蓝牙、 WiFi Ethernet) 等。驱动在内存映射的时候也分为 kernel space user space ,放在 kernel space 都是需要遵循 GPL 开源的;放在 user space 中的驱动,是遵循 Apache/MIT 许可证的,可以不开源,其运行在 kernel space 之上。

    Hardware Abstraction Layer:

    HAL Google 为了解决 Linux 开源许可证 GPL Android 本身的 Apache 许可证冲突的一个硬件抽象层,主要原则是把控制硬件的动作都放到了 Android HAL 中,而 linux driver 仅仅完成一些简单的数据交互作用,甚至把硬件寄存器空间直接映射到 user space

    HAL 存在的原因:

    1.       快速适配硬件设备中非 linux kernel 标准的接口;

    2.       解决 Linux 开源许可证 GPL 与硬件设备厂商驱动的专利不兼容;通过 Android Apache 许可证和 HAL 技术实现来解决这一难题;

    3.       开放的满足设备厂商开发开与之驱动对应的特定需求的要求;

    HAL 层具备如下特点:

    1.       在用户空间 (user space) 而不是内核空间 (kernel space) ,可以是 c/c++ 库;

    2.       Android platform 部分和系统硬件完全的进行了隔离开;

    3.       向上层提供 Android platform 操作硬件的接口,向下要求硬件驱动对其功能进行实现; ( 比方说上层应用对于 Graphics, Audio, Camera, Bluetooth, GPS, Radio(RIL), Wifi 等的操作。 )

    在编程方式上,上层应用通过 HAL 对硬件的操作有两种方式:

    1.       通过 Java->JNI->*.so (c/c++)


    2.       通过 Java app->ApplicationManager->Service(java)->service(jni)->HAL->HAL stub->System Call 方式进行调用;


    注:一般 HAL 动态库放在位置 /system/lib/hw 目录。

    一般开发类型

    1.       Android 手机产品:构建硬件系统,移植 Android 软件平台系统;主要涉及设备驱动程序,以及在硬件抽象层实现标准接口等。


    2.       Android 应用程序:基于 Application Framework 和其他应用,开发应用程序;

    3.       Android 系统开发:主要是增强或者完善 Android 平台系统的功能,开发中主要包含如下部分:

    a)         开发 c 或者 c++ 库;

    b)        定义将要通过 JNI 提供的上层 Java 的系统 API 接口;

    c)        封装 JNI

    d)        通过 JNI 封装 Java 类和接口 API ,提供给 Android 应用使用;

    Android 开发社区

    Cyanogenmod 社区: http://www.cyanogenmod.com/

    涉及开发语言: C/C++/Java 等。

  • Android

    Android Google 公司为移动设备而开发的遵循 Apache/MIT 开源许可证、完全开发的、全软件栈操作系统。为 Android 应用开发者提供工具和框架;为用户提供一个不依赖硬件的通用平台;为设备商提供完整的解决方案。

    Android is a comprehensive platform, which means it is a complete software stack for a mobile device.

    For developers, Android provides all the tools and frameworks for developing mobile apps quickly and easily.

    For users, Android just works right out of the box. Additionally, users can customize their phone experience substantially.

    For manufactures, it is the complete solution for running their devices. Other than some hardware-specific drivers, Android provides everything else to make their devices work.

    Android 生态系统

    Google Android 开发系统由三个部分组成:

    1.       Android 源代码工程 (Open Source Project) 包括 Android 全部源代码 : https://source.android.com

    2.       Android 开发者 (Developer) 包括 SDK API 和文档 : https://developer.android.com

    3.       Android 应用市场 (Market) 是一个开发者发布应用程序的平台 : https://market.android.com/

    Android 系统

    Android 一词最早出现于法国作家利尔亚当( Auguste Villiers de l'Isle-Adam )在 1886 年发表的科幻小说《未来夏娃》( L' è ve future )中外表像人的机器起名为 Android

    2003 10 月由 Andy Rubin Rich Miner 创办一家公司 Android 专门研发 Android

    2005 Google 收购了 Android 公司;

    2007 11 5 Google 正式展示、发布了开源手机手机操作系统平台 Android Google 宣布组建的一个全球性的联盟组织 - 开放手持设备联盟( Open Handset Alliance ),联盟将支持 Google 发布的手机操作系统或者应用软件,共同开发 Android 系统的开放源代码。开放手持设备联盟包括手机制造商、手机芯片厂商和移动运营商

    2007 11 12 号发布 Google SDK

    2008 8 18 日, Android 获得了美国联邦通信委员会( FCC )的批准;

    2008 9 23 日,第一款 Android 手机发布, HTC Dream(G1)

    2008 年, Patrick Brady Google I/O 演讲“ Anatomy & Physiology of an Android ”,并提出的 Android HAL 架构图;

    2009 2 月, Android 1.1 发布;

    2009 2 月, Google 推出 Android Market 线上应用程序商店,用户可在该平台网页寻找、购买、下载及评级使用手机应用程序及其他内容;

    2009 4 30 日, Android 1.5 Cupcake 版本发布;

    2009 9 15 日, Android 1.6 Donut 版本发布;

    2009 10 26 日, Android 2.0 Eclair 版本发布;

    2010 2 3 日, Linux 内核开发者 Greg Kroah-Hartman Android 的驱动程序从 Linux 内核“状态树”(“ staging tree ”)上除去,从此, Android Linux 核心开发分道扬镳;

    2010 5 20 日, 2.2 Froyo 版本发布;

    2010 12 7 日, 2.3 Gingerbread 版本发布;

    2011 2 2 日, 3.0 Honeycomb 版本发布;

    2011 5 11 日, 3.1 Honeycomb 版本在 Google I/O 开发者大会宣布发布;

    2011 7 13 日, 3.2 Honeycomb 版本发布;

    2011 10 19 日, 4.0 Ice Cream Sandwich 版本发布;

    Android 版本代号命名规则,从 Android 1.5 开始,按着 26 个英文字母的顺序作为首字母,选择一种甜点单词作为版本的代号;因此, Android 下一个版本发布的代号即是: Jelly Bean

    Andy Rubin

           纽约州 Chappaqua 长大,父亲拥有自己的消费电子直销公司,从小就接触各种最新的电子设备;

           在纽约州由提卡学院读计算机科学。

           毕业后在蔡司公司任机器人工程师。

           1989 年加入苹果公司。

           1990 年,苹果分拆他所在的手持计算和通信设备部门,成立 General Magic 公司,在这里他开发了手持设备操作系统 Magic Cap

           公司倒闭后加入 Artemis Research ,开发了交互式互联网电视 WebTV

           后与人创办 Danger 公司,担任 CEO ,但不久被免职。 Danger 公司开发了后来被称为 T-Mobile Sidekick 的手机,公司于 2008 年被微软收购。

           2003 年与 Rich Miner 一起创办了 Android 公司。

           2005 Android 公司被 Google 收购,任 Google 工程副总裁,领导开发了 Android 操作系统。

           并拥有多项无线通信专利。

    市场上手机操作系统

    1.       Apple iOS

    2.       Google Android

    3.       Microsoft Window Phone

    4.       Blackberry OS

    5.       HP WebOS

    6.       Nokia Symbian

    7.       Meego

    8.       Palm OS

    9.       Samsung Bada

    10.   Tizen

  • Alex Curelea在Blog中从Sell app to individuals/Freemium/other sorts of products/srevices不同角度归纳了Android的四十种Business Model,分别是:
    Model #1: Build the App, Sell the App to Individuals
    Model #2: Make the App, Sell the App to Enterprises
    Model #3: Make the App, Sell the App to Schools or Universities
    Model #4: Make the App, Sell the App to OEMs
    Model #5: Make the App, Sell the App to Content Providers
    Model #6: Make the App, Sell the App to Service Providers

    Model #7: Give Away the App, Sell the Customizations
    Model #8: Give Away the App, Sell the Analytics
    Model #9: Give Away the App, Sell the Remix
    Model #10: Give Away the App, Sell the Bundle
    Model #11: Give Away the App, Sell the Plugins
    Model #12: Give Away the App, Sell the Feature Unlock Codes
    Model #13: Give Away the App, Sell In-App Ads
    Model #14: Give Away the App, Sell the Account
    Model #15: Give Away the App, Sell Support
    Model #16: Give Away the App, Sell the API
    Model #17: Give Away the App, Sell the Content
    Model #18: Give Away the App, Sell Premium Placement
    Model #19: Give Away the App, Sell the Firm

    Model #20: Sell Development Tools
    Model #21: Sell Portability Toolkits
    Model #23: Create a Content Marketplace
    Model #24: Create an Android Job Board
    Model #25: Create an Android Site Ad Broker
    Model #26: Create Hardware Add-Ons
    Model #27: Create Device Accessories
    Model #28: Write Books

    Model #31: Internationalization and Localization
    Model #32: Bug Hunter
    Model #33: User Experience Designer
    Model #34: JAR Porter
    Model #35: API Wrapper
    Model #36: App Promoter
    Model #37: App Market Agent
    Model #38: Device Marketer
    Model #39: Trainer
    Model #40: Break Outside the Box