编译构建android 源码

Android源码编译加速:Ninja工具详解与构建系统解析 随着Android操作系统的不断进化,其版本更迭日益频繁,尤其是Android 10与Android 11的源码编译过程,开发者们面临了一个显著的问题:单模块编译时间的冗长。通常情况下,完成一次单模块的编译需要耗费半个小时甚至更长时间,这主要归因于编译过程中需要重新加载全部mk文件,并经由这一系列复杂的步骤生成ninja编译文件,而这一预处理阶段异常缓慢,相比之下,实际的编译过程则显得相当迅速。为了应对这一挑战,Google引入了ninja这一高效的编译工具,它极大地缩短了编译时间。 阅读详情

编译构建环境

  • ubuntu 8.10 (32-bit x86)
  • jdk 5.0 当前android 版本需要在5.0环境下编译,java6目前不支持。原因是在生成javadoc的时候某些标记不兼容导致编译失败。
  • gcc ,g(plugs plugs) libc6-dev python (ubuntu默认已经提供)
  • 10G以上的磁盘空间及1G以上内存。

构建编译

1. 使用apt-get 安装所需软件

sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

2. 安装repo同步工具

cd ~
mkdir bin
cd bin
curl http://android.git.kernel.org/repo >~/bin/repo
chmod a+x ~/bin/repo

3. 创建源码工作目录

cd ~
mkdir android
cd android

4.初始化工作空间

cd ~ android
../bin/repo init -u git://android.git.kernel.org/platform/manifest.git

完成目录初始化的工作将开到以下的信息提示:

repo initialized in /mydroid

注:当前使用repo命令同步源码库的android主干版本,如果需要同步其他分支版本需要使用 -b 参数 如以下示例

../bin/repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake

同步版本标记为cupcake 的版本

5. 开始从android源码库同步源码,源码大概2个G左右同步时间取决于网速

../bin/repo sync

6. 编译前的准备工作 设置环境变量

编辑 .bashrc 文件加入以下环节变量

PATH=$PATH:~/android/bin
JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
ANDROID_PRODUCT_OUT=~/android/out/target/product/generic
ANDROID_PRODUCT_OUT_BIN=~/android/out/host/linux-x86/bin
PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT}:~/eclipse
export PATH JAVA_HOME ANDROID_PRODUCT_OUT

使环境变量生效

cd ~
source .bashrc

7. 编译构建

执行make进行编译,这个过程也比较耗时需耐心等待。

cd ~ android
make

编译完成后会在$ANDROID_PRODUCT_OUT 目录生成 ramdisk.img、system.img、userdata.img 三映像文件,模拟器或真实设备运行需要这3个映像文件。

启动模拟器

emulator

如果看到模拟器的界面正常显示,说明这次基本构建已经完成。

创建SDK

在构建编译成功后可以继续构建android sdk 开发包。网上的文档基本上说通过make sdk 命令即可完成sdk的生成,经过我的测试这样直接生成的sdk并不能正常使用而是通过以下步骤完成sdk的构建。

cd ~ android
. build/envsetup.sh
lunch sdk-eng
make sdk

编译部署指定的模块

如果我们需要编译部署单独的一个模块可以通过”mmm” 命令实现,如下示例编译部署浏览器模块。

cd ~ android
. build/envsetup.sh
mmm packages/apps/Browser/

注:mmm 命令必须在运用 envsetup.sh 后使用

在重新编译了更新的模块后如我们在模拟器环境下测试需要重新生成system.img 使用以下命令重新生成system.img (这个过程会比使用make快一些)

make snod


Ubuntu 9.10编译时问题收集


1.找不到PRODUCT_POLICY

frameworks/policies/base/PolicyConfig.mk:22: *** No module defined for the given PRODUCT_POLICY (android.policy_phone).

解法: 修改build/tools/findleaves.sh的89行:

#find "${@:0:$nargs}" $findargs -type f -name "$filename" -print |
find "${@:1:$nargs-1}" $findargs -type f -name "$filename" -print |

2. fprintf未定义

frameworks/base/tools/aidl/AST.cpp:10: error: 'fprintf' was not declared in
this scope

解法:

apt-get install gcc-4.3 g++-4.3,
cd /usr/bin
rm /usr/bin/gcc
rm /usr/bin/g++
ln  -s gcc gcc-4.3
ln -s g++ g++-4.3

3.安装sun- java6-jdk,并且在环境变量中设置:

export JAVA_HOME=/usr/lib/jvm/java-6-sun/
export ANDROID_JAVA_HOME=$JAVA_HOME

参考资料


Android 4.0 Cream Sandwich(ICS) 编译构建环境

  • Ubuntu 10.04
  • Python 2.4 – 2.7
  • JDK 6
  • Git 1.7 或者更高版本

64位系统:

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

On Ubuntu 10.10: $ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so

On Ubuntu 11.10: $ sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so

32-bit (experimental)

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
  libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
  libxml2-utils







从零构建Android Chromium:源码获取、编译与部署实战 本文提供了一份从零开始构建Android版Chromium浏览器的完整实战指南。详细介绍了环境准备、使用depot_tools获取源码、GN配置编译参数以及最终编译部署的全过程,帮助开发者成功打造属于自己的定制化浏览器。 阅读详情

相关推荐

Android 10源码编译实战:Java及UI代码的构建过程

本文还有配套的精品资源,点击获取 简介:Android 10及以上版本的源码构建中,引入了两种新的编译方式:Android.mk和Android.bp。Android.mk是基于Makefile的旧版构建系统,而Android.bp是采用YAML格式的新模块化构建系统。本文章将详细介绍这两种编译方式的语法差异、自动检测功能、模块化和性能优化方面,以及在实际开发中的使用场景和...

weixin_31315007的博客 1192

nexus5线刷android6.0,Nexus 5线刷记录-fastboot: error: ANDROID_PRODUCT_OUT not set

fastboot: error: ANDROID_PRODUCT_OUT not set错误~/hammerhead_antidebug fastboot -w flashallERROR: Couldn't create a device interface iterator: (e00002bd)ERROR: Couldn't create a device interface iterato...

weixin_36170708的博客 2484

fastboot 2020年 android10版本 ubuntu linux平台

fastboot android10版本 ubuntu linux平台 fastboot version 28.0.2-PD02.200305.0422 $ fastboot -h usage: fastboot [OPTION...] COMMAND... flashing: update ZIP Flash all partitions from an update.zip package. flashall Flash all partitions from $ANDROID_PRODUCT_OUT. On A/B devices, flashed slot is set as active. Secondary images may be flashed to inactive slot. flash PARTITION [FILENAME] Flash given partition, using the image from $ANDROID_PRODUCT_OUT if no filename is given. basics: devices [-l] List devices in bootloader (-l: with device paths). getvar NAME Display given bootloader variable. reboot [bootloader] Reboot device. locking/unlocking: flashing lock|unlock Lock/unlock partitions for flashing flashing lock_critical|unlock_critical Lock/unlock 'critical' bootloader partitions. flashing get_unlock_ability Check whether unlocking is allowed (1) or not(0). advanced: erase PARTITION Erase a flash partition. format[:FS_TYPE[:SIZE]] PARTITION Format a flash partition. set_active SLOT Set the active slot. oem [COMMAND...] Execute OEM-specific command. gsi wipe|disable Wipe or disable a GSI installation (fastbootd only). boot image: boot KERNEL [RAMDISK [SECOND]] Download and boot kernel from RAM. flash:raw PARTITION KERNEL [RAMDISK [SECOND]] Create boot image and flash it. --dtb DTB Specify path to DTB for boot image header version 2. --cmdline CMDLINE Override kernel command line. --base ADDRESS Set kernel base address (default: 0x10000000). --kernel-offset Set kernel offset (default: 0x00008000). --ramdisk-offset Set ramdisk offset (default: 0x01000000)

android10内核源码编译及刷机

官方文档 编译内核:https://source.android.com/setup/building-kernels 构建内核:https://source.android.com/setup/build/building-kernels#customize-build

u013428193的博客 4285

Android API是从Android源代码中提取出Javadoc做成Chm的pdf电子书PART02

Android API是从Android源代码中提取出Javadoc,做成Chm的PDF电子书

java生成及验证android签名文件源码及生成签名文件

此文件包含生成android签名文件keystore及验证的源码还包含生成的keystore文件。放到项目中即可使用

Ubuntu 配置 Android 开发环境遇到的问题

#unable to run mksdcard sdk tool sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6 #

Abner-L 2218

nRF开发环境搭建全攻略:VS Code + nRF Connect SDK + Zephyr实战

嵌入式开发中,环境配置往往是新手入门的第一道障碍,尤其面对基于Zephyr RTOS的Nordic nRF平台时,工具链的复杂度常让人望而却步。理解构建系统、SDK版本管理和调试工具之间的协作关系,是高效开发的前提。Zephyr作为开源实时操作系统,通过设备树和Kconfig实现硬件描述与功能配置,而nRF Connect SDK(NCS)则是Nordic基于Zephyr的增强发行版,两者结合为物联网开发提供了强大支持。基于VS Code搭建开发环境,配合west工具管理多仓库、CMake/Ninja执行构

weixin_29188997的博客 225

Ubuntu下fastboot命令无法使用解决方案

fastboot环境变量都设置好了,机器已进入bootloader模式,fastboot device提示 < waiting for any device > 解决方法: https://github.com/snowdream/51-android

z9722的博客 1455

基于rms包的限制性立方样条回归(RCS)R代码实现

RCS

2301_79584199的博客 2万+

IFRS 9与CECL对比解析:跨国企业财务必须掌握的两种信用损失模型

本文深度解析IFRS 9与CECL两种信用损失模型的差异,帮助跨国企业应对财务合规挑战。从基础架构、数据治理到监管策略,详细对比三阶段模型与单一阶段模型的核心区别,并提供实施双轨制的实务建议,助力企业优化资本管理和税务筹划。

3c4x5z6v7b的博客 668

Ubuntu 12.04 LTS , 编译Android 源代码遇到的若干问题记录

官方安装步骤 http://source.android.com/source/initializing.html#installing-required-packages-ubuntu-1204 Environment: Ubuntu 12.04 LTS JDK 6 在进行到 1 2 3 4 5 >$ sudo apt-get instal

u012840649的专栏 3822

【现代人形机器人:从物理建模到大模型驱动的控制与学习】第1章 机器人建模回顾

本章建立读者进行后续控制 / 优化 / 学习工作的数学与计算基础。内容分为三大块:刚体运动学:位姿表示、坐标变换、旋转参数与李代数/李群(指数映射、twist)多关节机构的正/逆运动学:DH 与 POE 两种建模、雅可比矩阵推导、数值/解析逆解方法与奇异性问题约束动力学:拉格朗日公式、牛顿—欧拉递归算法、接触/冲击模型、受约束系统的方程(拉格朗日乘子与互补性条件)每一节同时给出与练习题。假设读者已具备线性代数(矩阵、特征分解、SVD)、多变量微积分与基础力学(牛顿第二定律)知识。

u012133341的博客 185

【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )

一、安卓应用构建简介、 二、Java 源码编译、 三、AIDL 源码编译、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2199

RK3588平台开发系列讲解(硬件篇-功能外设2)

RK3588 芯片内置两个USB3.0 OTG控制器(内嵌2个USB2.0 OTG,下图绿色处),1个USB3.0 HOST 控制器,2个USB2.0 HOST控制器。这些控制器与PHY的内部复用图如下:USB3.0 OTG0 控制器支持SS/HS/FS/LS, 内嵌的USB2.0(HS/FS/LS)信号采用USB2.0 OTG PHY, 信号名见下图的红色方框内;RK3588目前仅此接口支持做Fireware的Download,应用中请务必要预留出。

whm128的博客 2508

Android面试必考问题:Android性能优化最全面试题及参考答案(8万字长文)

Android 中的 OOM(Out Of Memory,内存溢出)异常是指应用程序在运行过程中,由于申请的内存空间超过了系统所能提供的最大内存限制而导致的错误。在 Android 中,内存泄漏是指应用中的某些对象在不再被使用后,仍然被其他对象持有引用,导致这些对象无法被垃圾回收器回收,从而占用内存空间,随着时间的推移可能会导致应用内存不足,甚至崩溃。在一次开发 Android 应用的过程中,我发现应用在长时间运行后会出现内存占用过高的情况,导致应用变得卡顿,甚至可能会被系统强制关闭。

大模型大数据攻城狮的专栏 2532

从源码编译osu-droid:Android Studio构建APK完整教程与常见报错解决

想在手机上体验 osu-droid 的最新玩法,却找不到合适的安装包?其实从源码编译 osu-droid 并不难,只要环境配好,一条命令就能生成 APK。本文是一份面向新手的 osu-droid 编译完整教程,从环境准备、源码拉取、Android Studio 构建到常见报错解决,手把手带你完成从源码到 APK 的全过程,全程无需修改任何代码。 [![osu-droid游戏加载背景图](http

gitblog_01142的博客 710

建立时间与保持时间

建立时间与保持时间的计算 文章目录1、建立时间与保持时间概述及模型2、寄存器之间数据传输时建立时间与保持时间3、寄存器之间数据传输时建立时间余量与保持时间余量计算4、 FPGA允许的最大时钟频率或最小时钟周期5、计算FPGA时钟所允许的最大频率或最小时钟周期6、违反建立和保持时间会发生什么? 1、建立时间与保持时间概述及模型 建立时间(Tsu): 在时钟采样之前,输入必须稳定一段时间,该时间量称为建立时间。 理想最优建立时间: 保持时间(Th): 在时钟沿之后输入到触发器稳定所需的最短时间。 理想最优

Crazzy_M的博客 3万+

BTTV安卓版开发者指南:从源码编译到自定义构建全攻略

BTTV安卓版是一个为Twitch安卓移动应用添加BetterTTV、FrankerFaceZ和7TV表情的修改版本。这个开源项目让开发者可以自定义构建自己的Twitch客户端,添加更多有趣的功能和表情支持。本文将为你提供完整的开发者指南,帮助你从零开始编译和自定义构建BTTV安卓版应用。 ## 🚀 项目架构与工作原理 BTTV安卓版的构建过程基于对官方Twitch应用的修改。整个项目采用模

gitblog_00672的博客 423

【FPGA教程案例87】加解密1——基于FPGA的AES加解密算法verilog实现

DES已走到了它生命的尽头。56比特密钥实在太小,虽然三重DES可以解决密钥长度的问题,但是DES的设计主要针对硬件实现,而今在许多领域,需要用软件方法来实现它,在这种情况下,它的效率相对较低。1997年4月15日美国国家标准和技术研究所(NIST)发起征集AES(Advanced Encryption Standard)算法的活动,并成立了AES工作组。目的是为了确定一个非保密的、公开披露的、全球免费使用的加密算法,用于保护下一世纪政府的敏感信息。这里,我们对AES的基本原理进行介绍:

FPGA/MATLAB学习教程/源码/项目合作开发 2545

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android Automotive 16车载源码下载及编译模拟器成功运行

如果是第一次repo清华大学镜像情况,会出现repo到google地址等情况,建议大家窗口下面文章进行修改相关的repo进行解决。其实无论是手机还是车机都是使用一套的aosp源码进行开发,所以这块repo部分和手机开发时候没有任何差别。aosp版本为android-16.0.0_r2。电脑内存:建议大于32G。

learnframework的博客 1884

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

如何从源码构建Anbox:完整编译Android镜像的实战教程

前往项目官网免费下载:[https://ar.openeuler.org/ar/](https://ar.openeuler.org/ar/?utm_source=csdn_blog) Anbox是一款开源的Android容器解决方案,能让你在Linux系统上运行Android应用程序。本教程将带你一步步从源码构建Anbox并编译Android镜像,即使是新手也能轻松完成! ## 📋 准备工

gitblog_06878的博客 216

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

构建 Android,编译Android 源码

请按照本页中的说明构建 Android。

华南烹鱼宴 1225

VLC for Android源码编译:从零开始的完整构建教程

VLC for Android是一款功能强大的开源多媒体播放器,支持几乎所有视频和音频格式。本文将详细介绍如何从源代码编译VLC for Android,涵盖环境配置、依赖安装、编译步骤以及常见问题解决。无论你是开发者想要定制功能,还是想要学习Android多媒体应用开发,这篇完整指南都将为你提供清晰的路径。 ## 📱 为什么需要源码编译VLC for Android? VLC for An

gitblog_01075的博客 328

Simplenote for Android开发者指南:从源码编译到自定义构建

Simplenote for Android是一款轻量级的开源笔记应用,专为追求简洁高效的开发者和用户设计。本指南将带你从源码编译开始,逐步掌握自定义构建的全过程,让你轻松打造属于自己的个性化笔记应用。 ## 准备工作:环境搭建与依赖安装 在开始编译Simplenote for Android之前,确保你的开发环境满足以下要求: - Android Studio 4.0或更高版本 - JDK

gitblog_00646的博客 461

如何从源码构建Phoenix钱包:Android和iOS双平台编译教程

Phoenix是一款由ACINQ开发的自托管比特币钱包,通过闪电网络实现快速、低成本的比特币收发功能。本教程将详细介绍如何从源码构建适用于Android和iOS平台的Phoenix钱包应用,让你轻松掌握开源钱包的编译方法。 ## 准备工作:编译环境搭建 在开始构建Phoenix钱包前,需要确保你的开发环境满足以下要求: - **Android平台**:需安装[Android Studio](

gitblog_00864的博客 329
上一篇: ububtu下android源码下载详解
下一篇: 导入android 源码到eclipse
javalive09
博客等级 码龄16年 43粉丝 281原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值