`

Android知识梳理:获得源码和编译系统

 
阅读更多

 

Android是一个开源的操作系统,其项目的源码通过git可以从这个页面克隆:http://android.git.kernel.org/。因为Android是由Kernel、Dalvik、Bionic、Prebuilt、build等多个项目组成,如果我们分别用git来获取显得很麻烦,所以Android项目编写了一个名位Repo的Python的脚本来统一管理这些项目的仓库,使得项目的获取更加简单。

Google提供Android代码树包含了原始Android的目标机代码、主机编译工具、仿真环境。代码包经过解压缩后,第一级别的目录和文件如下所示:

  |-- Makefile (全局的Makefile

  |-- bionic Bionic含义为仿生,这里面是一些基础的库的源代码)

  |-- bootloader (引导加载器),我们的是bootable

  |-- build build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)

  |-- dalvik JAVA虚拟机)

  |-- development (程序开发所需要的模板和工具)

  |-- external (目标机器使用的一些库)

  |-- frameworks (应用程序的框架层)

  |-- hardware (与硬件相关的库)

  |-- kernel Linux2.6的源代码)

  |-- packages Android的各种应用程序)

  |-- prebuilt Android在各种平台下编译的预置脚本)

  |-- recovery (与目标的恢复功能相关)

  |-- system Android的底层的一些库)

|--vendor厂商定制代码,这部分我们可以维护自己的分支,比如有htc的分支

Google提供的Android代码树中驱动部分并没有实现,需要各厂商自己实现。厂商将驱动补充到Android代码树后对其进行编译,就可以得到可以部署到移动设备上的img文件,包括system.img,ramdisk.img,userdata.img。

编译完成Android系统后,生成的结果全部在根目录的out目录中,原始的各个工程不会改动。

 

out目录的结构如下所示:

 

out/
|--host                      [主机内容]
| |--common                  [主机的通用内容]
| | |--obj
| |--linux-x86               [编译所生成的主机Linux上运行的工具]
|     |--bin
|     |--framework
|     |--lib
|     |--obj
|--target                     [目标机内容]
   
|--common                  [目标机的通用内容]
   
| |--R
   
| |--docs
   
| |--obj
   
|--product                 [目标机的产品目录]
      
|--generic
                 
out
/target/product/generic中存放目标产品,默认情况下作为目标产品的名称
out
/target/product/generic
|--android-info.txt
|--clean_steps.mk
|--data                   [数据目录]
|--obj                    [中间目标文件记录]
| |--APPS                [Java应用程序包]
| |--ETC                 [运行时配置文件]
| |--EXECUTABLES         [可执行程序]
| |--KEYCHARS            
| |--NOTICE.html
| |--NOTICE.html.gz
| |--NOTICE_FILES
| |--PACKAGING
| |--SHARED_LIBRARIES    [动态库(共享库)]
| |--STATIC_LIBRARIES    [静态库(归档文件)]
| |--include
| |--lib
|--previous_build_config.mk
|--ramdisk.img            [根文件系统映像]
|--root                   [根文件系统目录]
|--symbols                [符号的目录]
|--system                 [主文件系统目录]
|--system.img             [主文件系统映像]
|--userdata-qemu.img      [QEMU的数据映像]
|--userdata.img           [数据映像]

其中root、system、data三个目录分别是目标根文件系统,主文件系统和数据文件系统的目录,后缀名为.img的文件分别为它们所对应的映像文件。

 

编译后,运行模拟器:

 

$ declare -x ANDROID_PRODUCT_OUT="{Android root}out/target/product/generic“ 
$./out/host/linux-x86/bin/emulator -shell 

 

 

Android系统启动后,可以用ls -l 命令查看系统根目录:
# ls -l
drwxrwxrwt root     root              2010-03-12 19:26 sqlite_stmt_journalsdrwxrwx--- system   cache             2010-03-12 12:22 cache
d
--------- system   system            2010-03-12 19:26 sdcard
lrwxrwxrwx root     root              
2010-03-12 19:26 etc -> /system/etc
drwxr
-xr-x root     root              2010-03-12 10:38 system
drwxr
-xr-x root     root              1970-01-01 08:00 sys
drwxr
-x--- root     root              1970-01-01 08:00 sbin
dr
-xr-xr-x root     root              1970-01-01 08:00 proc
-rwxr-x--- root     root         9075 1970-01-01 08:00 init.rc
-rwxr-x--- root     root         1677 1970-01-01 08:00 init.goldfish.rc
-rwxr-x--- root     root       106568 1970-01-01 08:00 init
-rw-r--r-- root     root          118 1970-01-01 08:00 default.prop
drwxrwx
--x system   system            2010-03-12 12:22 data
drwx
------ root     root              1970-01-01 08:00 root
drwxr
-xr-x root     root              2010-03-12 19:26 dev

sqlite_stmt_journals:

cache : 是缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。

sdcard:是SD卡中的FAT32文件系统挂载的目录。

etc :指向 /system/etc ,配置文件存放目录。

system :是一个很重要的目录,系统中的大部分东西都在这里

sys :用于挂载 sysfs文件系统。 在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值

sbin: 只放了一个用于调试的adbd程序。

proc :/proc 文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。

data :存放用户安装的软件以及各种数据。

root :什么都没有。

dev :设备节点文件的存放地。

 

Android根目录中主要文件夹与目标系统的out/target/product/generic/root内容相对应,此外etc,proc等目录是在启动后建立的。

system映像被挂载到根文件系统的system目录下,data映像被挂接到根文件系统的data目录中。

 

对于Android根文件系统的获取,ramdisk.img是模拟器的文件系统,将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令
gunzip ramdisk.img.gz

 

 然后新建一个文件夹,叫ramdisk吧,进入,输入命令

cpio --F ../ramdisk.img

 

这下,就能看见并操作ramdisk里面的内容了。

根据自己的需要对里面的内容修改之后,可以使用下列命令重新打包成镜像。

cpio ---F ../ramdisk.img > list 
cpio 
--H newc -O lk.img < list 

 

 当前目录下生成的lk.img就是我们的新镜像了。

 

 

 

分享到:
评论

相关推荐

    【优亿Android特刊】第二十二期:Android源码修改

    #### 四、源码编译 **1. Ubuntu 8.04下编译Android源码全过程** - **环境准备**:确保已安装必要的软件包,如GCC、Make等。 - **编译脚本**:使用`. build/envsetup.sh`脚本设置编译环境。 - **编译目标选择**:...

    大量学习android 源码

    这个压缩包“大量学习android 源码”显然包含了作者在过去一年中收集的各种Android应用或模块的源代码,旨在帮助学习者通过实践来加速对Android系统和开发的理解。下面我们将详细探讨Android源码学习的一些关键知识...

    android 我的笔记 源码

    Android 源码包含了操作系统层面、框架层以及应用开发接口等各个层次的实现细节,有助于开发者理解系统行为,优化应用性能,解决疑难问题。本笔记将从以下几个方面对 Android 源码进行解析: 1. **Android 架构概述...

    AndroidTXT 文本阅读器源码-IT计算机-毕业设计.zip

    源码中的工程结构和编译过程都是基于SDK进行的。 1.2 Java语言:Android应用主要用Java语言编写,源码中的Activity、Service等都是Java类的实例。 1.3 XML布局:XML用于定义用户界面,如Activity的布局文件,描述...

    android上百例精品实例源码(非常值得下载)收藏

    Android系统源码获取及编译.zip android项目实例 商业项目源代码.rar Gmail备份手机短信【源码】.zip http 演示Demo.zip OA精灵2011_Android版.rar PopWindow.rar Preference_Demo.rar TestListView02.rar WIFI 扫描...

    在Linux下编译FFmpeg+android ndk成功的脚本及so库

    - **打包so库**:将编译得到的各个架构的.so文件整理到一个目录结构,符合Android的ABI分发规范。 5. **注意事项**: - **编译错误处理**:编译过程中可能会遇到依赖库缺失、编译选项不正确等问题,需要根据错误...

    《疯狂Android讲义》02章读书笔记(含源码)

    2. 资源ID:Android编译系统会自动为资源分配ID,通过R类访问。 八、调试与性能优化 1. 调试工具:Android Studio提供了强大的调试工具,如Logcat用于查看日志,Memory Profiler用于分析内存使用,CPU Profiler用于...

    最全的ANDROID源码目录结构详解1[整理].pdf

    3. build:这个目录包含了编译Android系统所需的全部脚本和工具,是进行整个Android源码编译的核心目录。 4. cts:CTS即兼容性测试套件(Compatibility Test Suite),用于确保设备符合Android兼容性标准。 5. ...

    安卓Android源码——(截屏).zip

    【描述】:描述中的“安卓Android源码——(截屏).zip”表明这个压缩包内包含了与Android系统源代码相关的截图功能的详细内容,可能是开发者或研究者为了理解Android系统内部如何处理屏幕截图这一过程而整理的资料。...

    Android项目源码单词记忆学习复习考试生词

    在学习这些知识点的过程中,该项目提供的“单词记忆学习复习考试生词”很可能是对源码中常见英文词汇的收集和整理,帮助开发者快速记忆和查找相关术语,提升阅读源码的能力。通过这个项目,开发者可以结合实际场景,...

    深入理解Android:卷I--详细书签版

     第1章介绍了阅读本书所需要做的一些准备工作,包括对Android整个系统架构的认识,以及Android开发环境和源码阅读环境的搭建等。注意,本书分析的源码是Android2.2。  第2章通过Android源码中的一处实例深入地...

    Android应用源码利用poi将内容填到word模板.zip

    标题 "Android应用源码利用poi将内容填到word模板.zip" 暗示了这个压缩包包含了一个Android应用程序的源代码,该应用使用了Apache POI库来操作Microsoft Word文档,特别是将数据填充到预定义的Word模板中。...

    Android应用源码之FiveChess五子棋-IT计算机-毕业设计.zip

    这部分内容可以帮助学习者提高书面表达能力,以及如何系统地整理和呈现项目开发过程中的知识。 综上所述,【Android应用源码之FiveChess五子棋】是一个集成了Android基础、游戏逻辑、用户界面设计以及项目管理的...

    安卓SDK源码

    - **编译和调试**:配置合适的开发环境,如Android Studio,可以方便地编译源码并进行调试,这有助于理解代码的实际运行效果。 - **文档和社区**:参考官方文档和在线社区(如Stack Overflow)中的讨论,可以帮助...

    android环境搭建地址链接

    - `source ./build/envsetup.sh`: 源码编译环境设置脚本。 - 选择编译组合: - `choosecombo1143`: 选择特定的编译组合(例如不同的硬件配置或软件特性)。 - 执行编译命令: - `make -j2 update-api`: 使用多...

    android基础

    根据提供的文件信息,我们可以将其中的关键知识点归纳整理如下: ### Android基础知识点概览 #### 1. Android简介 - **定义**: Android是一种基于Linux内核的开源操作系统,主要用于移动设备如智能手机和平板电脑...

    cocos2dx 游戏开发系列之三 源码

    关于迁移,如果你有一个已存在的cocos2dx项目,想将其迁移到Android,你需要确保项目的源码和资源文件已经整理好,并且适应于Android的架构。可能需要修改或添加一些特定于Android的代码,比如处理Android的生命周期...

    应用源码之weiciyuan-0.50.zip

    这表明源码主要与Java语言和Android操作系统相关,适用于那些正在做毕业设计的学生或者希望通过实际代码来提高自己技能的开发者。"JAVA"指的是Android应用通常用Java编写,而"ANDROID"则明确了这是针对移动设备操作...

    Android学习路线

    由于Android是一个极为复杂的移动操作系统,其应用开发过程涵盖了广泛的知识点和技术栈,因此学习路线将帮助开发者梳理这些知识点,逐步掌握Android应用开发的各个方面。 描述中提到了“科学、体系化的Android移动...

Global site tag (gtag.js) - Google Analytics