当前位置:   article > 正文

Android 源码编译详解【合集篇】_熟悉android源码编译

熟悉android源码编译

Android 源码编译详解【一】:服务器硬件配置及机型推荐


做 Android系统开发多年,开发环境都是入职就搭建好了,入职时拿个账号密码就直接开始搞开发了,年初换了新公司,所有的项目都是刚起步,一切环境都要重新搭建,有幸当此重任,因为自己之前也只是用过,并没有亲手搭建过,所以也是边学边用,现学想卖,尽可能全面细致给小白做个参考,大神不喜勿喷,不全面的地方还望前辈留言补充,相互交流学习,感谢~!



         

        工欲善其事,必先利其器”,要想提高团队整体的开发效率,尽可能的提前完成开发任务,必须要配备一套配置给力的开发设备。源码编译服务器硬件配置的高低,直接影响着系统固件升级和ROM版本发布的速度和效率。


        由于目前Google发布的最新版本的Android系统源码体积越来越大,因此,越是定制高版本的系统,对编译服务器的硬件配置要求就越高,这里根据调研,给出目前Android 6.0及以下版本源码定制开发的基本配置,供大家参考。


          首先进行一波企业级android源码编译服务器的推荐,这类推荐网上绝无仅有,这还是我进行了很久的调研,询问很多朋友【其中包括不乏6年以上系统开发的大牛,也有之前公司的主管等】,也查了很多资料才挑选出来,提出需求后让上级审批,目前上一级已经认可比审批,等待领导签字。给力。
         
          友情提示:各位可根据项目于具体需求自定对比,建议Android 4.4 以上版本的ROM,最低不低于 16核【也就是2颗8核16线程的cpu】 32G内存【最好DDR4】,否则,多人同时编译,必将影响工作效率,硬盘要求不高,根据需求而定,一般最低2T以上为宜。


Android ROM 源码编译 硬件配置要求

配置级别

高端配置

基本配置

低端配置

高端配置,适合长期维护、迭代产品的项目使用,后期可扩展性强,编译速度快,效率高

企业级基本配置要求,后期扩展性一般,编译时间:2-4小时,开发效率可接受范围

只适合个人版ROM编译,无扩展性,编译时间4-8小时左右,过长,影响开发效率

参考报价

¥9 万元

¥6.5万

¥4.5万

¥2.57万

¥1.6 万元

推荐机型

HP ProLiant DL580 G8(J4H73A)

IBM System x3850 X6(6241I12)

戴尔PowerEdge R930 机架式服务器(Xeon E7-4820 v3/8GB/146GB)

戴尔PowerEdge T430 塔式服务器(Xeon E5-2630 v3*2/16GB*2/2TB*3)

联想IdeaCentre Y900-ISE(16GB/混合硬盘)

基本参数

产品类别

机架式服务器

机架式服务器

机架式服务器

塔式服务器

台式电脑

产品结构

4U

4U

4U

4U

——

产品类型

企业级

高端

 

 

家用

处理器

CPU类型

Intel 至强E7-4800 v2

Intel 至强E7-4800

Intel 至强E7-4800

Intel 至强E5-2600 v3

英特尔 酷睿i7 6代系列

CPU型号

Xeon E7-4850 v3

Xeon E7-4820 v3

Xeon E7-4820 v3

Xeon E5-2630 v3

Intel 酷睿i7 6700K

CPU频率

2.3GHz

1.9GHz

1.9GHz

2.4GHz

4GHz 

标配CPU数量

2 颗

2 颗

2 颗

2 颗

1 颗

最大CPU数量

4 颗

4 颗

4 颗

2 颗

1 颗

制程工艺

22nm

22nm

22nm

22nm

14nm

三级缓存

24MB

25MB

25MB

20MB

8MB

总线规格

QPI 7.2GT/s

QPI 6.4GT/s

QPI 6.4GT/s

QPI 8GT/s

DMI 8 GT/s

CPU核心

十二核(Haswell)

十核(Haswell)

十核(Haswell)

八核(Haswell)

四核(Skylake)

CPU线程数

24线程

20线程

20线程

16线程

8线程

智能加速主频

2.8GHz

 

 

3.2GHz

4.2GMHz

内存

内存类型

DDR3

DDR4

RDIMM

RDIMM

DDR4

内存容量

32GB【需加装,建议64G】

64GB

8GB【需加装,建议不低于48G】

32GB【需加装,建议高于32G】

16GB 【需加装,建议不低于48G】

内存描述

32GB(4×8GB)TruDDR4 2133MHz内存
(实际运行频率1866MHz),支持内存镜像

32GB(4×8GB)TruDDR4 2133MHz内存
(实际运行频率1866MHz),支持内存镜像

8GB RDIMM 1600MT/s 低电压,双列 x8 带宽

16GB*2 RDIMM 2133MT/s 双列,x4 带宽

8GB x 2 , 2133MHz

内存插槽数量

24

4

8

8

4个DiMM插槽

最大内存容量

6TB

6TB

 

64G以上

——

 

 

 

 

 

——

存储

硬盘接口类型

SAS/SATA SFF SSD

SAS

SAS

SAS

 SSD + SATA

硬盘容量

【需加装,建议不低于4T】

【需加装,建议不低于4T】

146G【需加装,建议不低于4T】

6T

256GB SSD +1TB

硬盘描述

标配不提供

标配不提供

146GB 15K RPM SAS 6Gbps 2.5英寸热插拔硬盘

2TB*3 7.2K RPM SATA 
6Gbps 3.5英寸热插拔硬盘

混合硬盘(SSD+7200转HDD)

内部硬盘架数

标配1个8*2.5"热插拔硬盘模组

标配1个8*2.5"热插拔硬盘模组

 

机箱含高达8块3.5英寸
热插拔硬盘

单个

热插拔盘位

支持热插拔

支持热插拔

支持热插拔

支持热插拔

不支持

磁盘控制器

 

标配一个ServerRAID M5210支持SATA/SAS 0/1/10,可选Raid5/50/6/60升级密钥,可选1GB缓存或1GB/2GB/4GB闪存

ERC H730P 适配器 RAID 控制器,2GB NV 缓存

PERC H330 集成 RAID控制器

 

RAID模式

1个智能阵列 P830i/2GB FBWC

RAID 0,1,10

C4:RAID 5 适用于 H330/H730P (3-24 HDDs)

C9: RAID 5 适用于H330/H730/H730(3-16 HDDs或SSDs)

 

光驱

标配不提供【建议加装DVD-ROM】

标配不提供【建议加装DVD-ROM】

DVD-ROM,内置

DVD+/-RW,SATA,内置

DVD-Rambo

 

 

 

 

 

 

网络

网络控制器

四端口千兆网卡

四端口千兆网卡

Broadcom 5720 四端口1Gb 网络子卡

四端口千兆网卡

1000Mbps以太网卡




        具体配置等级需要根据项目大小和周期而定,建议Android 6.0及以下版本的ROM,最低不低于以下三项硬性标准的配置:

              CPU核心:       InterXeon E5-2630 16核(2颗8核16线程)

              内存容量:       32GB(DDR4)

              硬盘容量:       2TB(SAS/SSD)


Android 源码编译详解【二】:VMware12/Ubuntu16 下载、安装图解

VMware12/Ubuntu16 下载、安装图解


 1、软件下载 


       1.1、VMwareWorkstation v12.0下载


       VMware Workstation是一款运行在Windows上的虚拟PC软件,它提供专业技术人员每天所依赖的创新功能,支持 Win 8.1、Win 10 、平板电脑传感器和即将过期的虚拟机,可使你的工作无缝、直观、更具关联性,但VMware64位虚拟机才会支持64位的Ubantu操作系统


        Mac虚拟机推荐Parallels Desktop,没有Mac设备,不做讲解。


        VMware Workstation(64位) v12.0.0 中文精简绿色版下载

        http://www.3987.com/xiazai/1/15/45956.html


http://blog.csdn.net/mlq8087

 

        1.2、Ubuntu 16.04 LTS的下载


Ubuntu 每年发布两个版本,目前最新正式版版本也升到了 16.04。Ubuntu16.04 开发代号为“Xenial Xerus”,为第六个长期支持(LTS)版本,其主要特色是引入了新的 snap 包格式和 LXD 纯容器 hypervisor。


        Ubuntu 16.04 的其他特点包括:


                * 支持 IBM LinuxONE 及 z Systems 的 s390x 架构

                * 引入新的 Ubuntu MATE 社区版本

                * Linux 内核更新到 4.4.6,包含 ZFS on Linux

                * 桌面版本的 GTK、Qt 均已升级至最新版本,包含 Firefox 45、Chromium 48、LibreOffice 5.1、Python 3.5 等

                * 服务器版本包含 OpenStack Mitaka、Juju 2.0、LXD 2.0、NGINX 1.9.15、Docker 1.10、PHP 7.0、MySQL5.7 等



                一般情况下,对于实体服务器我们建议安装Ubuntu Server 16.04 LTS正式版下载地址如下:

                http://www.ubuntu.com/download/server


                如果要在虚拟服务器上安装Ubantu的话,建议安装Ubuntu Desktop 16.04 LTS正式版,下载地址如下:

                http://www.ubuntu.com/download/desktop


http://blog.csdn.net/mlq8087



 2、软件安装 


        2.1、VMware Workstation安装与创建


       由于提供下载的VMwareWorkstation是绿色版的,无需安装,只需要直接运行“!)安装VMware.cmd”进行配置注册表即可。


http://blog.csdn.net/mlq8087


        安装好VMware虚拟机后,启动虚拟机,点击“新建虚拟机”来给虚拟机安装操作系统,如下图:


http://blog.csdn.net/mlq8087


如下图:硬件兼容性版本,选最高版本Workstation 12;

http://blog.csdn.net/mlq8087


        如下图:选择“稍后安装操作系统”,这里也可以直接选择“安装程序光盘映像文件(iso)”,它与稍后安装的区别在于全英文系统安装步骤,不能提前下载语言包,设置语言、键盘布局等系统配置;



如下图:系统选择Linux,版本选择Ubantu 64位。



下图:填写虚拟机名称,并选择安装位置。



下图:选择分配给虚拟机处理器的核心数,建议尽可能多。



下图:分配虚拟机的运行内存,建议2GB或者4GB.



下图:选择虚拟机联网方式,选择“使用桥接网络”,以便局域网内其他用户的PC端可以通过SSH登陆服务器。



下图:默认选择推荐。



下图:选择SCSI或SATA都可,我这里选择了常见的SATA.



下图:选择磁盘,创建新虚拟磁盘。



下图:分配虚拟机磁盘容量:为了不影响后期编译,建议100GB左右;



下图:预览所有分配给虚拟机的主要配置,确认后,点击完成。



下图:完成虚拟机的创建和配置,点击对应名称可查看配置,右键“设置”,可更改对应某项的配置的参数,如内存大小,硬盘容量等。



 

 

2.2、Ubuntu 16.04 LTS 安装流程


        虚拟机创建完成之后,就要给该虚拟机安装操作系统,这里我们把之前下载的Ubuntu 16.04 LTS iso镜像文件,添加到CD/DVD驱动器中,启动虚拟机,就可以自动加载系统镜像文件,开始安装Ubantu系统了。

 

 

下图:点击启动虚拟机,自动加载了Ubantu系统镜像文件,进入系统安装界面



下图:进入语言选择界面,默认语言是英文,下拉可选择“中文(简体)”。


下图:点击“安装Ubantu”,进入安装更新和第三方软件选项,默认不勾选。



下图:默认选择“清除整个磁盘并安装Ubantu”并不会删除本地任何东西。



下图:选择用户时区,只要是标记中国区域内,都会显示“Shanhai”



下图:请注意,选择键盘布局必须选择“英语(美国)”



下图:设置计算机名、用户名、密码和登陆方式。



下图:点击继续,开始进行Ubantu系统是安装,安装完成点击重启。

 





 

至此,Ubantu 16.04 LTS安装成功,重启登陆进入系统。





 

Android源码编译详解【三】:Ubuntu 服务器的搭载与配置


配置Ubantu系统服务器,需要在“终端”输入指定的命令来安装指定的程序,进行对应的操作,类似于Windows中的命令行,因此在进行接下来的配置操作之前,我们需要搜索并打开打开“终端”程序。

 

 1、Root登陆Ubantu系统 

        Ubuntu系统相比于其他 Linux系统有一个与众不同的特点,那就是初次使用它时,你无法作为root账户来登录系统,为什么会这样?这就要从系统的安装说起。


        对于其他Linux系统来说,一般在安装过程中就设定root密码,这样用户就能用它登录root帐户或使用su命令转换到超级用户身份。然而Ubuntu安装时,默认并没有给root用户设置口令,也没有启用root帐户。那么问题来了,我们要想作为root用户来执行某些特定权限的命令该怎么办呢?


                                答案就是:我们可以使用“sudo命令”达到以上目的。


          “sudo”是Linux下常用的、允许普通用户使用超级用户权限的工具,该命令为管理员提供了一种细颗粒度的访问控制方法,通过它我们既可以作为超级用户又可以作为其它类型的用户来访问系统。这样做的好处是,管理员能够在不告诉其他用户root密码的前提下,授予他们某些特定类型的超级用户权限,这正是许多系统管理员所梦寐以求的授权方式。


                设置分配root权限非常简单,需要在终端执行如下命令设置root密码即可:


                               sudo passwd root


        根据提示设置root密码,设置完成后,输入“su”填写刚才设置的密码,登陆root用户就大功告成,如下图。


                        如上图所示,Root账户登录成功后,帐户名会以“root@”开头,并以白色字体显示。


                在进行团队成员登陆服务器权限的管理时,还可以用修改系统配置文件属性的方式在实现自动root,以下暂时用不到,这里就不赘述。

 

 2、下载并安装JDK 


        2.1.首先在终端输入以下命令来搜索当前系统的JDK版本;


                sudo apt-cache search openjdk


  

 

        2.2.上图可见,Ubantu 16.04默认支持的的版本为openjdk-8-jdk、openjdk-9-jdk,我们可是执行如下命令来安装它们。


                        sudo apt-get install openjdk-8-jdk

                        或

                        sudo apt-get install openjdk-9-jdk


                        但是,目前市面上最新版本的Android6.0,仅仅支持到OpenJDK7:



                    因此,出于编译兼容性的考虑,建议执行如下命令,下载并安装openjdk-7-jdk;


                    sudoadd-apt-repository ppa:openjdk-r/ppa

                    sudo apt-get update

                    sudo apt-get installopenjdk-7-jdk


 

        2.3.如果之前你已经安装了openjdk-8-jdk或者是其他版本,那么你需要进行当前使用的JDK版本的切换,如下图所示,执行如下命令,输入对应版本的数字,进行版本切换:



                         update-alternatives--config java


                        update-alternatives--config javac


                切换完成,可执行echo $JAVA_HOME命令查看当前的JDK版本。

 

 3、配置环境变量 


        跟配置Android环境类似,安装完JDK后,我们需要配置JAVA_HOME环境变量给系统;


        3.1.首先执行如下命令,查看当前系统是否已经配置JAVA_HOME;


                                  echo $JAVA_HOME

 

        3.2.写入JAVA_HOME(openjdk的安装路径)给系统配置文件 .bashrc;


                        echo export JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/" >> ~/.bashrc


                【建议复制粘贴,手动输入时,请注意命令字符间的空格】

 

        3.3.然后重启终端或通过使用以下命令加载加载修改后的系统配置;


                        source ~/.bashrc

 

        3.4.重新输入echo$JAVA_HOME命令,就可以看到刚刚设置好的配置。

 

               .

                【类似Windows平台配置Java/Android环境变量,我们可以另开一个终端,输入“java”或“javac”命令,来检验环境变量是否配置成功,也可以通过输入“java -version”查看当前安装OpenJDK版本】

 

 4、安装、配置SSH服务 


         SSH即 Secure Shell,它是由IETF的网络小组(Network Working Group)所制定的、建立在应用层和传输层基础上的安全协议。它是目前比较可靠,且专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH协议可以有效防止远程管理过程中的信息泄露问题,因此应用广泛。


        4.1.首先安装ssh-server端软件包,命令如下:


                      sudo apt-get install openssh-server

 


                        如果当前Ubantu系统为CD安装版时,我们可能还需要安装ssh-client:


                                sudo apt-get install openssh-client

 

        4.2.然后,确认ssh-server服务器是否启动成功,执行如下命令:


                            ps -e |grep ssh


                如果只有ssh-agent,那么说明ssh-server还没有启动;


                如果看到sshd那说明ssh-server已经启动了,如下图所示:


 

        4.3.ssh-server配置文件位于/etc/ssh/sshd_config下,使用以下命令查看:


                       cat /etc/ssh/sshd_config


                SSH默认端口是22,可以自定义SSH的服务端口,也可以改成其他端口,我们这里不做修改。


        4.4.重启ssh-server服务


                     sudo /etc/init.d/ssh restart

 

        4.5.管理用户


        如果开发团队有多位同事做ROM开发,大家需要用到Android编译服务器,那么我们就要为每人开一个SSH服务器登陆账号,在同一时间大家用各自的账号登陆服务器,在自己的个人目录下存放从主分支clone下来的代码,进行自己所负责模块的代码修改、编译和提交。


                添加新的网络访问帐户,执行如下命令:


                        sudo adduser luoqiang


        一般情况下,以同事的姓名拼音作为username,便于后期代码版本控制和管理中的识别。我们给新同事开账户的时候,可以统一规定一般账户的初始密码,例如:123456,或者是就是用户名,每个账户自己登陆上去之后,可以自行修改密码。



        若作为服务器管理员,建议同时开辟了两个公共账号,一个专门用来下载原始代码,这样只需要给一个账号申请下载权限;一个只用于出版本时编译,任何人不得修改编译账户下的代码,这样可以保证编译的工程的安全与洁净。

 

        4.6.登陆服务器


        从管理员那里确认已开通服务器登陆账户和密码之后,就可在各自的PC上登陆服务器,进行代码同步/提交等操作。

                使用Macbook OS X系统的同事,可以直接在“终端”程序输入:ssh用户名@服务器IP,进行登录;

                使用Windows系统的同时,则需要下载模拟Linux环境的Cygwin进行登陆。


 

 5、安装、配置GIT 


        5.1.安装git软件包


                sudo apt-get install git


 

        5.2.添加全局配置


                   设置git用户名:

                     git config --global user.name [username]

                   例如:git config --global user.name lqiang


                   设置git用户邮箱:

                   git config --global user.email [email]

                   例如:git config --global user.emaillqiang@lianluo.com


                    设置git输出着色:

                   git config --global color.ui true


                    设置编辑器工具为vim:

                    git config --global core.editor vim


                   以上配置所执行命名在一般用户端同样适用。

 

 6、安装编译依赖软件包 


对于Android ROM编译所依赖的软件包,Google官方有给出了明确的指示和安装命令,同时官方也会不定期的对这安装命令中的软件安装版本号进行更新。


因此我们需要先执行一下两条命令安装依赖软件包;


                   sudo apt-get install -y git git-core flex bison gperf build-essentialgnupg g++-multilib zip curl zlib1g-dev zlib1g-dev:i386 gcc-multilib xsltprocunzip m4 x11proto-core-dev tofrodos python-markdown dpkg-dev ccache

 

                   sudo apt-get install libncurses5-dev:i386 libx11-dev:i386libreadline6-dev:i386 libgl1-mesa-dev libc6-dev-i386 lib32z-dev libxml2-utils lib32ncurses5-devlibx11-dev libsdl1.2-dev libesd0-dev

 

                   然后执行下面这条命令更新安装好的可更新的软件包:

                   sudo apt-get update



Android源码编译详解【四】:Android 6.0_源码的下载与编译


 1、AOSP源码下载 


        AOSP:即为"Android Open-Source Project"的缩写,中文意为 :"安卓开放源代码项目"。

Google官方宣称:任何人都可以以任何目的使用Android源代码,我们也十分欢迎这样做。但是为了共享整个Android生态系统的应用程序,所有设备制造商必须参加“安卓兼容性计划”,但事实上......在中国很难实现兼容计划~!。


        目前,我们可以下载Google原生未定制修改的AOSP版Android源码进行测试编译,但是一定要保证整套源码的健全性,否则无法编译通过。


        正规手机厂商做ROM定制时,普遍的方案都是从源码定制厂商(如:高通、联发科、华为、Inter、Marvll等)拿到针对其硬件平台优化后的源码,进行二次的定制、修改、编译和发布(例如国内备受大家喜爱的: 小米 MIUI、魅族 Flyme、锤子 SmartisanOS、华为EMUI、一加 氢OS、OPPO ColorOS 等等)。


        通常情况下,手机厂商都会名义上免费拿到配套源码,前提是他们的产品需要搭载配套的芯片(如 高通的 Snapdragon 骁龙系列、MTK 的Helio 系列、华为的麒麟等)。

   

        这里提供一套Android 1.6 --- Android 6.0各个版本下载的网盘地址,供大家测试使用,其健全性还有待考究:


        链接: http://pan.baidu.com/s/1bmArk6           密码:m8fq

 

 2、上传源码到Ubuntu编译服务器 


        首次向编译服务器上传初始化源码,一般是由管理员账户执行,较比简便的的方式就是使用FTP软件(如Xshell、FlashFXP、Xftp等)登陆服务器,直接拖进对应的目录。



 3、 编译前的配置 


        编译前对编译环境的配置,是我们编译源码的必行之路。介于不同的源码定制厂商对环境配置可能会有一定的出入,因此,这里只是介绍几个基本通用的环境配置命令,供大家参考:

 

        3.1在 .bashrc文件中添加相关属性:

                echo export USE_CCACE=1 >> ~/.bashrc

 

        3.2为了提高编译效率,我们需要设置编译器高速缓存,执行以下命令:

                prebuilts/misc/linux-x86/ccache/ccache -M 50G

 

                -M 50G 两个参数表示设置50G大小的空间作为编译缓存,这个数值可以根据自己的硬盘空间大小进行调整

 

        3.3导入编译Android源码所需的环境变量和其它参数,运行以下命令:

                source build/envsetup.sh



        3.4运行lunch命令选择编译目标

                 lunch      

      

这里输入 "1" 选择aosp_arm_eng 


        各种版本的不同之处,待补充。

            

 4、执行编译 


        完成编译环境的配置之后,执行如下命令开始源码编译:

                sudo make -j8


        执行make -j8, 8为同时编译的线程数,一般Google推荐执行源码编译的线程数 = CPU核心数x 2 + 2,比如4核,就推荐10线程编译,执行make –10。


        关于cpu个数,可以用下面命令查看:

                cat /proc/cpuinfo


        编译命令同配置命令一样,不同的定制厂商都会包装出各自不同的源码编译方式和命令。

        由于使用虚拟机编译源码的时长超乎想象,所以,暂时不给大家提供编译结果的展示,后续,配置实体服务器编译正规源码后,补充贴图。

 

 5、刷机烧写ROM 


        由于暂时没有正式可编译的定制源码和测试机/测试板,而且不同源码定制平台厂商会提供不同刷机工具FlashTool,因此,这步暂时不做过多的说明,后续再行补充,敬请谅解。



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/120559
推荐阅读
相关标签
  

闽ICP备14008679号