记一次编译Android源码

简介: 记一次编译Android源码

前言:已经是第二次编译Android源码了,由于距离第一次编译Android源码的时间较长,所以有一些编译源码的命令以及编译的时候遇到问题的解决方法都忘记了,需要重新查找相关资料,这样就显得有些事倍功半了,故写下这篇文章记录编译Android源码的方式以及编译的时候遇到的问题。

编译前的准备

  工欲善其事,必先利其器。在编译源码前需要进行一些相关环境的配置,有以下几点需要准备

  • 电脑需要安装Linux系统(不推荐虚拟机)
  • 配置Java环境
  • 已经安装过Git
  • 安装编译源码需要的依赖

我编译源码的时候用的是Ubuntu16.04的系统,关于Ubuntu16.04的安装以及Java环境的配置大家可以自己搜索,这里就介绍一下编译源码时需要的依赖的安装方法,可以通过以下命令进行安装

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
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

同步源代码

  这里推荐清华大学开源软件镜像站进行源码的同步,下载速度真的很快,清华大学开源软件镜像站提供了两种同步源码的方式,我采用的是第一种,好像这种同步下来的源码都是最新的Android源码,第一种同步源码的方式如下

下载安装repo工具

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
## 如果上述 URL 不可访问,可以用下面的:
## curl https://storage-googleapis.proxy.ustclug.org/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

同步源代码

wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd aosp   # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码

注:这里在执行repo sync的时候可能会出现下面的错误

error: .repo/manifests/: contains uncommitted changes

这时我们在搜索引擎搜索这个错误,出来的答案大都如下

先 cd .repo/manifests

再执行 Git stash 和 git clean -f -d

然后再repo sync 就可以通过了

但是,这答案对我并没用,历经千辛万苦最后终于找到了解决这个错误的办法,执行以下命令

git config core.filemode false
# 加入忽略文件权限的配置

然后在执行 repo sync便能同步成功。可能在同步的过程中会遇到下面的错误

error:Exited sync due to fetch errors
解决办法就是再执行一次repo sync或 repo sync -f 命令。

编译源码

  进入解压后的aosp文件夹,执行下面的命令

source build/envsetup.sh

下面是执行命令后的结果

可以看出这个命令是将一些脚本文件包含进来,接着执行一下命令

lunch

执行后的结果如下

这时我们只要输入相应的序号,就可以指定编译目标的格式了,如此时输入序号‘1’,则编译的目标格式为aosp_arm-eng,所谓的编译目标就是生成的镜像要运行在什么样的设备上。下面介绍一下编译目标格式,编译的目标格式都是BUILD-BUILDTYPE形式,BUILD就是

BUILD指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境.其中,aosp(Android Open Source Project)代表Android开源项目;arm表示系统是运行在arm架构的处理器上,arm64则是指64位arm架构;处理器,x86则表示x86架构的处理器;

BUILDTYPE就是

BUILD TYPE则指的是编译类型,通常有三种: -user:代表这是编译出的系统镜像是可以用来正式发布到市场的版本,其权限是被限制的(如,没有root权限,不鞥年dedug等) -userdebug:在user版本的基础上开放了root权限和debug权限. -eng:代表engineer,也就是所谓的开发工程师的版本,拥有最大的权限(root等),此外还附带了许多debug工具

了解了编译目标格式,我们根据自己的需要输入相应的序号即可。如果你是准备编译源码后在电脑上运行,那么推荐选择序号“5”进行编译,因为这样在运行时速度会快很多。

开始编译

  输入下面的命令则编译开始

make -j8

注:这里的 -j8代表的时启用编译的线程数,参与编译的线程并不是越多越好,通常是根据你机器cup的核心来确定:core*2,即当前cpu的核心的2倍.比如,我现在的笔记本是双核四线程的,因此根据公式,最快速的编译可以make -j8(通过cat /proc/cpuinfo查看相关cpu信息)

如果编译的过程中没有出现什么错误,那么在几个小时后你应该会看见下面的输出

make completed successfully

那么恭喜你完成了Android的源码编译。

运行模拟器

  如果你是在编译完后立刻运行模拟器,可以通过以下命令来运行模

emulator

否则,通过以下命令来运行

source build/envsetup.sh
lunch
(选择刚才你设置的目标版本,比如这里了我选择的是5)
emulator

下面看下,我此次编译后运行的模拟器

结束语

  编译源码的时候还是有一些坑的,本文的目的就是让大家在编译源码时少入坑,节省时间做更有意义的事情。至此,已经成功编译了Android源码,有了Android的源码,你就可以更深入的研究Android了。



相关文章
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
1591 1
|
XML 搜索推荐 Android开发
Android改变进度条控件progressbar的样式(根据源码修改)
本文介绍了如何基于Android源码自定义ProgressBar样式。首先分析了系统源码中ProgressBar样式的定义,发现其依赖一张旋转图片实现动画效果。接着分两步指导开发者实现自定义:1) 模仿源码创建一个旋转动画XML文件(放置在drawable文件夹),修改图片为自定义样式;2) 在UI控件中通过`indeterminateDrawable`属性应用该动画。最终实现简单且个性化的ProgressBar效果,附带效果图展示。
762 2
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码android版环境配置流程及功能明细
部署需基于 CentOS 7.9 系统,硬盘不低于 40G,使用宝塔面板安装环境,包括 PHP 7.3(含 Redis、Fileinfo 扩展)、Nginx、MySQL 5.6、Redis 和最新 Composer。Swoole 扩展需按步骤配置。2021.08.05 后部署需将站点目录设为 public 并用 ThinkPHP 伪静态。开发环境建议 Windows 操作系统与最新 Android Studio,基础配置涉及 APP 名称修改、接口域名更换、包名调整及第三方登录分享(如 QQ、微信)的配置,同时需完成阿里云与腾讯云相关设置。
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
1048 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
3819 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
1840 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
API 开发工具 Android开发
Android Studio:解决AOSP自编译framework.jar引用不到的问题
在Android Studio中解决AOSP自编译framework.jar引用问题的几种方法,包括使用相对路径、绝对路径和通过`${project.rootDir}`动态获取路径的方法,以避免硬编码路径带来的配置问题。
2122 0
Android Studio:解决AOSP自编译framework.jar引用不到的问题
|
开发工具 Android开发 git
全志H713 Android 11 :给AOSP源码,新增一个Product
本文介绍了在全志H713 Android 11平台上新增名为myboard的产品的步骤,包括创建新的device目录、编辑配置文件、新增内核配置、记录差异列表以及编译kernel和Android系统的详细过程。
1740 0

热门文章

最新文章