由于工作需要大量修改framework代码, 在AOSP(Android Open Source Project)源码上花费了不少功夫, Application端和Services端都看和改了不少.
如果只是想看看一些常用类的实现, 在Android包管理器里把源码下载下来, 随便一个IDE配好Source Code的path看就行.
但如果想深入的了解Android系统, 那么可以看下我的一些简单的总结.
知识
java
Java是AOSP的主要语言之一. 没得说, 必需熟练掌握.
熟练的Android App开发
linux
Android基于Linux的, 并且AOSP的推荐编译环境是Ubuntu 12.04. 所以熟练的使用并了解Linux这个系统是必不可少的. 如果你想了解偏底层的代码, 那么必需了解基本的Linux环境下的程序开发. 如果再深入到驱动层, 那么Kernel相关的知识也要具备.
Make
AOSP使用Make系统进行编译. 了解基本的Makefile编写会让你更清晰了解AOSP这个庞大的项目是如何构建起来的.
Git
AOSP使用git+repo进行源码管理. 这应该是程序员必备技能吧.
C++
Android系统的一些性能敏感模块及第三方库是用C++实现的, 比如: Input系统, Chromium项目(WebView的底层实现).
硬件
流畅的国际网络
AOSP代码下载需要你拥有一个流畅的国际网络. 如果在下载代码这一步就失去耐心的话, 那你肯定没有耐心去看那乱糟糟的AOSP代码. 另外, 好程序员应该都会需要一个流畅的Google.
一台运行Ubuntu 12.04的PC.
如果只是阅读源码而不做太多修改的话, 其实不需要太高的配置.
一台Nexus设备
AOSP项目默认只支持Nexus系列设备. 没有也没关系, 你依然可以读代码. 但如果你想在大牛之路走的更远, 还是改改代码, 然后刷机调试看看吧.
高品质USB线
要刷机时线坏了, 没有更窝心的事儿了.
软件
Ubuntu 12.04
官方推荐, 没得选.
Oracle Java 1.6
注意不要用OpenJDK. 这是个坑, 官方文档虽然有写, 但还是单独提一下.
安装:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
sudo apt-get install oracle-java6-set-default
Eclipse
估计会有不少人吐槽, 为什么要用这个老古董. 其实原因很简单, 合适. 刚开始搞AOSP时, 为了找到效率最优的工具, 我尝试过Eclipse, IntelliJ IDEA, Vim+Ctags, Sublime Text+Ctags. 最终结果还是Eclipse. 主要优点有:
有语法分析 (快速准确的类, 方法跳转).
支持C++ (IntelliJ的C++支持做的太慢了).
嵌入了DDMS, View Hierarchy等调试工具.
为了提高效率, 花5分钟背下常用快捷键非常非常值得.
调整好你的classpath, 不要导入无用的代码. 因为AOSP项目代码实在是太多了. 当你还不需要看C++代码时, 不要为项目添加C++支持, 建索引过程会让你崩溃.
Intellij IDEA
开发App必备. 当你要调试系统的某个功能是, 常常需要迅速写出一个调试用App, 这个时候老旧的Eclipse就不好用了. Itellij IDEA的xml自动补全非常给力.
巨人的肩膀
这个一定要先读. 项目介绍, 代码下载, 环境搭建, 刷机方法, Eclipse配置都在这里. 这是一切的基础.
这个其实是给App开发者看的. 但是里面也有不少关于系统机制的介绍, 值得细读.
此老罗非彼老罗. 罗升阳老师的博客非常有营养, 基本可以作为指引你开始阅读AOSP源码的教程. 你可以按照博客的时间顺序一篇篇挑需要的看.但这个系列的博客有些问题:
早期的博客是基于旧版本的Android;
大量的代码流程追踪. 读文章时你一定要清楚你在看的东西在整个系统处于什么样的位置.
邓凡平老师也是为Android大牛, 博客同样很有营养. 但是不像罗升阳老师的那么系统. 更多的是一些技术点的深入探讨.
Android官方Issue列表. 我在开发过程中发现过一些奇怪的bug, 最后发现这里基本都有记录. 当然你可以提一些新的, 有没有人改就是另外一回事了.
一定要能流畅的使用这个工具. 大量的相关知识是没有人系统的总结的, 你需要自己搞定.
其它
代码组织
AOSP的编译单元不是和git项目一一对应的, 而是和Android.mk文件一一对应的. 善用mmm命令进行模块编译将节省你大量的时间.
Binder
这是Android最基础的进程间通讯. 在Application和System services之间大量使用. 你不仅要知道AIDL如何使用, 也要知道如何手写Binder接口. 这对你理解Android的Application和System services如何交互有非常重要的作用. Binder如何实现的倒不必着急看.
HAL
除非你对硬件特别感兴趣或者想去方案公司上班, 否则别花太多时间在这一层.
CyanogenMod
这是一个基于AOSP的第三方Rom. 从这个项目的wiki里你能学到很多AOSP官方没有告诉你的东西. 比如如何支持Nexus以外的设备.
DIA
这是一个Linux下画UML的工具, 能够帮你梳理看过的代码.
XDA
这里有最新资讯和最有趣的论坛.
想到了再补充.
⑵ Android AOSP代码与编译服务器系统时间有关系吗
起因:aosp由许多项目组成,android4.2就有329个project,每个项目都是一个独立的git仓库。
Repo:创建一个aosp分支来做feature开发就需要每一个子项目创建对应的分支,手动创建很费力,所以有了Repo,自动化处理。Repoz自动化体现在创建分支,查看分支状态,提交代码,更新代码。
Repo实际由Python脚本组成,Python脚本通过调用Git完成自己的功能。组成Repo工具的Python脚本本身也是一个Git仓库。这个Git仓库在aosp里面,焦作Repo仓库。每次执行Repo命令的时候了,Repo就进行一次更新。
Manifest仓库:Repo是用来自动化处理aosp子项目的仓库的,子项目名称,仓库地址,aosp又是不断迭代变化的,每个版本子项目都不一样,就需要另外一个仓库来管理aosp所有子项目的仓库元信息。就是Manifest仓库
Repo脚本:
⑶ 鸿蒙抄袭安卓看这一篇就够了
01
什么是 AOSP ?
很多人都说鸿蒙是 AOSP 套壳,那么我们首先得明白什么是 AOSP?
AOSP 是"Android Open Source Project"的缩写,中文意为"安卓开放源代码项目", AOSP 是基于 Linux 开的。
AOSP 是由谷歌主导的一个开源项目,通过 AOSP 可以编译出一个比较纯净的,可以用于智能设备的操作系统。
而 Android,尤其是首字母 A 大写的时候,是属于谷歌的一个商标,不属于 AOSP 所有,未经允许不能随意在商业产品中使用。
Android 系统是开源的 AOSP 和额外的闭源部分(其中包括 GMS )的组合而成,所以可以认为 Android=AOSP+GMS 。
网友有一个通俗的比喻: AOSP 是个毛坯房,Android 是个精装房 。
由于 AOSP 是开源的,一些第三方机构就可以以 AOSP 为基础,做出自己的改进,并对不同机型适配,然后自己取一个名字。
比如小米的 MIUI、华为的 EMUI、或者魅族的 Flyme。
02
什么是鸿蒙?
鸿蒙是一个面向全场景的分布式操作系统,蒙是基于微内核的全场景分布式操作系统,目前华为已经将鸿蒙捐献给了 开放原子开源基金会 。
有人说鸿蒙是基于 2012 年华为的 LiteOS 开发而来,LiteOS 是轻量级物联网操作系统,目前也以及完全开源。
从客观上来讲,鸿蒙肯定借鉴了 LiteOS 开发中所积累的经验,所以 华为鸿蒙OS 算是 LiteOS 的一个发展产物 ,但它们是两款完全不同的操作系统。
这里还需要和大家明确,区分一个概念,说实话如果不是为了给大家写这篇文章,查了很多资料,不然我也混淆的。
Openharmony 和 HarmonyOS(鸿蒙操作系统) 是两个完全不同的概念!
HarmonyOS 是华为研发的面向万物互联时代的全新的、独立的智能终端操作系统,为不同设备的智能化、互联与协同提供统一的语言。
华为把 HarmonyOS 中基础功能提取出来,打包成功一个项目叫做:Openharmony ,把 Openharmony 捐献给原子开源基金会。
华为这次发布的 HarmonyOS 2 是华为基于开源项目 OpenHarmony 2.0 开发的面向多种全场景智能设备的商用版本。
OpenHarmony 是华为主要贡献的,不属于华为,属于开源组织;而 HarmonyOS 是华为的商业系统,属于华为拥有。
03
国产厂商为什么不跟进?
大家如果明白上面这两个概念的区别之后,就应该很容易明白,为什么国内厂商没有跟进鸿蒙?
上面说的有点绕,做一个简单的比喻大家应该就明白了:
HarmonyOS 2 = Openharmony 2 + 华为的 EMUI + 兼容安卓部分
根据这个公式,我们可以回答好几个问题:
1、Openharmony 是不兼容安卓的,也没有什么 AOSP 的事情,是一个纯正、独立的开源操作系统。
2、 HarmonyOS 2 是不开源的,是华为基于 Openharmony 2 开发的一个商业版本。
为了兼容安卓应用,必定使用了一些 AOSP 的内容,同时华为是不可能将 EMUI 开放给同行的,所以同行厂商没办法直接使用 HarmonyOS 2 。
3、如果让国内同行都兼容鸿蒙的话,他们需要做的工作是:基于 Openharmony 2 开发自己的 UI。
比如 MIUI + 兼容以前应用,工作量巨大,可能不是一时半会就可以搞定,同时他们还需要考虑谷歌在国外对他们制裁的风险。
可以套用上面的比如: Openharmony 2 是个毛坯房,而 HarmonyOS 2 是个精装房。
而小米OV等厂商要使用鸿蒙,至少需要他们自己来装修吧,全部用 HarmonyOS 2 ,大家体验完全一致没有差异化,也没有什么意思。
并且,小米OV他们肯定也不会放弃自己的 MUUI、Flyme,因为这是他们的核心竞争力和收入来源呀。
说实话,现在硬要小米、VIVO、OPPO等支持鸿蒙,也有一点强人所难,可能需要有一个过程慢慢来准备吧。
⑷ 手机支持pt是什么意思
手机支持“PT”中的“PT”指的是谷歌的“project treble”。
1、Google引入了一个名为 vendor interface1的理念,并用它将 Vender Implementation——由芯片制造商编写的设备专属的底层部分,从 Android 系统框架中剥离出来。
2、以往Android智能手机升级的步骤非常繁杂。首先,Android开发团队以最快速的将最新版本开放源代码。然后,芯片制造商(高通、MTK)进行修改以满足特定的硬件,尤其是适配驱动和电源管理机制,再发布给设备制造商。
3、谷歌表示,Android智能手机更新到最新版本的过程非常耗时,而且对大量智能手机厂商来说成本不低,这就是为什么如今Android操作系统市场份额如此零散的最大原因。
(4)aospmtk编译扩展阅读:
手机支持project treble的意义
手机如果想要预装或升级 Android 8.0,都必须先经过 Project Treble 的认证。这个认证过程意味着,在 OEM 厂商对 AOSP 源码进行定制前,这部手机就已经能够运行 AOSP 系统并通过 CDD、VTS 等一系列测试了。
Project Treble除了能缓解系统碎片化之外,还能使自定义 Rom 更简单。曾经便有一位开发者仅在一天内就开发出了华为 Mate 9的 Android Oreo Rom。
⑸ 采用联发科CPU的手机ROM移植为什么那么难
可以查看高通的MTK的android源码发现,高通的源码组织管理以及功能实现都是符合标准的,不管是kernel相关或android相关的。
但是MTK却不一样,都是走自己的一套,驱动怎么好实现就怎么实现,源码编译管理都是perl脚本来实现。所以导致移植的困难。但是从目前开始,MTK的源码管理已经向aosp靠近了。以后移植会变得容易的。
⑹ Android在Ubuntu下编译完整aosp需要多少硬盘空间
6.0以后的AOSP我没编译过,不太了解需要多大空间。
不过5.1.1我倒是编过,你可以参考一下:mac编译aosp的配置需求? - 知乎用户的回答
编译完了,大概占用了60G,6.0可能会更大一些。
像你列举的250G等容量的硬盘,用来编AOSP,容量上是绰绰有余的。其实如果经济上允许,推荐你选择一个SSD,对于编译速度的提升,效果显着。
⑺ aosp系统怎么样
AOSP 全名为 Android Open-Source Project,中文为安卓开源项目,开源即开放源代码!Android 是一个基于 Linux 的、由 Google 主导的开源系统。严格意义上来说,Android=AOSP+GMS,那么这个GMS又是什么呢?GMS 全名为 Google Mobile Service,即谷歌移动服务,也就是我们常刷的谷歌服务包。由于你懂的原因,国内无法使用 GMS,所以国内的各种定制 ROM 都是 AOSP 的定制修改加上自家的云服务,比如 MIUI、ColorOS 等!所以,所有的 ROM 最终的根源就是 AOSP,没有AOSP,也就没有现在的 Androi关于 CM,全名为 CyanogenMod,全球最大的第三方 ROM 编译团队。CM 是基于 AOSP 进行二次开发,在 AOSP 的基础上添加功能、适配更多机型、编写众多机型的内核和驱动!CM 是在底层多 AOSP 进行改进,并且遵循 Android 设计规范,所以 UI 与交互方面,与 AOSP 保持一致,所以很多人说的CM的UI应该
⑻ 自己可以编译安卓源码吗
用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:
sudo apt-get install git git config –global user.email “[email protected]” git config –global user.name “test”
其中[email protected]为你自己的邮箱.
简要说明
android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.
源码下载
由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)
repo工具下载及安装
通过执行以下命令实现repo工具的下载和安装
mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo
补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:
我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:
这里写图片描述
执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.
错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:
通过使用kernel-qemu-armv7内核 解决模拟器等待黑屏问题.而-partition-size 1024 则是解决警告: system partion siez adjusted to match image file (163 MB >66 MB)
如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.
结束吧
到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.
⑼ 小米4怎么编译aosp
这个不是一个人所能完成的,完成的如下!
小米 华为 联想 乐视 360
⑽ Android aosp源码编译后root权限问题
ROOT获得最高权限是删除这些应用的唯一途径
实际手动操作的流程非常复杂,并且有版本限制
我推荐你款不错的手机ROOT工具吧,
我一直都是在用的,很不错
使用应用宝获取手机root权限在工具
选项里找到一键ROOT即可或者KINGROOT也行。