AndroidFrameWork-Ubunut22.04编码Aosp12

现在app开发的前途已经是被堵死了,很多开发者都想转framework开发,但是又不知道从那里开始入手。
所以我经过自己的不断实验和学习,给他家一篇一篇的文章来写和分享framework的学习。
我们想要学习和开发framework需要先准备环境,一台内存在16G以上,硬盘在1T以上,并且cpu最好是i5 12代以上。最重要的是电脑系统必须是ubuntu,不然无法进行学习和编译的。
多余的话就不说了,给大家看怎么实际操作和编译吧

    /**我们在下载源码之前需要先查看和修改一下Swap分区*/
    sudo swapon --show
    /**如果没有任何结果或者没有任何显示,说明系统当前没有可用的交换空间。也可以使用free工具来验证当前确实没有可用的交换分区。*/
    free -h
    输出结果:
              total        used        free      shared  buff/cache   available
Mem:           488M         36M        104M        652K        348M        426M
Swap:            0B          0B          0B
/** 可以看到这里的”swap”行均为0,也就是说系统上没有交换处于活动状态。我们就需要给swap添加交换内存*/
df -h
输出结果:

Filesystem      Size  Used Avail Use% Mounted on
udev            238M     0  238M   0% /dev
tmpfs            49M  624K   49M   2% /run
/dev/vda1        20G  1.1G   18G   6% /
tmpfs           245M     0  245M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           245M     0  245M   0% /sys/fs/cgroup
tmpfs            49M     0   49M   0% /run/user/1001

/**在这种情况下,/dev下的设备是我们的磁盘。在这个例子中我们有足够的空间(只使用了1.1G),当然,您的使用情况可能会有所不同。*/
/**现在我们知道了可用的硬盘空间,那我们就可以在文件系统中创建一个交换文件,我们将在我们的根(/)目录下创建一个名为swapfile的文件。创建交换文件最好的方法是使用fallocate命令,这个命令能立即创建一个预分配大小的文件。由于本示例中的服务器RAM的大小为512MB,因此我们将在本教程中创建一个20 GB大小的文件,并适当加以调整,以满足您自己的服务器的需求*/

sudo fallocate -l 20G /swapfile
/**创建完成之后,我们可以通过这个命令来验证是否保留了正确的交换空间:*/

ls -lh /swapfile
显示结果:
-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
/**可以看到,只有root用户启用了读写标志。*/

/**接下来,我们可以通过以下命令将文件标记为交换空间*/
sudo mkswap /swapfile
显示结果:

Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
/**标记文件之后,我们可以启用该交换文件,让我们的系统开始使用它:*/
sudo swapon /swapfile
/**可以通过以下命令验证交换空间是否可用:*/
sudo swapon --show
显示结果:
NAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -1
/**这时,我们可以通过free再次查看我们的设置:*/
free -h
               total        used        free      shared  buff/cache   available
内存:       31Gi       2.3Gi        26Gi        71Mi       2.3Gi        28Gi
交换:       19Gi          0B        19Gi
/**可以看到swap分区已成功创建,大小为19 G,操作系统将在必要时使用。*/
//交换文件
//最近的更改启用了当前会话的swap文件,但是,如果我们重新启动,服务器不会自动保留swap设置,我们可以通过//wap文件添加到/etc/fstab文件中来改变这一点。
///etc/fstab文件以防出错:
sudo cp /etc/fstab /etc/fstab.bak
//wap文件信息添加到/etc/fstab文件的末尾:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
这样就保留了swap文件。
//你的交换设置
//理交换时,可以配置几个选项,这些选项会影响系统的性能
//当前的swappiness值:
cat /proc/sys/vm/swappiness
结果显示
60 
//我们可以使用sysctl命令将swappiness设置为不同的值,例如,要将swappiness设置为10:
sudo sysctl vm.swappiness=10
显示结果:
vm.swappiness = 10
//准备工作做完以后,我们需要开始进行下载aosp源码了

1、安装git 并配置好git
sudo apt-get install git
 
git config --global user.name "your name"
git config --global user.email "XXX@XXX.com"
2、下载repo并配置,创建一个目录,下载的repo和aosp源代码全部都在这里面
mkdir aosp
cd aosp
 
git clone https://aosp.tuna.tsinghua.edu.cn/git-repo/
chmod a+x git-repo/repo
 
添加repo 到环境变量
export PATH=~/aosp/git-repo:$PATH
 
3、初始化选择需要下载的Android版本
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
不知道选择哪一个版本的进入到.repo/manifests.git/ 查看有哪些分支,在做选择。

cd .repo/manifests.git/
git branch -a


我们直接选择一个最新的初始化, 

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-12.1.0_r8
repo sync -j4
下面就慢慢等吧。。等的过程我们在检查检查其他需要的东西。。
4、 安装open-jdk
sudo apt-get install openjdk-8-jdk
5、安装依赖
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(ubutun20也找不到,会被安装6,下面有解决办法)
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
        特别注意:如遇到 libesd0-dev 找不到,执行下面的

sudo vi /etc/apt/sources.list  //在行尾添加下面这个源保存
deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
#安装libesd0-dev
sudo apt-get update && sudo apt-get install libesd0-dev
        方法一:关于编译时报 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,所以干脆如下暴力处理

cd /usr/lib/x86_64-linux-gnu 
sudo cp libncurses.so.6 libncurses.so.5
sudo cp libtinfo.so.6 libtinfo.so.5
        方法二:这是从另外一篇文章看到的,可行

deb-src http://us.archive.ubuntu.com/ubuntu/ xenial main universe
 sudo apt install apt-file
sudo apt-file update
sudo apt-file find libncurses.so.5  #没有 这个文件在执行下面的。
sudo apt install libncurses5
6.1下载完毕后,就来编译Android 12吧。。cd到aosp目录,执行预编译脚本
. build/envsetup.sh
6.2 因为我确定我只使用x86的模拟器所以我直接使用!请使用下面指令,确认你需要使用的编译的版本,第一次执行lunch可能会等很久。
 
lunch    #一定要执行查看自己需要的版本。每次拉取的项目不同数字代表的版本就不一样。这次我机子差不多等了3分钟。Android10的时候 1分钟左右
 
 . build/envsetup.sh
lunch aosp_car_x86-userdebug  # Android 我是模拟器版本
You're building on Linux
Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_barbet-userdebug
     4. aosp_blueline-userdebug
     5. aosp_blueline_car-userdebug
     6. aosp_bonito-userdebug
     7. aosp_bonito_car-userdebug
     8. aosp_bramble-userdebug
     9. aosp_bramble_car-userdebug
     10. aosp_car_arm-userdebug
     11. aosp_car_arm64-userdebug
     12. aosp_car_x86-userdebug
     13. aosp_car_x86_64-userdebug
     14. aosp_cf_arm64_auto-userdebug
     15. aosp_cf_arm64_phone-userdebug
     16. aosp_cf_x86_64_foldable-userdebug
     17. aosp_cf_x86_64_pc-userdebug
     18. aosp_cf_x86_64_phone-userdebug
     19. aosp_cf_x86_64_tv-userdebug
     20. aosp_cf_x86_auto-userdebug
     21. aosp_cf_x86_phone-userdebug
     22. aosp_cf_x86_tv-userdebug
     23. aosp_coral-userdebug
     24. aosp_coral_car-userdebug
     25. aosp_crosshatch-userdebug
     26. aosp_crosshatch_car-userdebug
     27. aosp_crosshatch_vf-userdebug
     28. aosp_flame-userdebug
     29. aosp_flame_car-userdebug
     30. aosp_oriole-userdebug
     31. aosp_oriole_car-userdebug
     32. aosp_raven-userdebug
     33. aosp_raven_car-userdebug
     34. aosp_redfin-userdebug
     35. aosp_redfin_car-userdebug
     36. aosp_redfin_vf-userdebug
     37. aosp_sargo-userdebug
     38. aosp_sargo_car-userdebug
     39. aosp_slider-userdebug
     40. aosp_sunfish-userdebug
     41. aosp_sunfish_car-userdebug
     42. aosp_trout_arm64-userdebug
     43. aosp_trout_x86-userdebug
     44. aosp_whitefin-userdebug
     45. aosp_x86-eng
     46. aosp_x86_64-eng
     47. arm_krait-eng
     48. arm_v7_v8-eng
     49. armv8-eng
     50. armv8_cortex_a55-eng
     51. armv8_kryo385-eng
     52. beagle_x15-userdebug
     53. beagle_x15_auto-userdebug
     54. car_ui_portrait-userdebug
     55. car_x86_64-userdebug
     56. db845c-userdebug
     57. fuchsia_arm64-eng
     58. fuchsia_x86_64-eng
     59. gsi_car_arm64-userdebug
     60. gsi_car_x86_64-userdebug
     61. hikey-userdebug
     62. hikey64_only-userdebug
     63. hikey960-userdebug
     64. hikey960_tv-userdebug
     65. hikey_tv-userdebug
     66. pixel3_mainline-userdebug
     67. poplar-eng
     68. poplar-user
     69. poplar-userdebug
     70. qemu_trusty_arm64-userdebug
     71. sdk_car_arm-userdebug
     72. sdk_car_arm64-userdebug
     73. sdk_car_portrait_x86_64-userdebug
     74. sdk_car_x86-userdebug
     75. sdk_car_x86_64-userdebug
     76. silvermont-eng
     77. uml-userdebug
     78. yukawa-userdebug
     79. yukawa_sei510-userdebug

arm64表示是使用arm64 cpu的设备,eng表示engineer版本,其直接开放了一些root等权限。当然直接使用lunch命令会列出所有可选的编译目标

6.3开始编译,-j参数取决你的cpu数量就行,我是双核双线程,应该是-j4 的,但是考虑到我要做其他的事情,我就使用make -j3
make -j3
         PS:中途肯定会报其他的错,自己百度解决吧。如果使用的我说的ubuntu版本的话,内存够的话,基本不会怎么报错。。这aosp  编译效果越来越好了还能实时看到编译的项目。(推荐16G哟。)如果因为内存问题编译不过。-j设置小点儿


期间编译出错了45次都是因为内存溢出了,不过没关系调整make -j1 继续编译几次就行了。

报错就编译这个
sudo apt install libncurses5
编译工作结束后,运行模拟器
 . build/envsetup.sh
lunch aosp_car_x86-userdebug 
emulator
然后就可以运行成功我们的模拟器

1439b9d5f903ff61580b642e73d137b1.png
这里就编译出了我们的车机模拟器了
那我们的源码也算是编译完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值