获取Android源码,初识源码模块架构

作者: Louis_陆 | 来源:发表于2016-04-19 11:22 被阅读2002次

    Android开发者在学习到一定的阶段时,需要从底层认识Android,理解其实现的原理和机制,才能更好地进一步提升自己的能力。这个坎,便是初学者难以逾越的鸿沟。

    而拥有源码,是学习的必备条件。
    下面由笔者来为大家介绍在windows下获取源码的流程:

    首先,读者需要下载Linux模拟环境搭建工具Cygwin ( 因为Android基于Linux开发 )

    打开链接如图:


    Paste_Image.png

    直接点击 setup-x86_64.exe 下载即可

    所得到的文件如图:


    Paste_Image.png

    打开 setup-x86_64.exe ,点击下一步

    Paste_Image.png

    选择 Install from Internet ,点击下一步

    Paste_Image.png

    点击 Browse 选择Root Directory (即文件安装的根目录)

    Paste_Image.png

    再次选择临时文件目录

    Paste_Image.png

    选择 Direct Connetion , 点击下一步

    Paste_Image.png

    选择一个下载站点,可任意选择,一般较近的站点速度会比较快
    这里笔者选择 ftp://ftp.ntu.edu.tw,点击下一步

    Paste_Image.png

    等待安装

    Paste_Image.png

    在Search中输入 curl

    Paste_Image.png

    点击 All 右边的 Default 切换状态至 Install,点击下一步

    Paste_Image.png

    等待安装

    Paste_Image.png

    等待安装

    Paste_Image.png

    安装完毕后,可在桌面看到 Cygwin64 Terminal

    Paste_Image.png

    此时不要着急打开 Cygwin64 Terminal ,读者需重新回到原安装目录再次打开 setup-x86_64.exe ,重复上述步骤,在Search中输入 gitpython 继续安装 gitpython 工具

    过程有点繁琐,且耗时比较长,但为了跨越这个鸿沟,不再停留于表面,读者必须有耐心。

    准备工具做好后,我们即可运行桌面的 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为例,我们来看看源码的目录结构:

    Paste_Image.png

    下面笔者对其结构作如下介绍:

    一、总体结构:
    【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 )

    二、应用程序部分

    Paste_Image.png packages/
    【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: 无线硬件设备与电话的实现

    相关文章

      网友评论

      • KingJA:如果楼主提供源码下载时的翻墙经验就更好了。收费的VPN还是其他?
      • Adro07:windows环境下载Android系统源码应该不完整吧,不支持相同文件名文件(如OpenLife.h和openlife.h)。Cygwin是否支持这个我不太清楚(没试过),有兴趣可以在它目录下试试。
      • 釒彡尨:不赖
      • 理性观看:如果是单纯模拟Linux系统,为什么不能直接打开一个虚拟机 呢?
        Louis_陆:@jamesfuxk 理论上在虚拟机能完成下载任务也是可行的
      • 空了她的城:不错,mark一下!
      • OvenChou:这个源码和Android studio 里面的源码有什么区别么

      本文标题:获取Android源码,初识源码模块架构

      本文链接:https://www.haomeiwen.com/subject/qmkskttx.html