Android编译简述

安卓8.1源码编译以及魔改小试 安卓源码编译 阅读详情

android源码编译的四个流程:
1.源码下载;
2.构建编译环境;
3.编译源码;
4运行;

1 源码下载:
说明:由于某墙的原因,这里我们采用国内的镜像源进行下载

1.1 repo工具下载及安装
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

:repo就是这么一种工具,由一系列python脚本组成,通过调用Git命令实现对AOSP项目(安卓开发源代码项目)的管理

2 建立源码文件夹:
说明:熟悉Git的同学都应该知道,我们需要为项目在本地创建对应的仓库.同样,这里为了方便对代码进行管理,我们为其创建一个文件夹.这里我在当前用户目录下创建了source文件夹,后面所有的下载的源码和编译出的产物也都放在这里,命令如下:

mkdir source
cd source

3 初始化仓库
我们将上面的source文件夹作为仓库,现在需要来初始化这个仓库了.通过执行初始化仓库命令可以获取AOSP项目master上最新的代码并初始化该仓库,命令如下:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
或者使用:
repo init -u git://aosp.tuna.tsinghua.edu.cn/aosp/platform/manifest

两者实现的效果一致,仅仅只是协议不同.

注意:如果执行该命令的过程中,如果提示无法连接到 gerrit.googlesource.com, 那么我么只需要编辑 ~/bin/repo文件,找到REPO_URL这一行,然后将其内容修改为:
REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo' 然后重新执行上述命令即可

补充说明:不带参数的manifest命令用于获取master上最新的代码,但是可以通过-b参数指定获取某个特定的android版本,比如我们想要获取android-4.0.1_r1分支,那么命令如下:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1

4 同步源码到本地:
初始化仓库之后,就可以开始正式同步代码到本地了,命令如下:
repo sync

以后如果需要同步最新的远程代码到本地,也只需要执行该命令即可.在同步过程中,如果因为网络原因中断,使用该命令继续同步即可.不出意外,5个小时便可以将全部源码同步到本地.所以呢,这个过程可以放在晚上睡觉期间完成.

(提示:一定要确定代码完全同步了,不然在下面编译过程出现的错误会让你痛不欲生,不确定的童鞋可以多用repo sync同步几次)。

由于网络原因,在使用repo sync同步代码的过程中会多次出错,总不能时时刻刻刻盯着,能不能在同步失败的情况下,自动重试呢?当然可以,我们可以写一个简单的shell脚本:
#!/bin/bash
#FileName source_asyn.sh
PATH=~/bin:$PATH
# 注意修改成你要编译的版本,比如这里我在mac上编译的是Android-7.1.1——r6
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.1_r6
repo sync
while [$? = 1]: do
echo “=========download failed,again============”
sleep 5
repo sync
done

将该文件保存在源码目录下,也就是我们的source目录,然后执行该脚本即可,现在你可以安心的等待源码下载完成了
注意:由于 .repo 目录是隐藏目录,因此在下载完成之前你是不看到啥东西的。

5 构建编译环境:
源码下载完成后,就可以构建编译环境了.在开始之前,我们先来看看一些编译要求:
5.1. 硬件要求:
64位的操作系统只能编译2.3.x以上的版本,如果你想要编译2.3.x以下的,那么需要32位的操作系统.
磁盘空间越多越好,至少在100GB以上.意思就是,你可以去买个大点的硬盘了啊
如果你想要在是在虚拟机运行linux,那么至少需要16GB的RAM/swap.
(实际上,我非常不推荐在虚拟机中编译2.3.x以上的代码.)
5.2 软件要求:
5.2.1 操作系统要求
Android版本 编译要求的Ubuntu最低版本
Android 6.0至AOSP master Ubuntu 14.04
Android 2.3.x至Android 5.x Ubuntu 12.04
Android 1.5至Android 2.2.x Ubuntu 10.04

    5.2.1 JDK版本要求
        AOSP的Android主线  OpenJDK 8
    Android 5.x至android 6.0     OpenJDK 7
    Android 2.3.x至Android 4.4.x     Oracle JDK 6
    Android 1.5至Android 2.2.x   Oracle JDK 5

    我现在在Ubuntu 16.04下编译AOSP主线代码,因此需要安装OpenJDK 8,执行命令如下:
    sudo apt-get install openjdk-8-jdk
    如果你需要在Ubuntu 14.04下编译AOSP主线代码,同样需要安装OpenJDK 8,此时需要执行如下命令:
    sudo apt-get update
    sudo apt-get install openjdk-8-jdk

    如果你要编译的是Android 5.x到android 6.0之间的系统版本,需要采用openjdk7.但是在Ubuntu 15.04及之后的版本的在线安装库中只支持openjdk8和openjdk9的安装.因此,如果你想要安装openjdk 7需要首先设置ppa:
    sudo add-apt-repository ppa:openjdk-r/ppa 
    sudo apt-get update

    然后再执行安装命令:
    sudo apt-get install openjdk-7-jdk 

    有时候,我们需要编译不同版本的android系统,就可能使用不同的jdk版本.关于jdk版本切换,可以使用如下命令:
    sudo update-alternative --config java
    sudo update-alternative --config javac

    5.2.3 其他要求:
    Google官方构建编译环境指南中已经说明了Ubuntu14.04,Ubuntu 12.04,Ubuntu 10.04需要添加的依赖,这里我们就不做介绍了.我原先以为,Ubuntu16.04的设置和Ubuntu14.04的依赖设置应该差不多,但是只能说too young too simple.
    下面是Ubuntu16.04中的依赖设置:

    sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
    sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
    sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
    sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
    sudo apt-get install git-core gnupg flex bison gperf build-essential  
    sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib 
    sudo apt-get install libc6-dev-i386 
    sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
    sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
    sudo apt-get install lib32z-dev ccache

6 初始化编译环境:
确保上述过程完成后,接下来我们需要初始化编译环境,命令如下:
source build/envsetup.sh :: 主要是加载device/vendor目录下面的vendorsetup.sh文件
7 编译源码:
7.1 选择编译目标
通过lunch指令设置编译目标,所谓的编译目标就是生成的镜像要运行在什么样的设备上.这里我们设置的编译目标是aosp_arm64-eng,因此执行指令:lunch aosp_arm64-eng
7.2 开始编译
make -j8
7.3 运行模拟器:
在编译完成之后,就可以通过以下命令运行Android虚拟机了,命令如下:
source build/envsetup.sh
lunch(选择刚才你设置的目标版本,比如这里了我选择的是2)
emulator

如果你是在编译完后立刻运行虚拟机,由于我们之前已经执行过source及lunch命令了,因此现在你只需要执行命令就可以运行虚拟机:
emulator

8 SDK编译:
8.1 初始化编译环境:source build/envsetup.sh
接下来是设定编译目标:lunch sdk-eng
最后通过以下命令编译SDK: make sdk
出现以下提示表示编译完成,不出意外,在out/host/linux-x86/sdk就可以看到了: ….sdk_deps.mk

Android device/xxx/system/common/overlay 编译产物介绍与验证 确认framework-res.apk的代码来源,寻找device/mediatek/system/common/overlay/客制化资源的产物路径。 阅读详情

相关推荐

Windows下编译android版ijkplayer

今天也来编译一下ijkplayer ,并做记录。 先普及一下cygwin和mingw知识 cygwin和mingw都是为用户提供在windows操作系统使用GNU工具的方法,使得在windows上可以编译为linux写的c源代码并运行(让你可以用signal等linux才有的api)。真正的不同在于 1,cygwin大,mingw小 2,cygwin编译后的exe需要cygwin1.dll作

WangShuo的专栏 5216

android 自定义编译项

网上很多教程,但大多数都是有问题的, build/core/envsetup.mk:164: *** No config file found for TARGET_DEVICE zxctest 。 停止。** Don't have a product spec for: 'zxctest' ** Do you have the right repo manifest? 这种报错 有两种情况:1、 mk文件中 :PRODUCT_DEVICE := zxctest 后边有空格

ziyexiuxiu的专栏 1451

Android 编译文件简述(Android.mk)

Android.mk 文件是 Android 构建系统中的一种构建配置文件,使用 GNU Make 语法,用于定义 Android 项目中的模块、库、应用程序、JNI 代码等的编译和链接方式。每个 Android.mk 文件通常对应一个目录,代表构建系统应该如何处理该目录下的源码,常见的构建模块包括应用程序、库和 JNI 本地代码模块。

weixin_35723192的博客 836

编译android源码中的资源文件

1、将资源放入 frameworks/base/core/res/res/ 中的相应目录,假设要添加的资源是 drawable 类型,文件名为 test(后缀可能为xml或者png等等),则将文件放入 frameworks/base/core/res/res/drawable*/ 下。 2、仿照已有的同类型系统资源修改 framework/base/core/res/res/values/pub

june5253的专栏 1万+

Android 编译文件简述(Makefile)

Android make的发展史可以追溯到Android系统整体的发展历程以及其中构建系统的演变。

weixin_35723192的博客 341

Android 编译文件简述(Android.bp)

Android.bp文件是Android开源项目(AOSP)中用于构建Android系统的一种构建配置文件格式。与旧的Android.mk文件相比,Android.bp文件采用了更加现代化和模块化的方式来描述构建配置,具有更好的可读性和扩展性。Android.bp文件以模块为单位进行配置,每个模块描述了一个组件(如库、应用程序等)的构建规则。Android.bp文件采用声明式语法,使用一系列的属性来描述模块的属性和构建规则,而不是使用Makefile中的命令式语法。

weixin_35723192的博客 825

Android系统编译常用配置及指令

有时间来整理一下Android系统编译的内容,本文从三方面展开:编译过程、常用的编译配置和命令

star_nwe的博客 1854

Android 编译文件简述(CMakeLists.txt)

CMakeLists.txt 是 CMake (Cross Platform Make)构建系统中用于配置项目的核心文件。它采用 CMake 自定义的语法,用于指定项目的组织结构、编译选项、依赖项等信息。通过编写 CMakeLists.txt 文件,可以实现跨平台的项目构建和管理。这个文件通常包含项目的名称、版本信息、源文件列表、编译选项、链接库、生成可执行文件或库等指令。

weixin_35723192的博客 497

简述android源代码的编译过程,Android源码编译过程详述

首先说一下,编译Android所用的系统,目前ubuntu是比较好的平台,也是官方推荐的,但具体版本,说的都比较少,为了避免大家走弯路,我 这里说一下,最好的就是ubuntu 8.10,他所带有的各个Android编译主要包括对C,C++,的编译,这里主要是GCC,G++,首先下载Android的源代码,Android的源代码管理工具是使用git,配合repo来实现的,安装git,curl ; /...

weixin_39955938的博客 2302

Android 编译文件简述(Makefile 2)

承接上一篇[Android 编译文件简述(Makefile)](https://blog.youkuaiyun.com/weixin_35723192/article/details/138967752),继续讲解Make使用方法。本篇文章简述Makefile的编译和执行流程控制。

weixin_35723192的博客 306

Android 编译文件简述(Makefile 3)

Makefile中的make函数扮演着至关重要的角色。它为处理文件名、变量、文本和命令提供了强大的工具。通过使用函数,Makefile的编写变得更加灵活和健壮。我们可以在需要的地方调用函数来处理特定的文本,将待处理的文本作为函数的参数传递进去,并在调用函数后使用其处理结果。

weixin_35723192的博客 222

安卓-编译过程简述

Android工程的编译过程 现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什么,需要什么环境和工具,输入和输出是什么。那么我们就来挖掘一下Android的编译过程中的细节。 首先,我们假定你的系统(什么系统都行,不限于Linux还是W

箫枫-Phelovhl 831

LTspice导入德州仪器SPICE模型的实用指南与常见问题解析

本文详细介绍了如何在LTspice中导入德州仪器的SPICE模型,包括模型文件获取、路径管理、导入步骤及常见问题解析。通过实用指南帮助工程师精确仿真电路性能,提升设计效率,重点涵盖了第三方模型的导入教程和最佳实践。

kk1234的博客 309

Android应用程序编译过程简述

引言Android编译过程是指Java代码以及xml等资源文件转变为.apk文件的过程,本文将简单阐述这一过程,但不会深入,建立这一概念,为了更好的学习Android。此文参考了《Android编程权威指南》一书。编译流程先看一下编译流程示意图 如图所示: 首先,资源文件会被资源打包工具(aapt:Android Asset Packaging Tool)编译压缩; 然后Java代码包括src

不悔的青春 4980

MTK-AWB 小结 (二)

调试总结:可以将offset 对应的ratio加大,保留更多的喜好色(偏色),影响WF statistic gain,从而影响最终的awb gain。这一部分前期CCT校准的时候就会算出一组默认值,当然这个offset offse 值用于优化T,S,wf 光下的偏色喜好度. offset。后面遇到 A H Shad 光收白或者偏色,还可以优化 A 的offset ,H offset,shad offset.new offset 计算过程(Day locus offset 和M/G offset )

qq_46056347的博客 1168

2026年AI编程工作流实战:Claude Code与Open Code深度对比

AI编程已从代码生成工具升级为IDE级智能工作流核心能力。其本质是将大语言模型深度嵌入开发环境,通过语义理解、上下文感知与行动闭环重构传统编码范式。Claude Code以企业级知识图谱和双轨Code Review为代表,强调合规性、可审计与深度集成;Open Code则依托Skill可组合性、本地优先模型与ocp协议,实现开源驱动的灵活扩展。二者共同推动IDE从‘编辑器’进化为‘数字搭档’——能理解RFC文档、记住PR评论、自动补全带重试的fetch逻辑,并在Promise链发呆时一键重构为async/a

weixin_33739523的博客 465

Android 8.0编译系统简述

Android 8.0编译系统简述 概述 Android 7.0之前,android编译主要依赖makefile,随着android工程越来越大,makefile编译花费时间也越来越多,所以7.0开始逐步引入了kati soong(可选,用的话需要在执行编译时将USE_SOONG=true开启),soong会将Android.bp(用于替换Android.mk文件)文件转化为ninja文件,然后由...

Welljia的专栏 722

硬件作品3----STM32F103RCT6最小系统板MCU配置

电路未调试成功,目前刚打板,后续需要补充或者改版另行注明。

weixin_58364194的博客 5563

Android编译系统的架构 简述

Android编译系统的架构:          分析Android编译系统,你会发现,Android编译系统完成的并不仅仅是对目标(主机)系统二进制文件、java应用程序的编译、链接、打包等,而且还有包括生成各种依赖关系、确保某个模块的修改引起相依赖的文件的重新编译链接,甚至还包括目标文件系统的生成,配置文件的生成等,因此Android编译系统具有支持多架构(linux-x86、windows

andy205214的专栏 831

巨详细Java JDK环境配置(Mac 版)

本篇最详细保姆级教程Mac OS上安装JDK以及配置环境细化每个步骤过程认真看完。

EverythingDone的博客 1万+

用FPGA控制步进电机是种什么体验?从状态机到分频器,详解Verilog驱动A4988全流程

本文详细介绍了如何使用FPGA通过Verilog语言控制步进电机,从状态机设计到A4988驱动模块的精准控制全流程。FPGA的并行处理能力和纳秒级响应速度使其在步进电机控制中展现出显著优势,特别适合工业自动化和精密仪器应用。通过实战代码示例,展示了如何实现高效的状态机设计和可编程分频器,为开发者提供了一套完整的FPGA驱动步进电机解决方案。

weixin_30983965的博客 329

Android渗透思路简述及入门反编译基础。

猩红实验室 欢迎投稿分享交流 0x00 前言 为什么要进行移动端渗透? 对于渗透测试人员来说,在日常测试工作中经常设计移动APP的安全检测,多一个攻击面也就意味着目标系统多了一份被攻破的可能,且随着移动互联网时代的到来,使得越来越多的功能由计算机转向手机等移动设备。 移动端存在哪些漏洞? 大部分漏洞其实都是存在于服务器端,例如SQL注入、越权漏洞、支付漏洞、CSRF、变量覆盖、反序列化、文件包含等等,这些漏洞与我们用pc端还是移动端访问并无关系。 同理,渗透测试的核心思想就是把控传参,app渗透和.

xianyu9w的博客 7324

DeepSeek掘金——用DeepSeek模型构建AI 代理

在本综合指南中,我们将探讨如何利用 DeepSeek 的功能构建能够以有意义的方式理解、推理和交互的复杂 AI 代理。人工智能领域正在迅速发展,DeepSeek 的模型代表了智能 AI 代理开发的重大进步。在本综合指南中,我们将探讨如何利用 DeepSeek 的功能构建能够以有意义的方式理解、推理和交互的复杂 AI 代理。

3860

自己动手编译Android源码(超详细)

转载:http://www.jianshu.com/p/367f0886e62b在Android Studio代码调试一文中,简单的介绍了代码调试的一些技巧.现在我们来谈谈android源码编译的一些事.(俺认为,作为android developer人人都应该有一份自己Android源码,这样我们就可以随时对自己有疑惑的地方通过亲手调试来加强理解).本文使用最新的Ubuntu 16.04,请首先...

Daway2014的博客 452

高通8155源码下载与Android源码编译

一.下载代码 高通下载源码位置: Qualcomm CreatePoint 注册账号,然后登入 可以先选择edit -> infotainment -> sa8155 -> favorites, 点击View TOC就可以过滤出sa8155所有的信息目录.如下图 拉取代码链接在ChipCode中,点击进去可以看到所有的基线版本,选择你需要下载的版本点进去,如sa8155p-la-1-0_ap_standard_oem,把高通专有代码和开源代码都下载到本机. 1..

Johnny2004的专栏 7675

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android双向绑定原理简述

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33682719的博客 480

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: Android设备功耗调试简述
下一篇: battery historian安装简述
Ma浩然
博客等级 码龄9年 1万+粉丝 462原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值