本文主要是介绍AOSP开发环境搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、安装虚拟机
二、安装Ubuntu
三、安装VMware tools
3.1、通用安装
3.2、Ubuntu22.04 中Drag and drop is not supported问题
四、安装依赖环境
4.1、安装git
4.2、下载Python3
4.3、解压Python3
4.4、编译与安装Python3
3.sudo make install
4.5、安装Python2
4.5.1、启用Universe仓库
4.5.2、安装python2.7
4.5.3、切换默认python版本
4.6、管理Python版本
4.7、安装依赖库
五、AOS源码下载
5.1、在用户的根目录创建 bin
5.2、bin配置环境变量
5.3、下载repo
5.5、同步代码
5.6、在Ubuntu22.04中下载源码
六、代码编译
6.1、配置编译环境
6.2、选择编写版本
6.3、编译
6.4、启动模拟器
七、Android Studio安装与配置
7.1.2、安装jkd17
7.1.2.1、更新Ubuntu软件资源库
7.1.2.2、查找apt中的jdk版本
7.1.3.3、查看安装路径
7.1.3.4、设置环境变量
八、Android Studio源码导入与调试
8.3、Android Studio配置
8.3.1、 配置资源文件和依赖文件
8.3.2、 编译单个模块使用
8.3.3、 AndroidStudio的最大使用内存
8.3.4、 AndroidStudio右下角显示内存占用
8.4、调试
九、VScode源码导入framework的C/C++代码
9.1、去官网下载VSCode,
9.2、安装下载deb文件,命令如下:
9.3、安装成功后在桌面启动VSCode
9.4、输入c/c++安装排名靠前的三个插件既可以
9.5、效果
十、MobaXtem远程登录ubuntu系统(或虚拟机)
十一、在Ubuntu中使用samba服务共享文件给window
文章目录
前言
一、安装虚拟机
二、安装Ubuntu
三、安装VMware tools
3.1、通用安装
3.2、Ubuntu22.04 中Drag and drop is not supported问题
四、安装依赖环境
4.1、安装git
4.2、下载Python3
4.3、解压Python3
4.4、编译与安装Python3
4.5、安装Python2
4.5.1、启用Universe仓库
4.5.2、安装python2.7
4.5.3、切换默认python版本
4.6、管理Python版本
4.7、安装依赖库
五、AOS源码下载
5.1、在用户的根目录创建 bin
5.2、bin配置环境变量
5.3、下载repo
5.4、创建仓库目录存放代码
5.5、同步代码
5.6、在Ubuntu22.04中下载源码
六、代码编译
6.1、配置编译环境
6.2、选择编写版本
6.3、编译
问题一、编译内存不足
(1)停用交换文件
(2)删除文件
(3)创建交换区文件
(4)挂载交换文件
(5)激活启用交换文件
(6)设置内存使用多少时使用交换区
问题二、交换时宕机
问题三、无法安装libesd0-dev
6.4、启动模拟器
6.5、车机模拟器
七、Android Studio安装与配置
7.1、安装JDK
7.1.1、默认安装
7.1.2、安装jkd17
7.1.2.1、更新Ubuntu软件资源库
7.1.2.2、查找apt中的jdk版本
7.1.2.3、安装open jre
7.1.2.4、安装openjdk
7.1.2.5、检查安装jdk是否成功
7.1.2.6、删除open jdk ( 一般不需要删除 )
7.1.2.7、查看openJDK被安装到什么地方,这个在配置环境变量时会用到
7.1.2.8、设置环境变量
7.1.3、手动安装
7.1.3.1、下载JDK安装包
7.1.3.2、将下载的安装包解压到目标目录下
7.1.3.3、查看安装路径
7.1.3.4、设置环境变量
7.1.3.5、让配置立即生效
7.1.3.6、检查安装是否成功
7.2、安装Android Studio
7.2.1、下载Android Studio
7.2.2、运行android studio
7.3、配置Android Studio的桌面快捷方式
7.3.1、第一种通过菜单创建
7.3.2第二种手动创建
八、Android Studio源码导入与调试
8.1、生成iml与ipr
8.2、配置android.iml
8.3、Android Studio配置
8.3.1、 配置资源文件和依赖文件
8.3.2、 编译单个模块使用
8.3.3、 AndroidStudio的最大使用内存
8.3.4、 AndroidStudio右下角显示内存占用
8.4、调试
九、VScode源码导入framework的C/C++代码
9.1、去官网下载VSCode,
9.2、安装下载deb文件,命令如下:
9.3、安装成功后在桌面启动VSCode
9.4、输入c/c++安装排名靠前的三个插件既可以
9.5、效果
十、MobaXtem远程登录ubuntu系统(或虚拟机)
10.1、在Linux上安装并开启SSH
10.1.1、Linux终端输入如下命令行,安装openssh-server
10.1.2、Linux终端输入如下命令行,开启ssh服务
10.1.3、安装net-tools
10.1.4、Linux终端输入如下命令行,查看本机器IP
10.1.5、修改配置文件允许远程登录
10.1.6、在文件中找到 PermitRootLogin所在的行
10.1.7、停止ssh并重启ssh
10.2、下载并配置Mobaxterm
10.2.1、下载Mobaxterm
10.2.2、选择SSH,输入上述Linux的ip,点击OK。
10.2.3、远程登录
10.2.4、文件移动到ubuntu中
十一、在Ubuntu中使用samba服务共享文件给window
11.1、安装Samba服务
11.2、配置samba
创建文件夹
更改配置文件 /etc/samba/smb.conf
添加以下内容
保存退出,重启samba服务
添加windows网络连接
前言
一、安装虚拟机
下载地址:
https://download3.vmware.com/software/wkst/file/VMware-workstation-full-16.1.1-17801498.exe
注意如果上面的链接打开不开,看看是不是自己的浏览器的设置是不是有问题
去掉对钩
自定义一个路径,最好没有空格。
去掉这个两个对钩。
输入密钥
秘钥大家可以自己找一下。
双击桌面图标,打开虚拟机,查看帮助菜单下面的关于VMware Workstation 16 Pro
二、安装Ubuntu
镜像地址:
https://mirrors.aliyun.com/ubuntu-releases/16.04/ubuntu-16.04.7-desktop-amd64.iso
https://mirrors.aliyun.com/ubuntu-releases/20.04.5/ubuntu-20.04.5-desktop-amd64.iso
https://mirrors.aliyun.com/ubuntu-releases/22.04.2/ubuntu-22.04.2-desktop-amd64.iso
强烈建议安装ubuntu20.04.5这个版本,这个版本稳定,不需要安装Python,以及相关环境,而且安装VMware tools也比较方便。20.04xxx的版本会有变动,建议直接使用https://mirrors.aliyun.com/ubuntu-releases/来打开链接,选择自己需要的版本
在文件菜单中选择创建虚拟机
这个两个任意选择,如果不熟悉就选择典型
选择稍后安装操作系统
选择Linux
编译android的系统版本比较高的话,磁盘空间给大一些。选择将虚拟磁盘拆分成多个文件
选择自定义
根据自己的实际内存分配,一般是实际内存的二分之一,设置CPU的核心数,默认比较保守。
选择镜像文件,当然也可以不选。设置好后,点击开启此虚拟机。
选择English,当然你可以选择中文,这样安装中文输入法时,不需要自己再设置一下。
去掉勾选
去掉勾选
点击Continue
设置时区
设置账号和密码,这个密码也是你的root密码。
等十几分钟安装。
安装成功后,重启系统。
安装完成后,重启,就一直卡在这个地方,如果你的鼠标不可用,按Ctrl+Alt回到你原本计算机系统,这在vmware窗口底部会有提示的。
然后用鼠标在Ubuntu 窗口顶部栏目条依次选择:虚拟机-电源-关闭客户机。
关闭虚拟机后,然后在Ubuntu窗口找到设备栏,点击CD/DVD(SATA),在设备状态栏把“启动时连接”取消掉勾勾,点击确定。
重新启动客户机操作系统,在刚才黑屏页面等待,一会就可以启动操作系统了。
三、安装VMware tools
3.1、通用安装
击虚拟机菜单下的安装VMware tools
点击文件菜单,找到VMware Tools,选择文件,复制安装文件到桌面。
解压安装文件
进入vmware-tools-distrib
打开终端,使用sudo ./vmware-install.pl命令安装
注意:这个时候一定要输入yes(后面可以一路回车),因为默认是no,如果回车,就是选择默认值,我这个版本是ubuntu16的,ubuntu 20是直接回车就可以安装成功的。不管什么版本都选择yes.
安装成功后,重启系统,设置窗口自适应。
这样窗口就可以自由缩放了
我们在看看拖文件复制到ubuntu的files里面(而不是它的桌面)行不行。
已经可以了。
3.2、Ubuntu22.04 中Drag and drop is not supported问题
解决方法
先在terminal中安装这两个程序
sudo apt install gnome-shell-extension-prefs
sudo apt install nemo
1
2
左下角的开始菜单中选择extension
将Desktop icons NG 选项关闭
左下角的开始菜单中选择startup application preference
添加一个选项
将utuntu重启后,即可在host和vm间进行拖动传输。
四、安装依赖环境
4.1、安装git
sudo apt install git
4.2、下载Python3
如果ubuntu的版本是ubuntu20.04或者ubuntu22.04,不需要安装Python3以及相关环境。
cd Downloads
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
4.3、解压Python3
tar xvf Python-3.7.1.tgz
4.4、编译与安装Python3
1.cd Python-3.7.1
2…/configure
检查系统的安装环境:
no表示没有安装,yes表示系统已经安装了。我们看到系统没有安装OpenSSL,没有安装这个的话,我下载代码需要https来下载的,OpenSSL是支持https的,所以我们手动安装。把所需要的环境安装一下:
sudo apt install git-core libssl-dev libffi-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 libz-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
安装完成后,再执行./configure
OpenSSL已经安装成功。会看到一个makefile文件
3.sudo make install
这行代码的意思是编译python3.7.1并把它安装上去。
权限不够,加权限
sudo -H make install
从新安装一下
注意:这一步非常关键,不然后面安装repo和同步代表都会出问题,如下面的报错:
4.5、安装Python2
如果ubuntu的版本是ubuntu20.04或者ubuntu22.04是没有Python2的,但是有一个工具需要Python2,所以也得安装。
4.5.1、启用Universe仓库
一般情况下其实应该是已经启用了,但是还是记录一下手动添加的方法
sudo apt-add-repository universe
sudo apt update
4.5.2、安装python2.7
使用以下命令安装python2
sudo apt install python2-minimal
1
查看python版本
python2 -V
python2 --version
4.5.3、切换默认python版本
到这一步如果使用python命令还是会提示找不到命令,所以需要增加一组新的系统命令链接符:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2
进行版本切换
sudo update-alternatives --config python
上图可以看出python命令默认是链接python3,那么只需要输入最左边的序号(例如我的系统里显示python2的序号是1),就自动切换成python2了
4.6、管理Python版本
如果根据4.5 python版本控制安装成功的,不需要看这一章节
使用update-alternatives来管理Python版本
输入:update-alternatives --config python提示:
说明需要配置python,网上的配置如下:
update-alternatives --install /usr/bin/python python /usr/bin/python2.7.12
但是报错:
缺少priority,我们加一下:
如何找到对应版本真去的路径呢?
使用下面指令:
import sys
pythonpath = sys.executable
print(pythonpath)
红框里面就是正确的路径,再看看python3的
找到正确的路径后,继续配置
使用sudo update-alternatives --config python查看配置
切换成python3.7.1
4.7、安装依赖库
sudo apt-get updatesudo apt-get install -y libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilibsudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 sudo apt-get install -y tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386sudo apt-get install -y dpkg-dev libsdl1.2-dev libesd0-devsudo apt-get install -y gnupg flex bison gperf build-essentialsudo apt-get install -y zip curl zlib1g-dev gcc-multilib g++-multilibsudo apt-get install -y libc6-dev-i386 libssl-dev device-tree-compiler liblz4-toolsudo apt-get install -y lib32ncurses5-dev x11proto-core-dev libx11-devsudo apt-get install -y libgl1-mesa-dev libxml2-utils xsltproc unzip m4sudo apt-get install -y lib32z-dev ccache libncurses5
所以需要选择的全部选yes
五、AOS源码下载
镜像地址
AOSP官方地址:
https://source.android.google.cn/setup/build/downloading
中科大镜像:
https://mirrors.ustc.edu.cn/help/aosp.html
清华镜像:
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP
如果有条件可以使用官方地方下载,如果没有条件使用中科大的,我自己使用清华的下载过,老是断网超时,不建议大家使用,有可能是我使用的移动网的原因引起。
5.1、在用户的根目录创建 bin
mkdir ~/bin
5.2、bin配置环境变量
PATH=~/bin:$PATH
5.3、下载repo
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
如果上述 URL 不可访问,可以用下面的:
curl -sSL ‘https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT’ |base64 -d > ~/bin/repo
安装curl
执行
curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
1
修改访问权限
chmod a+x ~/bin/repo
5.4、创建仓库目录存放代码
mkdir WORKING_DIRECTORY
5.5、同步代码
初始化仓库:
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
使用这个命令初始化仓库,那么同步下来的是最新版本代码,如果想下载指定版本
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-12.0.0_r1
android-12.0.0_r0这个版本代号可以到官网去找:https://source.android.google.cn/?hl=zh-cn
代号、标记和 build 号 | Android 开源项目 | Android Open Source Project (google.cn)
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-12.0.0_r1
碰到这个错误,需要改一下 ~/bin/repo中的REPO_URL ,把 REPO_URL 一行替换成下面的:
REPO_URL = ‘https://gerrit-googlesource.proxy.ustclug.org/git-repo’
执行gedit ~/bin/repo
修改好后,在执行
报无法进行SSL证书校验。关闭SSL证书校验
git config --global http.sslverify false
git config --global https.sslverify false
需要配置一下自己的邮箱和用户名
初始化代码仓库成功。按Ctrl +H可以看到:
同步代码,执行:
repo sync -j4
注意-j4代表使用4个线程下载,目前官网已经说最多4个线程,不能多给。
后面就和Ubuntu22.04中一样了。
5.6、在Ubuntu22.04中下载源码
在~/bin/repo中配置:
REPO_URL = ‘https://gerrit-googlesource.proxy.ustclug.org/git-repo’
报无法进行SSL证书校验。关闭SSL证书校验
git config --global http.sslverify false
git config --global https.sslverify false
建议下载代码时,使用4个线程。
同步代码成功
如果同步时,报下面的错误
可以改成清华的试试
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r30
六、代码编译
6.1、配置编译环境
source build/envsetup.sh
6.2、选择编写版本
lunchss520k@ss520k-virtual-machine:~/WORKING_DIRECTORY$ lunch
You're building on LinuxLunch menu... pick a combo:1. aosp_arm-eng2. aosp_arm64-eng3. aosp_barbet-userdebug4. aosp_blueline-userdebug5. aosp_blueline_car-userdebug6. aosp_bonito-userdebug7. aosp_bonito_car-userdebug8. aosp_bramble-userdebug9. aosp_bramble_car-userdebug10. aosp_car_arm-userdebug11. aosp_car_arm64-userdebug12. aosp_car_x86-userdebug13. aosp_car_x86_64-userdebug14. aosp_cf_arm64_auto-userdebug15. aosp_cf_arm64_phone-userdebug16. aosp_cf_x86_64_foldable-userdebug17. aosp_cf_x86_64_pc-userdebug18. aosp_cf_x86_64_phone-userdebug19. aosp_cf_x86_64_tv-userdebug20. aosp_cf_x86_auto-userdebug21. aosp_cf_x86_phone-userdebug22. aosp_cf_x86_tv-userdebug23. aosp_coral-userdebug24. aosp_coral_car-userdebug25. aosp_crosshatch-userdebug26. aosp_crosshatch_car-userdebug27. aosp_crosshatch_vf-userdebug28. aosp_flame-userdebug29. aosp_flame_car-userdebug30. aosp_oriole-userdebug31. aosp_oriole_car-userdebug32. aosp_raven-userdebug33. aosp_raven_car-userdebug34. aosp_redfin-userdebug35. aosp_redfin_car-userdebug36. aosp_redfin_vf-userdebug37. aosp_sargo-userdebug38. aosp_sargo_car-userdebug39. aosp_slider-userdebug40. aosp_sunfish-userdebug41. aosp_sunfish_car-userdebug42. aosp_trout_arm64-userdebug43. aosp_trout_x86-userdebug44. aosp_whitefin-userdebug45. aosp_x86-eng46. aosp_x86_64-eng47. arm_krait-eng48. arm_v7_v8-eng49. armv8-eng50. armv8_cortex_a55-eng51. armv8_kryo385-eng52. beagle_x15-userdebug53. beagle_x15_auto-userdebug54. car_ui_portrait-userdebug55. car_x86_64-userdebug56. db845c-userdebug57. fuchsia_arm64-eng58. fuchsia_x86_64-eng59. gsi_car_arm64-userdebug60. gsi_car_x86_64-userdebug61. hikey-userdebug62. hikey64_only-userdebug63. hikey960-userdebug64. hikey960_tv-userdebug65. hikey_tv-userdebug66. pixel3_mainline-userdebug67. poplar-eng68. poplar-user69. poplar-userdebug70. qemu_trusty_arm64-userdebug71. sdk_car_arm-userdebug72. sdk_car_arm64-userdebug73. sdk_car_portrait_x86_64-userdebug74. sdk_car_x86-userdebug75. sdk_car_x86_64-userdebug76. silvermont-eng77. uml-userdebug78. yukawa-userdebug79. yukawa_sei510-userdebugWhich would you like? [aosp_arm-eng] 75 ============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=12
TARGET_PRODUCT=sdk_car_x86_64
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=x86_64
TARGET_2ND_ARCH=x86
TARGET_2ND_ARCH_VARIANT=x86_64
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-5.19.0-35-generic-x86_64-Ubuntu-22.04.2-LTS
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=SQ3A.220605.009.B1
OUT_DIR=out
PRODUCT_SOONG_NAMESPACES=device/generic/goldfish device/generic/goldfish-opengl hardware/google/camera hardware/google/camera/devices/EmulatedCamera device/generic/goldfish device/generic/goldfish-opengl
============================================
6.3、编译
指令make也可简写:
m 编译全仓
mm 编译当前模块
mmm 编译指定模块
相关问题
问题一、编译内存不足
编译android12,对内存的要求最少是16个G,我这个给的是10G明显不够。
查看swap详情:
swapon -s
编译android12,对内存的要求最少是16个G,我这个给的是10G明显不够。ubuntu中有一个类似windows虚拟内存的东西,这个就是交换区swap。查看swap详情:
swapon -s
查看交换区大小
只有两个G的大小明显不够。下面,我们把缓存区的大小调整一下,计划调成25G.
(1)停用交换文件
根据swapon -s命令查看交换区
从上面的看/swapfile就是交换文件。停用命令:
sudo swapoff /swapfile
(2)删除文件
sudo rm /swapfile
(3)创建交换区文件
sudo fallocate -l 25G /swapfile
注意:这个swapfile这名字可以随意取的,不会有任何影响。
fallocate: no filename specified,什么原因,/swapfile前面没有加空格。
修改一下权限:
sudo chmod 600 /swapfile
(4)挂载交换文件
sudo mkswap /swapfile
(5)激活启用交换文件
sudo swapon /swapfile
接着把交换信息写入系统配置,不然Ubuntu重启后以上配置swap空间工作得重新做。使用vim编辑器打开配置文件:
sudo vim /etc/fstab
安装一下vim
sudo apt-get install vim
安装的时候碰到
Err:1 http://security.ubuntu.com/ubuntu jammy-updates/main amd64 vim-runtime all 2:8.2.3995-1ubuntu2.3
Temporary failure resolving ‘cn.archive.ubuntu.com’
是网络出了问题
使用下面命令开启网络服务:
sudo service network-manager stop
sudo service network-manager start
如果还是不能上网,ping一下网络是否可以ping通,如果可以,说明防火墙出问题了
查看防火墙状态:
sudo ufw status verbose
关闭防火墙:
sudo ufw disable
开启防火墙:
sudo ufw enable
继续安装vim
在最后一行插入(vim打开后按i进入编辑模式,移动光标到最后回车换行):
/swapfile swap swap defaults 00
(6)设置内存使用多少时使用交换区
系统只有当虚拟内存不足才会启动Swap,比如系统默认内存只有6000KB时才会启用交换空间,但是此时系统可能已经卡死,无法启动swap,所以需要更改设置。修改/etc/sysctl.conf
系统配置文件
sudo vim /etc/sysctl.conf
在最后面添加如下语句(按i进入编辑模式,光标移到最后,插入语句)
vm.min_free_kbytes=1500000 #大致1.5G
问题二、交换时宕机
交换时宕机:虽然交互空间被创建了,交互空间也被启用了,等等,都做得很好,但是AOSP12 并没有把交换空间给兼容进来,这个就是第二个问题
解决方案:
找到 aosp/build/soong/java/droidstubs.go 文件,双击打开,搜索“cmd.BuiltTool(“metalava”)”定位到代码处,然后新加语句:
Flag(“-J-Xmx6114m”).
上面是8G内存的配置
因为是给虚拟机分配的是10G内存,所以我在这里给的是8G.
问题三、无法安装libesd0-dev
sudo vim /etc/apt/sources.list //在行尾添加如下两行的内容deb http://us.archive.ubuntu.com/ubuntu/ xenial main universe
deb-src http://us.archive.ubuntu.com/ubuntu/ xenial main universe
更新软件源并重新安装:
sudo apt-get update && sudo apt-get install libesd0-dev
第三问题在ubuntu20和ubuntu22中并不存在。
但是内存小,的确编译慢。
所以建议使用32G内存的机子。
6.4、启动模拟器
启动指令,在编译的主目录输入启动命令:
emulator
需要注意的是,前面输入了source build/envsetup.sh和lunch这两个命令后,才可以输入emulator,不然会报emulator找不到。
这个是12.0.0.r1有的,12.1.0.r8直接启动,没有这个问题。
一直停留在Phone is starting这个地方,可以关闭模拟器显示器的加速3D图形。
去掉加速3D图形的对钩。正常情况是这样的:
弹出下面对话不用担心,模拟器中运行模拟器,性能是足够的,万一不选,把电脑配置提升一下。
6.5、车机模拟器
Google为车机单独开发模拟器(Generic AOSP Image)。
在android 9.0的版本中是有的,但是不知道什么原因下架了。好在 Volvo 及旗下的 Polestar 作为最早开发 Android Automotive 车机的车企,对外公开了 Image。虽不支持 ARM 架构,可以在 PC 上安装体验。我们可以下载下来体验一下:
下载Volvo XC40
在Automotive中选择对应的镜像。实际运行起来的效果如下:
七、Android Studio安装与配置
7.1、安装JDK
安装SDK有两种方式
7.1.1、默认安装
sudo apt-get upgrade
sudo apt-get install default-jre
sudo apt-get install default-jdk
这种方法安装一般安装的是JDK 11,但是实际工作中可以使用其它版本,比如JDK8.0,因此需要自己手动安装。
7.1.2、安装jkd17
7.1.2.1、更新Ubuntu软件资源库
sudo apt update
7.1.2.2、查找apt中的jdk版本
apt-cache search openjdk
1
7.1.2.3、安装open jre
sudo apt-get install openjdk-17-jre
7.1.2.4、安装openjdk
sudo apt-get install openjdk-17-jdk
7.1.2.5、检查安装jdk是否成功
java --version
7.1.2.6、删除open jdk ( 一般不需要删除 )
sudo apt-get remove openjdk-17-jre openjdk-17-jdk --purge
7.1.2.7、查看openJDK被安装到什么地方,这个在配置环境变量时会用到
sudo update-alternatives --config java
7.1.2.8、设置环境变量
sudo vim /etc/profile
在/etc/profile文件的末尾添加以下环境变量
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH
7.1.3、手动安装
7.1.3.1、下载JDK安装包
官网地址:https://www.oracle.com/java/technologies/downloads/archive/
选择java SE 8
因为是ubuntu不能选择jdk-8u351-linux-aarch64.tar.gz,需要选择jdk-8u351-linux-x64.tar.gz,不然会报错。
7.1.3.2、将下载的安装包解压到目标目录下
假设jdk-8u351-linux-x64.tar.gz下载到Downloads目录中
cd ~/Downloads #进入JDK安装包的存放目录
sudo tar -zxvf jdk-8u351-linux-x64.tar.gz -C /usr/local #解压到/usr/local/目录下
cd /usr/local/ #进入安装目录下
ls #查看是否成功解压
7.1.3.3、查看安装路径
cd jdk1.8.0_351 #进入JDK目录,
pwd #查看JDK路径,此处为 /usr/local/jdk1.8.0_351
7.1.3.4、设置环境变量
sudo vim ~/.bashrc #输入小写i进入insert模式
在文件开头添加如下几行内容,JAVA_HOME对应路径为第3步pwd所得到的路径
/usr/local/jdk1.8.0_351export JAVA_HOME=/usr/local/jdk1.8.0_351
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
按Esc键,输入 :wq 保存并退出。7.1.3.5、让配置立即生效
source ~/.bashrc
1
7.1.3.6、检查安装是否成功
输入java -versionss520k@ss520k-virtual-machine:/usr/local/jdk1.8.0_351$ java -version
java version "1.8.0_351"
Java(TM) SE Runtime Environment (build 1.8.0_351-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.351-b10, mixed mode)
chenwei@chenwei-virtual-machine:/usr/local/jdk1.8.0_351$
关于管理多个版本的JDK,请见 4.5、管理Python版本
7.2、安装Android Studio
7.2.1、下载Android Studio
官网地址:https://developer.android.google.cn/studio/#downloads
点击下载按钮进入
勾选,点击Download Android Studio …
下载在Downloads目录下面
解压android-studio-2022.1.1.21-linux.tar.gz到ProgramFiles
修改权限:
sudo chmod a+x android-studio
1
应该将android-studio安装到/opt目录下面
sudo mv android-studio /opt
1
原因是方便以后编译好模块直接使用指令启动AndroidStudio
aidegen packages/apps/Settings -i s
1
7.2.2、运行android studio
进入android-studio目录,
双击打开Install-Linux-tar.txt,可以看到运行方法
意思是进入bin目录,右键,打开终端,输入
sudo ./studio.sh
1
这样android studio被启动了
7.3、配置Android Studio的桌面快捷方式
配置桌面快捷方式有两种
7.3.1、第一种通过菜单创建
但是这种有一个缺点,就是有的版本上可行,有的版本上不可行,比如我在ubuntu20上使用这种方法创建有效果,但是在ubuntu18上创建就没有效果。
7.3.2第二种手动创建
进入/usr/share/applications
cd /usr/share/applications
手动添加一个android-studio.desktop文件
sudo vim android-studio.desktop
1
内容如下:
[Desktop Entry]Name=android-studio-2022.1.1Comment=Configure AndroidStudioExec=/home/ss520k/ProgramFiles/android-studio/bin/studio.shIcon=/home/ss420/ProgramFiles/android-studio/bin/studio.pngTerminal=falseType=Application
将android-studio.desktop文件复制到桌面, 并赋予可执行权限
sudo cp android-studio.desktop ~/Desktop/
cd ~/Desktop/
sudo chmod a+x android-studio.desktop
sudo chown ss520k:ss520k android-studio.desktop
启动android-studio
双击android-studio.desktop点击Trust and Launchandroid studio成功启动了或者在开始菜单中启动Android Studio
八、Android Studio源码导入与调试
8.1、生成iml与ipr
在Android Studio中导入AOSP源码,需要利用以下配置文件:
android.iml AS工程配置文件,记录项目所包含的module、依赖关系、SDK版本等。
android.ipr AS导入配置文件,记录工程的具体配置,代码以及依赖的lib等信息。
在完成了AOSP的编译后,接下来可以在AOSP源码中生成上述配置文件,依次执行:
#配置环境
source build/envsetup.sh
#选择好target
lunch
#编译idegen
mmm development/tools/idegen/
#生成ipr与iml文件
development/tools/idegen/idegen.sh
权限够不够,需要加sudo。注意下面生成的文件:
注意这两个文件是属于root的,这样我们在下面修改的时候需要加权限,不如现在就报权限改了:
sudo chmod 777 android.iml
sudo chmod 777 android.ipr
可以直接利用Android Studio打开
android.ipr文件就可以直接完成导入。
8.2、配置android.iml
第一次导入需要的时间会非常长,如果电脑配置不是很好,不建议全部导入,可以选择性导入需要的模块。此时可以修改android.iml文件,可以自定义只加载哪些模块。在android.iml中搜索excludeFolder,根据需要去除掉不需要导入的模块,如只需要导入framework模块,则配置iml如下:
<excludeFolder url="file://$MODULE_DIR$/./external/emma"/> <excludeFolder url="file://$MODULE_DIR$/./external/jdiff"/> <excludeFolder url="file://$MODULE_DIR$/out/eclipse"/> <excludeFolder url="file://$MODULE_DIR$/.repo"/> <excludeFolder url="file://$MODULE_DIR$/external/bluetooth"/> <excludeFolder url="file://$MODULE_DIR$/external/chromium"/> <excludeFolder url="file://$MODULE_DIR$/external/icu4c"/> <excludeFolder url="file://$MODULE_DIR$/external/webkit"/> <excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/> <excludeFolder url="file://$MODULE_DIR$/out/host"/> <excludeFolder url="file://$MODULE_DIR$/out/target/common/docs"/> <excludeFolder url="file://$MODULE_DIR$/out/target/product"/> <excludeFolder url="file://$MODULE_DIR$/prebuilt"/> <excludeFolder url="file://$MODULE_DIR$/art"/><excludeFolder url="file://$MODULE_DIR$/bionic"/> <excludeFolder url="file://$MODULE_DIR$/bootable"/> <excludeFolder url="file://$MODULE_DIR$/build"/> <excludeFolder url="file://$MODULE_DIR$/compatibility"/><excludeFolder url="file://$MODULE_DIR$/dalvik"/><excludeFolder url="file://$MODULE_DIR$/packages"/> <excludeFolder url="file://$MODULE_DIR$/cts"/> <excludeFolder url="file://$MODULE_DIR$/developers"/> <excludeFolder url="file://$MODULE_DIR$/development"/> <excludeFolder url="file://$MODULE_DIR$/device"/> <excludeFolder url="file://$MODULE_DIR$/external"/> <excludeFolder url="file://$MODULE_DIR$/hardware"/> <excludeFolder url="file://$MODULE_DIR$/kernel"/> <excludeFolder url="file://$MODULE_DIR$/libcore"/> <excludeFolder url="file://$MODULE_DIR$/libnativehelper"/> <excludeFolder url="file://$MODULE_DIR$/out"/> <excludeFolder url="file://$MODULE_DIR$/out"/> <excludeFolder url="file://$MODULE_DIR$/pdk"/> <excludeFolder url="file://$MODULE_DIR$/platform_testing"/><excludeFolder url="file://$MODULE_DIR$/prebuilts"/> <excludeFolder url="file://$MODULE_DIR$/sdk"/> <excludeFolder url="file://$MODULE_DIR$/system"/> <excludeFolder url="file://$MODULE_DIR$/test"/> <excludeFolder url="file://$MODULE_DIR$/toolchain"/> <excludeFolder url="file://$MODULE_DIR$/tools"/> <excludeFolder url="file://$MODULE_DIR$/vendor"/>
8.3、Android Studio配置
由于AOSP的源码过于庞大,为了流畅查看代码,需要减少加载的文件和足够大的内存。
8.3.1、 配置资源文件和依赖文件
完成修改后,再使用Android Studio打开ipr文件即可。后续如果需要增加或者排除其他模块,可以通过Android Studio进行配置。
在这个页面排除和导入相关代码都可以。
完成导入后,当我们点击某个类如Activity,此时可能跳转至Android Studio中的SDK对应的class或者source。此时我们希望跳转到我们自己下载的AOSP源码中,还需要进行如下配置:
删除这个依赖的jar包,只保留:
如果发现通过界面移动依赖顺序无效,此时可以打开android.iml文件,找到orderEntry配置,最终修改的配置结果为:
<orderEntry type="sourceFolder" forTests="false"/>
<orderEntry type="jdk" jdkName="Android API 32 Platform" jdkType="Android SDK" />
8.3.2、 编译单个模块使用
aidegen packages/apps/Settings -i s
此命令编译Settings模块,编译成功后会使用AndroidStudio启动,当AndroidStudio必须安装在/opt目录下面,如果不在这个目录下面,可以使用下面的指令:
aidegen packages/apps/Settings -i s -p /home/xxx/work/android/android-studio
8.3.3、 AndroidStudio的最大使用内存
在打开前需要最AndroidStudio的最大使用内存配置一下,不然导入的时候可以能会死机。在AndroidStudio目录下找到:studio64.vmoptions文件
修改后保存。
看9G的内存被用完,程序卡主了,那么为什么刚才的配置没有生效呢?
应该是配置文件错了,正确的文件是在/home/ss520k/.AndroidStudio3.2/config/studio64.vmoptions,其中ss520k是用户,需要注意的是不同ubuntu和androidstudio版本studio64.vmoptions的位置不一样,比如ubuntu18,androidstudio2022.1.1的路径就安装文件android-studio/bin/studio64.vmoptions。当然也可以通过Settings来设置
修改后,再看看效果:
过一会儿,使用内存变小
点击Continue继续。
8.3.4、 AndroidStudio右下角显示内存占用
先打开状态栏
然后显示内存占用
8.4、调试
要调试代码,首先要打开模拟器,注意不是Android Studio自带的模拟器,而是通过编译后的代码启动的模拟器,否则可能出现代码不对应的问题。
#设置环境
sourcebuild/envsteup.sh
#x代表编译时对应版本
lunch x
#启动模拟器
emulator
成功启动模拟器,选择断点菜单,在弹出的Choose Process中看看有没有进程列表,如果没有勾选Show all processes菜单,找到自己要调试的进程。
注意:有可以能链接不上模拟器,这个时候要看看adb有没有链接好,adb安装好后,重启AndroidStudio,再重启模拟器。
九、VScode源码导入framework的C/C++代码
使用AndroidStudio查看android源码中的c和c++代码不方便,不能跳转,就是算全仓编译过的,也不行,只有java代码可以跳转,为了方便可以使用VScode来查看c和c++代码。
9.1、去官网下载VSCode,
https://code.visualstudio.com/
9.2、安装下载deb文件,命令如下:
sudo dpkg -i xxx.deb
9.3、安装成功后在桌面启动VSCode
9.4、输入c/c++安装排名靠前的三个插件既可以
9.5、效果
没有任何报错,比较干净。
关于使用VS Code调试代码可以参考官方文档:[https://source.android.google.cn/docs/core/tests/debug/gdb?hl=zh-cn]
十、MobaXtem远程登录ubuntu系统(或虚拟机)
10.1、在Linux上安装并开启SSH
10.1.1、Linux终端输入如下命令行,安装openssh-server
sudo apt-get install openssh-server
1
10.1.2、Linux终端输入如下命令行,开启ssh服务
sudo /etc/init.d/ssh start
1
10.1.3、安装net-tools
sudo apt install net-tools
1
10.1.4、Linux终端输入如下命令行,查看本机器IP
ifconfig
1
记录红框里面的ip地址,以备后面使用。当然每台机子的ip有所有不同,根据实际情况而定。
10.1.5、修改配置文件允许远程登录
终端中输入如下内容:
vi /etc/ssh/sshd_config
1
10.1.6、在文件中找到 PermitRootLogin所在的行
你会发现如下一行:
#PermitRootLogin prohibit-password
将前面的 # 删除,同时将prohibit-password修改为yes,如下:
PermitRootLogin yes
按ESC键,输入:wq保存退出。
如果保存退出的时候报:‘readonly’ option is set (add ! to override)说明权限不够,强制退出后,使用下面指令从新进入
sudo vi /etc/ssh/sshd_config
1
10.1.7、停止ssh并重启ssh
sudo stop ssh
service sshd restart
1
2
如果使用sudo stop ssh报:sudo: stop: command not found
请使用:
sudo /etc/init.d/ssh stop
1
10.2、下载并配置Mobaxterm
10.2.1、下载Mobaxterm
可以网上搜索下载,如果不知道如何下载可以关注“测试开发自动化” 弓中皓,回复“moba”获取下载wp下载连接。
下载完成以后,如下所示:
10.2.2、选择SSH,输入上述Linux的ip,点击OK。
10.2.3、远程登录
输入你Ubuntu上的账号和密码,进行登录
10.2.4、文件移动到ubuntu中
可以从windows桌面拖动文件/文件夹到ubuntu虚拟机/主机中
十一、在Ubuntu中使用samba服务共享文件给window
昨天使用虚拟机共享文件,使用软连接将需要共享的文件夹连接到共享目录,结果报错了
ln: failed to create symbolic link '/mnt/hgfs/AOSP/aosp': Operation not supported
原因使用window中的文件夹做为共享目录,但是window的文件格式和ubuntu中不同,导致软连接失败。
后来查了一下使用samba来共享文件给window就不会,有这个问题,下面开始吧。
11.1、安装Samba服务
首先查看samba有没有安装,使用
sudo smbstatus
1
说明已经安装过了,如果没有安装,会提示:
请使用下面命令:
sudo apt-get install samba samba-common -y
1
中途出现弹窗需要确认重启服务,回车默认‘ok’即可
一般安装一个samba就可以了,后面samba-common一般会自动安装上去,但为了保险,还是一起安装。有些在其他Linux系统上,还会安装samba-client,用来连接Linux之间的连接使用,但这里主要给windows使用,而且只作为服务器,所有就不安装samba-client了。
11.2、配置samba
创建文件夹
首先最简单的配置,创建一个文件夹作为共享文件,如在’/’ 根目录,创建一个共享dev文件夹,并更改share文件权限,授予所有权限
mkdir dev
1
sudo chmod 777 /dev
1
更改配置文件 /etc/samba/smb.conf
sudo vi /etc/samba/smb.conf
1
添加以下内容
# 自定义共享名
[dev]
# 描述符,是给系统管理员看的
comment = this is Linux share directory
# 共享的路径
path = /home/chenwei/dev
# 是否公开,也就是是否能在网上邻居看到该共享
public = yes
# 是否可写
writable = yes
# 指出共享对于正在浏览的客户是否可见,或者共享通过使用UNC(通用命名约定)才能访问
browseable = yes
# 就是建立文件的预设共享的文件权限
create mask = 0700
# 设置共享文件夹权限,如果不设置,win客户端访问共建文件夹时,只能拷入文件,无法拷入文件夹
directory mask = 0700
# 客户端访问共享文件夹时需要输入的用户名。注:改名字必须与用户名相同,既命令输入框前的内容
valid users = chenwei
# 指定一个Linux帐号,所有用户都使用该帐号访问相应的共享
force user = chenwei
# 同force user类似,只不过强制的是用户组
force group = chenwei
# 用来指定该共享是否允许guest账户访问
public = yes
# 用来指定该共享资源是否可用
available = yes
保存退出,重启samba服务
sudo systemctl restart smbd.service
1
如果报下面错误
testparm命令用于测试Samba的设置是否正确无误。
testparm
1
是smb.conf文件中的中文注释写在代码的右边引起,我们修改一下,试试
在测试一下
成功了,我们再重启
sudo systemctl restart smbd.service
1
添加windows网络连接
首先看看服务器地址,也就是ubuntu说使用的ip。
ifconfig
1
这个192.168.254.128就是服务的地址,前面我们定义了共享目录的名称是dev,现在我们拼在一起打开看看:
如果提示拒绝访问,说明没有添加Samba用户,需要添加一下
sudo smbpasswd -a + 用户名
例:
sudo smbpasswd -a k3000
这篇关于AOSP开发环境搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!