Android开发者在学习到一定的阶段时,需要从底层认识Android,理解其实现的原理和机制,才能更好地进一步提升自己的能力。这个坎,便是初学者难以逾越的鸿沟。
而拥有源码,是学习的必备条件。
下面由笔者来为大家介绍在windows下获取源码的流程:
首先,读者需要下载Linux模拟环境搭建工具Cygwin ( 因为Android基于Linux开发 )
打开链接如图:
直接点击 setup-x86_64.exe 下载即可
所得到的文件如图:
打开 setup-x86_64.exe ,点击下一步
选择 Install from Internet ,点击下一步
点击 Browse 选择Root Directory (即文件安装的根目录)
再次选择临时文件目录
选择 Direct Connetion , 点击下一步
选择一个下载站点,可任意选择,一般较近的站点速度会比较快
这里笔者选择 ftp://ftp.ntu.edu.tw,点击下一步
等待安装
在Search中输入 curl
点击 All 右边的 Default 切换状态至 Install,点击下一步
等待安装
等待安装
安装完毕后,可在桌面看到 Cygwin64 Terminal
此时不要着急打开 Cygwin64 Terminal ,读者需重新回到原安装目录再次打开 setup-x86_64.exe ,重复上述步骤,在Search中输入 git 、python 继续安装 git 和 python 工具
过程有点繁琐,且耗时比较长,但为了跨越这个鸿沟,不再停留于表面,读者必须有耐心。
准备工具做好后,我们即可运行桌面的 Cygwin64 Terminal ,运行我们的 Linux 模拟环境了。
接下来需要在Linux模拟环境下执行获取代码操作,整个操作流程可参考官网 Downloading the Source ( 如果遇到翻墙也无法打开的情况,只能稍后重试或搜索其他博文 )
下面笔者为大家列举关键操作过程
$ mkdir ~/bin
$ PATH=~bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ mkdir AndroidCode
$ cd AndroidCode
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
$ repo init -u https://android.googlesource.com/platform/manifest
这里笔者演示下载 android-5.0.0 源码
$ repo init -u https://android.googlesource.com/platform/manifest -b android-5.0.0_r1
初始化源码
./repo init -u https://android.googlesource.com/platform/manifest -b android-5.0.0_r1
同步代码 ( 同步过程也比较缓慢,读者需要有耐心 )
$ repo sync
通过上述过程,即可得到android-5.0.0_r1源码
如果读者下载有困难,可以直接下载笔者在百度云上共享的android-5.0.0_r1源码
以android-5.0.0_r1为例,我们来看看源码的目录结构:
下面笔者对其结构作如下介绍:
一、总体结构:
【1】 abi: abi相关代码,abi:application binary interface,应用程序二进制接口
【2】 art: 全新的运行环境,需要和Dalvik VM区分开来
【3】 bionic: bionic C库
【4】 bootable: 启动引导相关代码
【5】 build: 存放系统编译规则及generic等基础开发配置包
【6】 cts: Android兼容性测试套件标准
【7】 dalvik: dalvik Java虚拟机
【8】 developers: 开发者相关
【9】 development: 应用程序开发相关
【10】device: 设备相关代码
【11】docs: 介绍开源的相关文档
【12】external: Android使用的一些开源的模组
【13】frameworks: 核心框架 , Java及C++语言,是Android应用程序的框架
【14】hardware: 主要是硬件适配层HAL代码
【15】libcore: 核心库相关
【16】libnativehelper: 是Support functions for Android's class libraries的缩写,表示动态库,是实现的JNI库的基础
【17】ndk: ndk相关代码。Android NDK ( Android Native Development Kit )是一系列的开发工具,允许程序开发人员在Android应用程序中嵌入C/C++语言编写的非托管代码
【18】packages: 应用程序包
【19】pdk: Plug Development Kit的缩写,是本地开发套件
【20】prebuilts: x86和arm架构下预编译的一些资源
【21】sdk: sdk及模拟器
【22】system: 文件系统和应用及组件,是用C语言实现的
【23】tools: 工具文件夹
【24】Makefile: 全局的Makefile ( 通常文件后缀为.mk )
二、应用程序部分
【1】apps: 应用程序库
【2】experimental: 非官方的应用程序
【3】inputmethods: 输入法
【4】providers: 提供器
【5】screensavers: 屏幕保护
【6】services: 电话短信服务
【7】wallpapers: 墙纸
三、应用程序框架部分
存放于frameworks/base中,其中系统服务部分在frameworks/base/services中,在frameworks/av/services里存放着音频和照相机的服务。
四、系统程序库部分
【1】系统C库: bionic
【2】媒体库: frameworks/av/media
【3】图层显示库: frameworks/native/services/surfaceflinger
【4】网络引擎库: external/webp,external/webrtc
【5】3D图形库: frameworks/native/opengl
【6】SQLite: Java代码 frameworks/base/core/java/android/database,C++代码 external/sqlite
五、系统运行库部分
Dalvik虚拟机的实现: /dalvik,从Android 5.0开始,Android应用程序的默认运行环境为ART ( Android Runtime ),ART模式拥有更快更高的运行效率。ART: /art
六、硬件抽象层部分
hardware/
libhardware: audio、nfc、power实现
ril: 无线硬件设备与电话的实现