导航:首页 > 源码编译 > android源码编译构建

android源码编译构建

发布时间:2022-09-13 08:07:05

‘壹’ 自己可以编译安卓源码

用最新的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内核问题,解决方法如下:
执行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通过使用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源码的多仓库管理机制.下面,不妨自己动手尝试一下.

    ‘贰’ android源码编译后如何制作成rom

    SDK是开发包,不是完整源代码吧。你可能需要在Linux上repo完整4.3源代码(25G左右,精简后8个多G)。如果手机内核不是3.0以上可能还要重新编译更新内核(Android4.3貌似一定要3.0以上内核版本)。其实我也不知道如何制作Rom,但略懂下载编译Android源代码和内核源代码,也想知道如何从源代码制作rom,希望能与楼主交流!

    ‘叁’ 如何搭建android源码编译环境搭建

    分为五个步骤来完成Android开发环境的搭建。


    第一步:安装JDK。

    要下载Oracle公司的JDK可以网络“JDK”进入Oracle公司的JDK下载页面,选择自己电脑系统的对应版本即可。


    第二步:配置Windows上JDK的变量环境 。

    java_HOME

    先设置这个系统变量名称,变量值为JDK在电脑上的安装路径:C:Program FilesJavajdk1.8.0_20。创建好后则可以利用%JAVA_HOME%作为JDK安装目录的统一引用路径。

    Path

    PATH属性已存在,可直接编辑,在原来变量后追加:;%JAVA_HOME%in;%JAVA_HOME%jrein 。

    CLASSPATH

    设置系统变量名为:CLASSPATH 变量值为:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar 。

    注意变量值字符串前面有一个"."表示当前目录,设置CLASSPATH的目的,在于告诉Java执行环境,在哪些目录下可以找到所要执行的Java程序所需要的类或者包。



    第三步: 下载安装Eclipse(已上传附件,电脑打开可下载)。

    Eclipse为Java应用程序及Android开发的IDE(集成开发环境)。Eclipse不需要安装,下载后把解压包解压后,剪切eclipse文件夹到你想安装的地方,打开时设置工作目录即可。



    第四步:下载安装Android SDK 。

    配置了JDK变量环境,安装好了Eclipse,这个时候如果只是开发普通的JAVA应用程序,那么Java的开发环境已经准备好了。要通过Eclipse来开发Android应用程序,那么需要下载Android SDK(Software Development Kit)和在Eclipse安装ADT插件,这个插件能让Eclipse和Android SDK关联起来。


    第五步:为Eclipse安装ADT插件。

    前面已经配置好了java的开发环境,安装了开发Android的IDE,下载安装了Android SDK,但是Eclipse还没有和Android SDK进行关联,也就是它们现在是互相独立的,就好比枪和子弹分开了。为了使得Android应用的创建,运行和调试更加方便快捷,Android的开发团队专门针对Eclipse IDE定制了一个插件:Android Development Tools(ADT)。


    ‘肆’ 如何搭建android源码编译环境

    1
    编译Android 源代码,Android官方推荐64位的ubuntu系统,最好是10.04的,对于10.10、11.10、12.04版本的ubuntu系统也是可以,但是小编一直习惯使用10.04的,所以几年来一直沿用至今

    请不要使用32位的Ubuntu系统,更不要使用10.04以下的ubuntu系统,不然编译会出现很多都问题,会浪费更多的时间,有的比较难解决,对于新人来说,还不如重新安装一个64位的ubuntu系统

    下面小编来说说怎么样查看当前安装好的ubuntu系统是多少位的
    按照下图所示的方法打开终端,然后输入命令并执行 uname -ar,在最后输出的信息中如果有amd64或者 x86_64 字样,那么就说明是64位的系统了,否则就是32位的系统了

    END
    安装jdk
    1
    jdk的安装,虽然Android官方还是有介绍,现在jdk的安装已经不支持使用添加源,然后用命令安装了,只能取java官网下载jdk,然后安装,然后将jdk的路劲添加到环境变量中,具体的安装和添加变量的方法,可以查看本文参考资料中的文档介绍,这里就不过多说明了

    另外需说明的是,对于2.3版本以后的Android,需要使用jdk6,即jdk1.6,而不要使用jdk1.7的

    2
    对于安装好的jdk,并且添加了环境变量,我们可以输入并执行命令java -version 来查看jdk版本,若是有类似下面的信息输入,那么说明jdk安装成功了

    END
    安装编译所需的工具
    1
    对于10.04的系统,我们只需要安装下面这些软件工具就可以了,直接复制到终端中,然后回车执行安装就ok,安装前保持电脑正常连接网络
    sudo apt-get install git-core gnupg flex bison gperf build-essential \
    zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
    x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
    libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
    libxml2-utils xsltproc

    2
    对于10.10的ubuntu系统,需要先安装下面的工具软件,直接输入执行下面的命令就可以安装:
    sudo apt-get install git-core gnupg flex bison gperf build-essential \
    zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
    x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
    libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
    libxml2-utils xsltproc

    3
    之后使用下面的命令做一个软链接文件:
    sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so

    4
    对于11.10的ubuntu系统,需要先安装下面的工具,输入并执行下面的命令:
    sudo apt-get install git-core gnupg flex bison gperf build-essential \
    zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
    x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
    libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
    libxml2-utils xsltproc

    5
    然后再安装这个对于11.10系统特别需要的工具
    sudo apt-get install libx11-dev:i386

    END
    设置高速缓存加快编译速度
    设置告诉缓存可以加快我们的编译速度,对于配置不是很高的电脑,最好是进行这个设置,这样可以为我们节约很多都时间

    先用vi或者gedit软件打开宿主目录下的.bashrc文件,然后在文件的最后添加:
    export USE_CCACHE=1
    之后保存退出,重新登陆系统,使设置生效

    在终端中,切换到源码根目录中,然后执行下面的命令,设置ccache的大小
    prebuilts/misc/linux-x86/ccache/ccache -M 50G

    其实ccache就是一个执行文件,后面的-M和50G是传递给ccache的参数,表示设置50G的缓存空间,这个大小可以根据我们的时间需要来修改

    ‘伍’ 如何制作Android源码编译脚本

    编译生成的 boot.img, system.img, userdata.img 用fastboot 就可以直接刷到机器去啊!由于android源码里不包含手机的驱动,所以编译前需要将驱动先提出来以备后用!

    ‘陆’ 如何定制android源码的编译选项

    现仅就工作遇到的问题做个总结。所用硬件平台为amlogic stvm3。---------------------------------------------------------------------------关于版本号:文件build/core/version_defaults.mk用来检查一些跟版本相关的变量是否定义;如果未定义,则使用默认值。这些变量包括 PLATFORM_VERSION # 如 2.2.5 PLATFORM_SDK_VERSION # 8, 对应2.2.5 PLATFORM_VERSION_CODENAME # REL,即发行版 DEFAULT_APP_TARGET_SDK # 同SDK_VERSION或VERSION_CODENAME BUILD_ID # 默认为UNKNOWN BUILD_NUMBER # 默认eng.$(USER).$(shell date +%Y%m%d.%H%M%S)的形式。 version_defaults.mk首先包含进build_id.mk。用户应当配置build_id.mk,而不应该改动version_defaults.mk文件。然后检查上述变量,如未定义则赋值默认值。---------------------------------------------------------------------------关于调试功能(adb)的开启编译android源码之前总是要先运行build/envsetup.sh,以初始化一些常用命令(实际上是bash的函数,如add_lunch_combo)。其中也从以下文件中引入了一些编译设置: device/${CHIPSET_VENDOR}/vendorsetup.sh我们这里使用的CHIPSET_VENDOR为amlogic。比如我们有文件device/amlogic/vendorsetup.sh,内容为"产品名-编译类型(flavor)"列表(称为combo),如下: add_lunch_combo m1ref-eng add_lunch_combo m1ref-user add_lunch_combo m2ref-eng add_lunch_combo m2ref-user add_lunch_combo stvm3-eng add_lunch_combo stvm3-user其中,m1ref和stvm3是产品名(作前缀),后面为编译类型。除此前缀外可选的combo值有: eng, user, userdebug, tests。(参考文件build/core/main.mk中对于变量TARGET_BUILD_VARIANT的筛查条件)我们可以修改vendorsetup.sh文件,来改变为特定设备编译的结果。以下是各个编译类型的特点: eng: 工程模式,用于平台级的调试,是默认的编译类型。

    ‘柒’ 如何定制android源码的编译选项 amp;后期安装

    Android编译过程比较长,配置起来也很麻烦。现仅就工作遇到的问题做个总结。所用硬件平台为amlogicstvm3。---------------------------------------------------------------------------关于版本号:文件build/core/version_defaults.mk用来检查一些跟版本相关的变量是否定义;如果未定义,则使用默认值。这些变量包括PLATFORM_VERSION#如2.2.5PLATFORM_SDK_VERSION#8,对应2.2.5PLATFORM_VERSION_CODENAME#REL,即发行版DEFAULT_APP_TARGET_SDK#同SDK_VERSION或VERSION_CODENAMEBUILD_ID#默认为UNKNOWNBUILD_NUMBER#默认eng.$(USER).$(shelldate+%Y%m%d.%H%M%S)的形式。version_defaults.mk首先包含进build_id.mk。用户应当配置build_id.mk,而不应该改动version_defaults.mk文件。然后检查上述变量,如未定义则赋值默认值。---------------------------------------------------------------------------关于调试功能(adb)的开启编译android源码之前总是要先运行build/envsetup.sh,以初始化一些常用命令(实际上是bash的函数,如add_lunch_combo)。其中也从以下文件中引入了一些编译设置:device/${CHIPSET_VENDOR}/vendorsetup.sh这里使用的CHIPSET_VENDOR为amlogic。比如文件device/amlogic/vendorsetup.sh,内容为"产品名-编译类型(flavor)"列表(称为combo),如下:add_lunch_combom1ref-engadd_lunch_combom1ref-useradd_lunch_combom2ref-engadd_lunch_combom2ref-useradd_lunch_combostvm3-engadd_lunch_combostvm3-user其中,m1ref和stvm3是产品名(作前缀),后面为编译类型。除此前缀外可选的combo值有:eng,user,userdebug,tests。(参考文件build/core/main.mk中对于变量TARGET_BUILD_VARIANT的筛查条件)可以修改vendorsetup.sh文件,来改变为特定设备编译的结果。以下是各个编译类型的特点:eng:工程模式,用于平台级的调试,是默认的编译类型。待安装的模块tag有:eng,debug,user,development.安装不带tag的非APK模块;所安装应用由产品定义文件给出;默认属性:ro.secure=0,ro.deuggable=1,ro.kernel.android.checkjni=1adbd默认开启,adb以root身份运行。user:即最终用户版;待安装的应用tag有:user安装不带tag的非APK模块;所安装应用由产品定义文件给出;默认属性有ro.secure=1,ro.debuggable=0;默认关闭adbd服务(但可通过应用settings来打开,且adb以shell身份运行);userdebug:与user类似,除了:支持有限的调试功能;待安装的应用tag有:debug;

    ‘捌’ 如何定制android源码的编译选项 后期安装

    Android编译过程比较长,配置起来也很麻烦。现仅就工作遇到的问题做个总结。所用硬件平台为amlogic stvm3。---------------------------------------------------------------------------关于版本号:文件build/core/version_defaults.mk用来检查一些跟版本相关的变量是否定义;如果未定义,则使用默认值。这些变量包括 PLATFORM_VERSION # 如 2.2.5 PLATFORM_SDK_VERSION # 8, 对应2.2.5 PLATFORM_VERSION_CODENAME # REL,即发行版 DEFAULT_APP_TARGET_SDK # 同SDK_VERSION或VERSION_CODENAME BUILD_ID # 默认为UNKNOWN BUILD_NUMBER # 默认eng.$(USER).$(shell date +%Y%m%d.%H%M%S)的形式。 version_defaults.mk首先包含进build_id.mk。用户应当配置build_id.mk,而不应该改动version_defaults.mk文件。然后检查上述变量,如未定义则赋值默认值。---------------------------------------------------------------------------关于调试功能(adb)的开启编译android源码之前总是要先运行build/envsetup.sh,以初始化一些常用命令(实际上是bash的函数,如add_lunch_combo)。其中也从以下文件中引入了一些编译设置: device/${CHIPSET_VENDOR}/vendorsetup.sh我们这里使用的CHIPSET_VENDOR为amlogic。比如我们有文件device/amlogic/vendorsetup.sh,内容为"产品名-编译类型(flavor)"列表(称为combo),如下: add_lunch_combo m1ref-eng add_lunch_combo m1ref-user add_lunch_combo m2ref-eng add_lunch_combo m2ref-user add_lunch_combo stvm3-eng add_lunch_combo stvm3-user其中,m1ref和stvm3是产品名(作前缀),后面为编译类型。除此前缀外可选的combo值有: eng, user, userdebug, tests。(参考文件build/core/main.mk中对于变量TARGET_BUILD_VARIANT的筛查条件)我们可以修改vendorsetup.sh文件,来改变为特定设备编译的结果。以下是各个编译类型的特点: eng: 工程模式,用于平台级的调试,是默认的编译类型。 待安装的模块tag有: eng, debug, user, development. 安装不带tag的非APK模块; 所安装应用由产品定义文件给出; 默认属性: ro.secure=0, ro.deuggable=1, ro.kernel.android.checkjni=1 adbd默认开启,adb以root身份运行。 user: 即最终用户版; 待安装的应用tag有: user 安装不带tag的非APK模块; 所安装应用由产品定义文件给出; 默认属性有ro.secure=1, ro.debuggable=0; 默认关闭adbd服务(但可通过应用settings来打开,且adb以shell身份运行); userdebug: 与user类似,除了: 支持有限的调试功能; 待安装的应用tag有:debug;

    ‘玖’ 如何在Ubuntu编译Android2.3源代码以及制作自己的SDK

    网上下一个软碟通软通(UitraISO)工具、然后去官网上下载一个64位ubuntu.*.iso系统文件、然后软碟通工具自己制作一个USB启动盘(非常简单)不会用软碟通的网络一下一大把!、系统最好是10.40以上的版本

    使用的是ubuntu官网下载的ubuntu10.04 LTS 64位版本(ubuntu-10.04.2-desktop-amd64.iso)

    配置软件源:

    系统安装完毕以后应该首先换一个速度快的软件源

    一般用的是ubunt

    不然下载各种更新和软件包的时候非常的慢

    安装JDK:

    我要编译的是2.3姜饼的源代码 所以需要使用jdk6 (还需要是64位的系统)

    如果是32为系统藐视jdk要安装jdk5.0的吧!藐视说有个doc什么的不行!所以系统一般装64的、如果是32的小伙们赶快把jdk看看

    安装方法:

    打开终端

    输入

    sudo add-apt-repository "deb "

    sudo add-apt-repository "deb-src "

    sudo apt-get update

    sudo apt-get install sun-java6-jdk

    就安装好了 (ubuntu10.04 LTS版会自带那两个源)

    并且不需要配置环境变量

    这一步可以参考

    安装各种软件包:

    终端中输入

    sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos texinfo libsdl-dev libwxgtk2.6-dev

    最后三个是我补充的 其他都是官方文档提供的

    这一步可以参考

    下载源代码:

    打开终端并输入

    mkdir ~/bin

    PATH=~/bin:$PATH

    这两句是在你的个人文件夹下创建了一个名字叫bin的文件夹 并且把其加入到了环境变量中

    再输入

    curl ; ~/bin/repo

    chmod a+x ~/bin/repo

    这两句首先在bin目录下面下载了一个repo文件 repo简单来说就说用来版本控制的 我们就是用的它来同步代码

    然后建立一个用来存放源代码的文件夹 我的这个文件夹的名字是android2.3

    输入

    mkdir android2.3

    cd android2.3

    进入android2.3目录

    输入

    repo init -u git://androi/platform/manifest.git -b gingerbread

    在此说明一下:

    安卓总称:“机器人”

    1.5系统:“纸杯蛋糕”

    Android 1.6 Donut甜甜圈
    Android 2.0 Eclair松饼
    Android 2.1 Eclair松饼
    Android 2.2 Froyo冻酸奶
    Android 2.3 Gingerbread姜饼(以上系统都是用于手机的)官方消息说2.4准备出来了!至于3.0目前只用于平板电脑

    Android 4.0 Ice Cream Sandwich(简称ICS,冰淇淋三明治),

    表示你需要的代码是姜饼的 所以最后是gingerbread 如果是2.2代码 就把gingerbread改成froyo

    然后你需要输入你的名字跟邮箱地址

    如果提示找不到repo命令的话 需要重新设置环境变量 就是之前的PATH=~/bin:$PATH

    输入

    repo sync

    开始同步代码 这个过程会根据你的网速来决定快慢

    这一步需要下载的数据有3g那么大

    可以续传 一次没下完也没关系

    如果之前就已经下过一次的话 只需要把源代码目录(我的是android2.3)下有一个叫.repo的隐藏文件夹里的projects文件夹备份出来就可以了

    以后还需要同步的时候再把projects文件夹拷贝回去

    ctrl+h查看隐藏文件

    这一步可以参考

    编译整个源代码:

    cd android2.3

    进入你的代码目录

    输入

    . build/envsetup.sh

    注意.和build中间有个空格

    输入

    lunch full-eng

    make -j2

    输入make就是开始编译代码了 加一个-j2参数就是开两个线程去编译 速度会快些 我花了两个小时的时间

    编译完毕以后马上输入

    emulator

    就可以运行模拟器了 系统能跑起来就说明编译成功了

    如果提示找不到emulator命令的话

    需要添加环境变量

    在android2.3目录下的out/target/proct/generic文件夹下会看到system.img

    能看到的话应该算是成功了

    这一步可以参考

    编译SDK:

    这一步在官方网站上没有说明

    但是在源代码文件夹里面有文档提到了

    就是在android2.3/sdk/docs目录下有一个叫howto_build_SDK.txt的文件介绍了如何编译SDK

    原文

    Then once you have all the source, simply build the SDK using: $ cd ~/my-android-git $ . build/envsetup.sh $ lunch sdk-eng $ make sdk

    看来不需要先编译整个系统再编译SDK 可以直接上来就编译SDK

    按提示输入

    make到时候也可以加上-j参数 比如 make -j2 sdk

    但是不推荐 因为容易编译失败 而且编译SDK只需要二十多分钟到时间 不算很长

    当出现

    Package SDK: out/host/darwin-x86/sdk/android-sdk_eng.<build-id>_mac-x86.zip

    的时候 就表示编译成功了 其中<build-id>默认是系统的用户名

    howto_build_SDK.txt中还提到了编译ADT插件

    我发现自己编译到ADT插件竟然认不到platform 自己编译出来到SDK也一样

    原因不明

    只要使用官方的SDK和ADT就没有问题了

    具体就是把自己编译出来platform拷贝到官方SDK里到platforms文件夹下 搞过Android开发都懂的

    最后:

    非常简单的一步

    就是直接修改源代码然后编译SDK就可以得到自己的SDK了

    我就示范一个简单的例子 抛砖引玉

    首先我找到TextView的代码

    在frameworks/base/core/java/android/widget 如图

    我在updateTextColors方法的开头添加了一句System.out.println

    打印了一句话"Source Code Changed"

    updateTextColors方法会在TextView的setTextColor方法中被调用

    好 保存

    编译

    然后使用这个platform

    新建一个项目

    调用一下TextView的setTextColor方法看看有什么效果一个很简单的例子看看

    Source Code Changed被打出来了

    SDK修改成功

    ‘拾’ 如何在Android源码下编译自己的项目

    在Android Studio代码调试一文中,简单的介绍了代码调试的一些技巧.现在我们来谈谈Android源码编译的一些事.(俺认为,作为android developer人人都应该有一份自己Android源码,这样我们就可以随时对自己有疑惑的地方通过亲手调试来加强理解).
    本文适用于Ubuntu 16.04上编译Android 6.0.*,其他情况请酌情处理,自行参考官网吧.
    请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:
    sudo apt-get install git
    git config –global user.email “[email protected]
    git config –global user.name “test”

    阅读全文

    与android源码编译构建相关的资料

    热点内容
    卡尔曼滤波算法书籍 浏览:765
    安卓手机怎么用爱思助手传文件进苹果手机上 浏览:841
    安卓怎么下载60秒生存 浏览:800
    外向式文件夹 浏览:233
    dospdf 浏览:428
    怎么修改腾讯云服务器ip 浏览:385
    pdftoeps 浏览:490
    为什么鸿蒙那么像安卓 浏览:733
    安卓手机怎么拍自媒体视频 浏览:183
    单片机各个中断的初始化 浏览:721
    python怎么集合元素 浏览:477
    python逐条解读 浏览:829
    基于单片机的湿度控制 浏览:496
    ios如何使用安卓的帐号 浏览:880
    程序员公园采访 浏览:809
    程序员实战教程要多长时间 浏览:972
    企业数据加密技巧 浏览:132
    租云服务器开发 浏览:811
    程序员告白妈妈不同意 浏览:333
    攻城掠地怎么查看服务器 浏览:600