<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ubuntu20.04 on lategege 的技术博客</title><link>https://lategege.com/tags/ubuntu20.04/</link><description>Recent content in Ubuntu20.04 on lategege 的技术博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sun, 03 Oct 2021 03:31:44 +0000</lastBuildDate><atom:link href="https://lategege.com/tags/ubuntu20.04/index.xml" rel="self" type="application/rss+xml"/><item><title>ubuntu20.04编译android 11(R)</title><link>https://lategege.com/p/ubuntu20-04%E7%BC%96%E8%AF%91android-11-r/</link><pubDate>Sun, 03 Oct 2021 03:31:44 +0000</pubDate><guid>https://lategege.com/p/ubuntu20-04%E7%BC%96%E8%AF%91android-11-r/</guid><description>&lt;!-- wp:paragraph --&gt;
&lt;p&gt;因为我有一台12核24线程 64g内存的1.5T固态+1T机械的服务器，服务器安装了PVE虚拟机，昨天刚把PVE从6.4升级为7.0，然后就想着要编译android 11的源码，编译源码当然选择最新的长期支持版ubuntu，也就是目前的ubuntu20.04，于是官网下载了镜像文件，下载地址：&lt;a href="https://ubuntu.com/download/desktop"&gt;https://ubuntu.com/download/desktop&lt;/a&gt;，装桌面版是因为可以应对后面在图形化界面中很方便解决的问题。&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;
&lt;!-- wp:paragraph --&gt;
&lt;p&gt;我给虚拟机分配了10个核心，16g内存，300g硬盘(固态)，安装过程略。因为我的家庭网络采用了双软路由方案（爱快+LEDE)，所以，你懂得，我不需要设置什么软件源，因为我畅通无阻，但是android 11 源码将近90g，走国外的话，这流量费用。。。所以下源码的时候我还是决定使用国内镜像下载。其他比如软件更新什么的那点流量就忽略不计了。&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;
&lt;!-- wp:paragraph --&gt;
&lt;p&gt;PVE中装完ubuntu20.04，第一件事：&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;
&lt;!-- wp:code --&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;#不管三七二十一，所有软件更新到最新再说
sudo apt-get update &amp;amp;&amp;amp; upgrade
#安装vim 方便后面在终端编辑
sudo apt-get install vim
#安装ssh server 安装完后可以在本地电脑上ssh连接操作了
sudo apt-get install openssh-server
# 编辑ssh_config 将这个注释去掉 PasswordAuthentication yes 保存
vim /etc/ssh/ssh_config
#重启下ssh
sudo /etc/init.d/ssh restart&lt;/code&gt;&lt;/pre&gt;
&lt;!-- /wp:code --&gt;
&lt;!-- wp:paragraph --&gt;
&lt;p&gt;接着，在本地电脑的终端上&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;
&lt;!-- wp:code --&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;#ssh登录ubuntu
ssh 用户名@ip
&lt;/code&gt;&lt;/pre&gt;
&lt;!-- /wp:code --&gt;
&lt;!-- wp:paragraph --&gt;
&lt;p&gt;安装编译android所有需要的依赖(以下的操作建议先安装screen，然后在screen中操作，因为这样可以保证退出终端后任务还继续执行，下次进来想要展示之前的命令窗口也非常方便，具体的screen用法参考我的 另一篇文章&lt;a href="https://lategege.com/p/mac终端下使用screen/" rel="noreferrer noopener" target="_blank"&gt;https://www.lategege.com/?p=254&lt;/a&gt; mac、linux下操作一摸一样)&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;
&lt;!-- wp:code --&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;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 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
sudo apt-get install libssl-dev
&lt;/code&gt;&lt;/pre&gt;
&lt;!-- /wp:code --&gt;
&lt;!-- wp:paragraph --&gt;
&lt;p&gt;这里要注意有坑，第一个坑是libesd0-dev 这个软件包 在ubuntu默认源中是没有的，所以要添加源然后更新下软件列表再安装&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;
&lt;!-- wp:code --&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;sudo vim /etc/apt/sources.list //在行尾添加下面这个源保存
deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
&lt;p&gt;#安装libesd0-dev
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install libesd0-dev&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;!-- /wp:code --&gt;
&lt;!-- wp:paragraph --&gt;
&lt;p&gt;第二个坑是关于lib32ncurses5-dev的，这个包安装不上。在安装的时候发现要安装libncurses5-dev，但是我软件包都更新为最新版本的了，也就是libncurses5-dev 最新版本是6.2的，我查看了下/usr/lib/x86_64-linux-gnu  这个目录下的动态库，发现只有libncurses.so.6，这就是因为libncurses5-dev这个包太新了，已经更新到6.2了，所以没有libncurses.so.5，因为后面编译需要有libncurses.so.5，不然编译会报错，我想了下有两种方案:一种libncurses5-dev回退到5.9，但是其他也有可能有依赖，又因为libncurses.so.6依赖了libtinfo.so.6，所以干脆如下暴力处理(后面的编译报错问题解决)：&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;
&lt;!-- wp:code --&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;cd /usr/lib/x86_64-linux-gnu
sudo cp libncurses.so.6 libncurses.so.5
sudo cp libtinfo.so.6 libtinfo.so.5&lt;/code&gt;&lt;/pre&gt;
&lt;!-- /wp:code --&gt;
&lt;!-- wp:code --&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;#装完软件需要设置下git的用户名密码,可以随意，但是这步是必须的，因为拉android源码的时候会验证git是否设置的email和name 不设置就不让拉取，http.sslverify https.sslverify 也配置下，后面拉取https仓库有时候报验证证书失败，配了这两个后就不会报错了。
git config --global user.email "xxx@xxx.com"
git config --global user.name "xxx"
git config --global http.sslverify false
git config --global https.sslverify false&lt;/code&gt;&lt;/pre&gt;
&lt;!-- /wp:code --&gt;
&lt;!-- wp:paragraph --&gt;
&lt;p&gt;接着就是拉取源码了，谷歌建议在home目录建一个bin文件夹，源码下载到这里，当然这只是建议，这边就按照谷歌的建议来操作。&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;
&lt;!-- wp:code --&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;#在当前用户家目录创建bin文件夹
mkdir ~/bin
#将该目录写入环境变量
echo "PATH=~/bin:\$PATH" &amp;gt;&amp;gt; ~/.bash_profile
#刷新环境变量
source ~/.bash_profile&lt;/code&gt;&lt;/pre&gt;
&lt;!-- /wp:code --&gt;
&lt;!-- wp:paragraph --&gt;
&lt;p&gt;补充知识：环境变量分为/etc目录下全局的和每个用户下面独立的，每个用户独立的又有两处可以放，.bashrc 或者.bash_profile 因为.bashrc本身有很多代码，所以建议建立独立的.bash_profile文件存放环境变量。&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;
&lt;!-- wp:code --&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;#拉取谷歌的代码管理脚本repo
curl https://storage.googleapis.com/git-repo-downloads/repo &amp;gt; ~/bin/repo
#不能科学上网的 从清华镜像获取 两个都是一样的 curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
#授权执行权限,repo本质就是一个python2的脚本
chmod a+x ~/bin/repo&lt;/code&gt;&lt;/pre&gt;
&lt;!-- /wp:code --&gt;
&lt;!-- wp:code --&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;#初始化repo 就是设置url为镜像地址 android-11版本在不断更新，可以去https://source.android.google.cn/setup/start/build-numbers#source-code-tags-and-builds这个官网地址查看最新版本是多少，针对的设备是哪些，再决定拉取哪个代码。
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-11.0.0_r43
&lt;h2 id="如果提示无法连接到-gerritgooglesourcecom可以编辑-binrepo把-repo_url-一行替换成下面的"&gt;如果提示无法连接到 gerrit.googlesource.com，可以编辑 ~/bin/repo，把 REPO_URL 一行替换成下面的：
&lt;/h2&gt;&lt;h2 id="repo_url--"&gt;REPO_URL = &amp;lsquo;&lt;a class="link" href="https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/%27" target="_blank" rel="noopener"
 &gt;https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;#由于清华大学镜像对并发是有限制的，这里就看自己测试下来能最大几个就填-jX
repo sync -j4 &amp;ndash;fail-fast &amp;ndash;force-sync&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;!-- /wp:code --&gt;
&lt;!-- wp:code --&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;#拉完代码就是编译过程 固定的三个命令 按顺序执行 lunch 根据自己需要选择不通平台
. build/envsetup.sh
lunch aosp_x86-eng
make -j16&lt;/code&gt;&lt;/pre&gt;
&lt;!-- /wp:code --&gt;
&lt;!-- wp:paragraph --&gt;
&lt;p&gt;在我编译过程中还遇到一个坑 如下：&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;
&lt;!-- wp:code --&gt;
&lt;pre class="wp-block-code"&gt;&lt;code&gt;merge_zips.go:752: prebuilts/gradle-plugin/com/android/tools/lint/lint-api/26.5.0/lint-api-26.5.0.jar: zip: not a valid zip file
12:05:58 ninja failed with: exit status 1&lt;/code&gt;&lt;/pre&gt;
&lt;!-- /wp:code --&gt;
&lt;!-- wp:paragraph --&gt;
&lt;p&gt;我查找prebuilts/gradle-plugin下面的文件，发现文件都是0kb，也就是这个文件夹中的文件根本没有同步下来，所以我直接删掉gradle-plugin这个文件夹，然后再一次执行repo sync，它会将gradle-plugin重新下载，接着编译就没问题了。&lt;/p&gt;
&lt;!-- /wp:paragraph --&gt;</description></item></channel></rss>