从头搭建Android源码编译环境(Ubuntu 18.04 / 20.04 / 22.04)

2023-11-08

在新安装的Ubuntu上(版本20.04LTS),完成搭建Android源码编译环境步骤如下。
顺带说一句,当前用的比较多的Ubuntu是18.04和20.04,在实际项目中一直在用,可用性和稳定性都没问题。
最新的Ubuntu22.04版本,系统默认的二进制库变化比较大,编译Android源码有问题(实测过,没细研究),不如上述2个版本使用起来顺畅。

1. 安装ssh server(可选)

为了方便使用远程终端进行操作和文件传输,通过ssh协议远程使用命令行终端或者winscp等软件进行文件传输。Ubuntu默认没有安装server端软件。
注意:
1)安装后自动运行,无需重启。
2)用当前登录的系统用户就可以通过ssh远程连接。
3)用户必须由密码才可以远程连接。

$ sudo apt install openssh-server

2. 安装net-tools (可选)

安装这个软件包是为了使用ifconfig命令,查看ip等信息。

$ sudo apt install net-tools

3. 安装git

这个都知道是干啥用的

$ sudo apt install git

安装完成后,需要用如下命令进行配置,分别替换为自己的名字和邮箱(不强制真实邮箱)

git config --global user.name YourName
git config --global user.email you@example.com

查看当前git配置:

$ git config -l
user.name=your_name
user.email=your_email
url.ssh://name@url:port/.insteadof=gerrit:
url.ssh://name@url:port/.pushinsteadof=gerrit:
core.repositoryformatversion=0
core.filemode=true
filter.lfs.smudge=git-lfs smudge --skip -- %f
remote.qs.url=gerrit:/platform/sdk
remote.qs.review=gerrit_url
remote.qs.projectname=platform/sdk
remote.qs.fetch=+refs/heads/*:refs/remotes/qs/*

For Ubuntu 22.02 with ssh rsa refer to: Ubuntu 22.04系统git/repo/github/codeup等 无法用ssh方式下载代码问题修复

4. 配置python

Android源码编译中使用默认的python命令,在Ubuntu20.04中安装了python3,需要创建一个连接,让编译脚本可以找到python解释器,否则会报错。
有2种方法(二选一):

1)直接创建一个链接,指向python3

$ sudo ln -s /usr/bin/python3 /usr/bin/python

2)通过update-alternatives工具管理多个版本软件(参考链接)

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 300

3)低版本的Android以来Python 2

需要安装python2.7版本,完成后参照上面的方法设置链接/usr/bin/python,进行后续编译。

$ sudo apt install python2.7
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 500

5. 安装编译所需依赖库

这是Ubuntu18.04及后续版本所需的依赖库,如果是之前更老的Ubuntu版本,依赖库会有差异。

5.1 Google原生Android源码编译依赖库

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

5.2 高通Qualcom源码依赖库

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

5.3 使用docker运行Ubuntu 20.04,需要单独安装的软件

sudo apt install rsync cpio

5.4 Ubuntu 22.04依赖库

需要单独安装openssl库,默认情况下编译时提示如下错误:

kernel/msm-5.4/scripts/extract-cert.c:21:10: fatal error: 'openssl/bio.h' file not found
#include <openssl/bio.h>
         ^~~~~~~~~~~~~~~
1 error generated.

$ wget https://www.openssl.org/source/openssl-3.0.7.tar.gz
$ tar -xf openssl-3.0.7.tar.gz
$ cd openssl-3.0.7

# 把header安装到/usr/include,.so安装到/usr/lib64,如果指定其他路径,需要配置ld.so.conf
$ ./config --prefix=/usr --openssldir=/usr shared zlib
Configuring OpenSSL version 3.0.7 for target linux-x86_64
Using os-specific seed configuration
Created configdata.pm
Running configdata.pm
Created Makefile.in
Created Makefile

**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL.md file first)      ***
***                                                                ***
**********************************************************************

$ make -j16
$ sudo make install

openssl安装完成后,头文件所在目录:/usr/include/openssl,库文件所在目录:/usr/lib64/

6. 下载Android源码

这里先简要说明一下。如果需要,再单独说明一下通过google官方渠道或者国内镜像进行下载的操作步骤。
Android源码比较多,在公司内网下载,需要20分钟左右的时间;如果是公网,主要看网速及稳定性,几个小时、十几个小时不等。

$ mkdir -p ~/source/android
$ cd ~/source/android

# 以下是下载repo和验证过程
$ export REPO=$(mktemp /tmp/repo.1112222333)
$ curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo
$ gpg --recv-key 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65
$ curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} /usr/local/bin/repo

# 初始化repo
$ repo init -u https://android.googlesource.com/platform/manifest

# 更新代码
# 可用-j参数指定线程数,不能超过服务器端的配置上限
$ repo sync  

7. 安装所需开发工具软件

根据开发需要和个人习惯安装一些工具软件,只列出一些通用的,默认系统没有安装的软件:

1)vim-gtk

带UI的vim,在图形界面下使用方便一点,不用专门开一个终端。

$ sudo apt install vim-gtk

2)vs code

主页:https://code.visualstudio.com/
Ubuntu上dep安装包下载连接:https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64
我下载的版本是:code_1.75.0-1675266613_amd64.deb
使用dpkg命令安装:

sudo dpkg -i code_1.75.0-1675266613_amd64.deb

安装后选装需要的extension或者通过登录微软账号自动同步vs code配置。

3)google chrome (或者chromium)

(1) install chrome browser by wget
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb

(2) install chrome browser by ppa
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c ‘echo “deb http://dl.google.com/linux/chrome/deb/ stable main” >> /etc/apt/sources.list.d/google-chrome.list’
sudo apt update
sudo apt install google-chrome

(3) install chromium browser (chromium is open source and can not login google account or sync data)
sudo apt install chromium-browser

4)搜狗输入法,sogou pinyin

(1) download: https://shurufa.sogou.com/linux
(2) Ubuntu安装搜狗输入法

sudo apt-get install fcitx libgsettings-qt1 libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-module-qtquick2
sudo apt -f install

sudo apt purge ibus

设置fcitx开机自启动
在终端执行sudo cp /usr/share/applications/fcitx.desktop /etc/xdg/autostart/

5)android studio, sdk, ndk

(1) android studio
https://developer.android.google.cn/studio/
https://developer.android.google.cn/studio/preview

(2) ndk
https://developer.android.google.cn/ndk/downloads

6)WPS

https://linux.wps.cn/
https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2019/11698/wps-office_11.1.0.11698_amd64.deb
sudo dpkg -i wps-office_11.1.0.11698_amd64.deb

7)WindTerm(或者terminator)

WindTerm download
https://master.dl.sourceforge.net/project/windterm.mirror/2.5.0/WindTerm_2.5.0_Linux_Portable_x86_64.tar.gz?viasf=1

sudo apt install terminator

8)docker

9)Clion

(1) Clion
https://www.jetbrains.com.cn/en-us/clion/download/#section=linux
(2) IntelliJ IDEA Ultimate
https://www.jetbrains.com.cn/idea/download/?section=linux
(3) goland
https://www.jetbrains.com.cn/en-us/go/download/#section=linux
(4) pycharm
https://www.jetbrains.com.cn/en-us/pycharm/download/?section=linux

10)minicom

sudo apt install minicom

minicom安装、配置和使用

dingtalk:
https://page.dingtalk.com/wow/z/dingtalk/simple/ddhomedownload#/

lvm
sudo apt install lvm2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从头搭建Android源码编译环境(Ubuntu 18.04 / 20.04 / 22.04) 的相关文章

  • 为什么在 Eclipse 中对 Egit 管理的项目禁用合并工具?

    根据Egit 用户指南 http wiki eclipse org EGit User Guide Using Merge Tool 要使用合并工具 应右键单击存在合并冲突的资源 然后选择Team gt 合并工具 但是 当我执行此操作时 合
  • 如何使用“gem install”命令从私有 GitHub 存储库安装 gem

    如何在本地安装托管在 GitHub 上的私人存储库中的 gem 特别是 我们通过gem install命令而不是在 Bundler 中使用 因为它是一个命令行工具 我尝试这样做 gem install githubname repo s h
  • Camera.Parameters.FLASH_MODE_ON 在 Moto X 上不起作用

    我正在 moto x 上测试我的应用程序 即使打开闪光灯模式后 闪光灯也无法工作 应用程序在其他设备上运行良好 但在 Moto X 上运行不佳 这是一个代码片段 cameraInstance getCameraInstance camera
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • Android Studio,工具提示消失得这么快

    我有以下问题 我想从这个工具提示中复制错误文本 但是一旦我将鼠标悬停在它上面 它就消失得如此之快 这让我发疯 我有以下 android studio 版本 我有以下设置 谢谢您的帮助 如果有人遇到这个问题 这与logcat刷新的方式有关 每
  • 没有 GUI 的 Android Activity

    我创建了一个仅从链接启动的活动 使用意图过滤器 我不希望此活动有 GUI 我只希望它启动服务并在栏中放置通知 我尝试将链接的意图过滤器放入我的服务中 但这不起作用 有没有更好的方法可以响应意图过滤器 或者我可以让我的活动没有 GUI 吗 抱
  • ViewPagerIndicator:TabPagerIndicator 不可见

    我现在正在为 viewpageinderdicator 苦苦挣扎 当我使用 TitlePageIndicator 时 一切正常 但是当我尝试使用 TabPageIndicator 时我看不到它 它不会出现在层次结构视图中 我尝试了很多东西
  • 如何在本地快速拉取拉取请求

    在合并拉取请求之前 我想在本地快速拉取请求并运行测试并测试一些内容 我还不想点击 gihub 合并拉取请求 我以为滑轮会有帮助http ejohn org blog pulley http ejohn org blog pulley 但我收
  • Android 对 Runtime.getRuntime().exec() 的权限

    我有一个应用程序在清单上具有以下权限 我的应用程序在 Android JB 4 1 2 上运行 UPDATE 我尝试在 JB 上运行该应用程序 但它不起作用 它适用于早期的 API 版本
  • 如何在java中从包含.0的浮点数中删除小数部分

    我只想删除包含的浮点数的小数部分 0 所有其他数字都是可以接受的 例如 I P 1 0 2 2 88 0 3 56666 4 1 45 00 99 560 O P 1 2 2 88 3 567 4 1 45 99 560 有什么方法可以做到
  • 使用 VirtualDocumentRoot 的 SSL 虚拟主机

    我在 ubuntu 16 04 VM 上进行开发工作 当我处理多个项目时 为了让我的生活更轻松 我使用 VirtualDocumentRoot 和主机文件使用 dev 域从我的主文件夹中服务器站点 在 000 default conf 我有
  • 安卓浮动键盘

    是否可以通过编程方式更改键盘的位置 我正在开发一个图腾应用程序 如果键盘停靠在底部 则很难使用 我尝试创建一个扩展 InputMethodService 的自定义键盘 并且我能够更改按键的布局 但我无法更改键盘的视图位置 快捷键 https
  • 如何运行传递给模拟方法的 lambda 函数?

    我想知道是否可以运行作为参数传递给模拟函数的 lambda 函数 并在调用模拟方法时运行它 我正在使用 Mockk 我想象代码是这样的 class DataManager fun submit lambda Int gt Unit val
  • 屏幕方向更改后应用程序崩溃

    我有以下问题 启动后 应用程序工作正常 即使在更改屏幕方向后也是如此 应用程序尚未准备好处理方向更改 例如替代布局等 因此仅显示旋转的默认布局就可以了 但是 当我通过按后退键离开应用程序 更改方向并在再次启动应用程序后立即崩溃 崩溃后 如果
  • python 和 android 中通过 AES 算法加密和解密

    我有用于 AES 加密的 python 和 android 代码 当我在android中加密文本时 它在python上成功解密 但无法在android端解密 有人有想法吗 Python代码 import base64 import hash
  • 当出现错误时如何删除远程分支?

    我尝试过以下命令 但失败了 git push origin next remote error denying ref deletion for refs heads next To blah git remote rejected nex
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • 如何通过哈希显示提交的日期和时间

    I used git reflog识别我创建特定分支时的哈希值 我得到了哈希值fe1ddcdef 我还没有将此分支推送到远程 我现在正在尝试查找日期和时间fe1ddcdef发生 git reflog只告诉我 fe1ddcdef HEAD 1
  • SubscriptionManager 用于读取运行 Android 5.1+ 的双 SIM 设备的 IMSI

    对于 API 22 我尝试使用 SubscriptionManager 读取双 SIM 卡 IMSI IMSI 是 14 到 15 个字符 格式如下 MCC MNC MSIN MCC 移动国家 地区代码 例如 美国为 310 MNC 移动网
  • Android:防止嗅探(例如使用 CharlesProxy)SSL 流量

    我使用 Charles 检查将我的应用程序发送到 HTTPS 的数据 我在手机上安装了 Charles CA 证书 因此我能够解密每个 SSL 流量 但我发现一些应用程序无法看到 SSL 流量 我如何将这种行为实现到我自己的应用程序中 有了

随机推荐

  • KEIL提示“No target connected”的解决方法

    KEIL提示 No target connected 的解决方法 原创 2012 08 06 11 05 05 分类 STM32F0 字号 订阅 在用STM32F051Disconvery学习时 配置GPIOA时 不小心将连接SWD总线上的
  • Python3学习(16)--匿名函数lambda

    我们前面讲高阶函数的时候 已经很多次的提到了lambda 它是一个表达式 也是Python中的匿名函数 我们知道 lambda可以当做函数来使用 返回值就是lambda表达式的结果 lambda也可以当做函数的返回值 比如我们讲到的素数求解
  • 为什么之前CSDN上免费用的chatgpt不见了

    chatgpt刚上线时候 管理风控上是比较松的 基本上通过一些简单的技术手段就能获取大量的账号 并能在限制地区稳定访问使用 甚至单号同时访问也是可以轻松应对 但后面 风控发生了本质上的改变 编辑切换为居中 添加图片注释 不超过 140 字
  • react事件类型

    一 剪贴板事件 Clipboard Events onCopy ClipboardEventHandler
  • 设计模式之——封装、继承、多态

    世界处处不设计 有物混成 先天地生 寂兮寥兮 独立而不改 周行而不殆 可以为天地母 吾不知其名 字之曰道 强为之名曰大 大曰逝 逝曰远 远曰反 道是什么 道可道 非常道 道不明 说不尽的才算是道 它是自然法则的终极抽象 但至少在某一方面 它
  • 同步异步实现代码小结

    客户端同步服务端异步 Future
  • Gitlab API调用生成个人访问令牌并操作API(Java实现)

    Gitlab API调用生成个人访问令牌并操作API Java实现 在使用Gitlab进行项目管理和版本控制时 我们经常需要使用到Gitlab API来实现一些自动化的操作 例如创建项目 添加成员 提交代码等 为了安全起见 Gitlab提供
  • 【从0到1完成一个项目(一)】用户中心(上)

    用户中心 上 写在前面 作为后端程序员 前端不用学很深 只要在前后端分离的项目中 了解前后端是如何进行数据交互的就行 Ajax发请求 后端request接收参数 使用框架接收参数会更简单 然后返回给前端JSON 之前在前后端不分离的项目中
  • cmake 区分微软和mingw编译器

    可以通过检查 CMAKE CXX COMPILER ID 变量的值来区分使用的编译器类型 if CMAKE CXX COMPILER ID STREQUAL MSVC 使用微软编译器 else 使用 Mingw 编译器 endif 具体来说
  • Java和Android笔试题

    3 笔试题之Java基础部分 基础部分的顺序 基本语法 类相关的语法 内部类的语法 继承相关的语法 异常的语法 线程的语法 集合的语法 io 的语法 虚拟机方面的语法 其他 有些题来自网上搜集整理 有些题来自传智播客学员面试后的反馈 说真的
  • gdb

    gdb可用以调试正在运行的进程 只需要知道进程的进程号 gdb调试进程流程 1 gdb p PID指定调试的进程ID号 或者先进入gdb再指定 gdb attach PID 2 bt查看当前进程执行的调用栈 3 info threads查看
  • 网页书签

    h1 Bookmarks h1 dl p p dt h3 h3 dt dl
  • 【数学建模笔记 29】数学建模的多元分析

    29 多元分析 定义 多元分析是多变量的统计分析方法 是数理统计中应用广泛的一个重要分支 判别分析 判别分析是一种分类方法 假定有 r r r 类判别对象 A 1
  • matlab里面sin函数是角度,matlab中的sin(函数)

    笔记 matlab中的sin 函数 sin Sine of an argument in radians Syntax Y sin X Description The sin function operates element wise o
  • 内存管理技术——离散分配方式

    上一篇讲到 采用固定分区的方式 会产生页内碎片等缺点 因此引入了动态分区方式 但动态分区又产生了外部碎片 导致内存的利用率也不理想 为了进一步提高内存的利用率 所以就产生了离散的分配方式 理论来源于实际问题 这很好的体现在计算机科学中 离散
  • Gateway中判断是否满足过滤条件的代码片段

    SpringBootTest class MybaisplusApplicationTests private String startWith base login base logout base sendVerificationCod
  • Digital Pre-Distortion (数字预失真)以及用途

    Digital Pre Distortion 数字预失真 以及用途 2014 04 04 10 09 29 分类 FPGA 标签 fpga 数字预失真 通信基础 wcdma 功率放大器 举报 字号 订阅 http blog 163 com
  • 主机浏览器访问 VMware中Centos7 中运行的nginx

    VMware中Centos7 中nginx启动之后 通过curl http localhot 能够正常访问 虚拟机外部浏览器访问 确访问不到 原因是端口没设置 执行firewall cmd zone public add port 80 t
  • 大小写转换 蓝桥杯

    问题描述 编写一个程序 输入一个字符串 长度不超过20 然后把这个字符串内的每一个字符进行大小写变换 即将大写字母变成小写 小写字母变成大写 然后把这个新的字符串输出 输入格式 输入一个字符串 而且这个字符串当中只包含英文字母 不包含其他类
  • 从头搭建Android源码编译环境(Ubuntu 18.04 / 20.04 / 22.04)

    在新安装的Ubuntu上 版本20 04LTS 完成搭建Android源码编译环境步骤如下 顺带说一句 当前用的比较多的Ubuntu是18 04和20 04 在实际项目中一直在用 可用性和稳定性都没问题 最新的Ubuntu22 04版本 系