`

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

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

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

    详谈Android编译命令

    关于Android Build系统,这个话题很早就打算整理下,迟迟没有下笔,决定跟大家分享下。先看下面几条指令,相信编译过Android源码的人都再熟悉不过的。 source /opt/android1204_17.conf source setenv.sh lunch ...

    java反编译源码-android_app_security_crack:安卓应用的安全和破解

    典型的反编译流程包括,如何从apk反编译得到java源代码,如何从apk转换出dex文件,如何从dex文件转换出jar文件,如何从jar文件转换出java源代码等等原理和详细步骤。且总结了和安卓反编译、逆向工程、分析等相关的...

    android开发资料大全

    APK权限大全 - Android必懂知识 最无私的Android资料(书籍+代码)分享[总结] Android中文帮助教程(非常合适新手入门) android程序编写及调试新手入门 大家一起学Android(Windows篇) android入门与提高必看指南 ...

    java源码反编译专家-ToolBox:渗透逆向个人工具箱整理backup

    java源码反编译专家 ToolBox 安全研究渗透工具箱 目录 Android 安卓相关工具箱 ACF AndBug - Android Debugging Library android_run_root_shell - android root 脚本 android-backup-extractor - manifest backup...

    Java安卓程序源码-awesome-android-cn:Android资源大全中文版,包括:图表、游戏开发、GUI、崩溃检测、调试工具等,

    Java安卓程序源码 Android 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome – XXX 系列的资源整理。 是JStumpp 发起维护的 Android 资源列表,内容包括:图表工具、游戏开发、GUI、崩溃检测、调试...

    Android例子源码指定号码短信拦截

    这两天手里积压了一些源码,一直扔在桌面没管,对于有整理强迫症的人来说真是一种煎熬,所以整理一下会慢慢都给大家发出来。本例子是一个短信拦截防火墙的例子源码,可以拦截指定号码的短信,让短信不显示。这个例子...

    java版飞机大战源码-android0:安卓0

    java版飞机大战源码 免费的编程中文书籍索引 免费的编程中文书籍索引,欢迎投稿。 国外程序员在 推荐的程序员必读书籍,。 上的程序员应该阅读的非编程类书籍有哪些? 上的一个流行的编程书籍索引 如果这个仓库对你...

    无法反编译出java源码-stackoverflow-android-top-questions:stackoverflow上Android高

    无法反编译出java源码 stackoverflow 上 Android 开发 500 问 stackoverflow 上 Android 高票问题翻译整理,下面中文标题的问题意味着翻译完或翻译中,如果你有意翻译可选择其它英文标题的问题进行翻译,其它问题猛...

    java安卓网络游戏源码-FavoriteForAndroid:Android收藏夹,整理一些比较有用的文章,工具

    Android收藏夹,整理一些比较有用的精品网站,博客,工具(持续更新) Android相关技术 精品资源 精品博客 热修复  开源框架汇总如下: Dexposed: AndFix: Nuwa: HotFix: DroidFix: Robust: RocooFix: Aceso...

    2010年谢彦的android笔记

    原创2010年android文档的整理打包的pdf档(含目录) 文档内容不能复制, 介意者请慎下. 大部分内容可在http://blog.csdn.net/xieyan0811上看到 文档目录如下 1 系统配置 1 1.1 建立SDK开发环境 2 1.2 Android源码的...

    java版飞机大战源码-soft:柔软的

    java版飞机大战源码 免费的编程中文书籍索引 免费的编程中文书籍索引,欢迎投稿。 国外程序员在 推荐的程序员必读书籍,。 上的程序员应该阅读的非编程类书籍有哪些? 上的一个流行的编程书籍索引 如果这个仓库对你...

    移植到的android性能测试软件iozone以及全套文档实践整理

    很多时候我们需要在android系统上去做开发和测试。但是网上有源码,需要自己编译。而且要自己摸索怎么移植。这里我直接亲身经历全总结成文档了。 包括: 1)iozone可执行文件,适合android arm 2)iozone_3D.xls 一个...

    毕业设计-Android学习面试指南一份涵盖大部分 Android 程序员所需要掌握的核心知识准备 Androi.zip

    本资源是经过本地编译测试、可打开、可运行的项目、文件或源码,可以用于毕业设计、课程设计的应用、参考和学习需求,请放心下载。 祝愿你在这个毕业设计项目中取得巨大进步,顺利毕业! 但还需强调一下,这些项目...

    android生态之系统篇

    文章目录1. 前言2. build3. bootable4. framework5. system6. package7. dalvik8. device9. out10....下面是我整理的对android系统的学习总结。...build目录是制定android源码编译规则的地方,详情见如下博客

    积分管理系统java源码-free-programming-book:免费编程书

    积分管理系统java源码 目录 语言无关 MySQL NoSQL PostgreSQL Web WEB服务器 (淘宝团队出品) (PDF版本,运维生存时间出品) 其它 函数式概念 分布式系统 (PDF) 在线教育 (数十种语言快速入门教程) (丰富的移动端开发...

    java反编译泄露源码-interview-:阿里、腾讯、百度、华为、京东、搜狗和滴滴最新面试题汇集

    前一段时间和大牛们交流了一下,据反馈现在Android岗位也没有以前那么多了,没这么好找了,面临2016年寒冬季节,大量公司模仿O2O模式导致死掉企业的很多,在加之培训机构大量的培训人,导致供大于求,当然这不意味着...

    java版飞机大战源码-diyai_java:diyai_java

    java版飞机大战源码 diy_java synchronized 参考资料 免费的编程中文书籍索引,欢迎投稿。 国外程序员在 推荐的程序员必读书籍,。 上的程序员应该阅读的非编程类书籍有哪些? 上的一个流行的编程书籍索引 感谢 使用...

    java版飞机大战源码-free-programming-books:免费编程书籍

    java版飞机大战源码 免费的编程中文书籍索引 免费的编程中文书籍索引,欢迎投稿。 国外程序员在 推荐的程序员必读书籍,。 上的程序员应该阅读的非编程类书籍有哪些? 上的一个流行的编程书籍索引 欢迎订阅我的微信...

Global site tag (gtag.js) - Google Analytics