1,下载安装Docker Desktop www.docker.com/
2,设置Docker Resources,如图,可根据自身设备性能来设置
3,Build 一个Ubuntu环境
-
创建一个文件夹,\my_android_linux
-
创建一个文件名为Dockerfile的文件
-
编辑Dockerfile文件: 内容为:
#Dockerfile #linux source linux版本为ubuntu:18.04 FROM ubuntu:18.04 #update apt-get source RUN apt-get update //启动方式为bash方式 CMD ["sh"]
4,在\my_android_linux 文件夹中启动PowerShell
执行命令: docker build -t my_android_linux . 它会自动在当前文件夹中扫描Dockerfile,然后执行Dockerfile文件中的配置
执行命令: docker run -t -i -v F:\Docker\my_android_linux\win_share_files:/win_share_files my_android_linux bash 这个命令是指,在run的时候,将F:\Docker\my_android_linux\win_share_files文件夹和Linux中的win_share_files文件夹做映射(或者叫挂载),“ : ” 左右的文件夹名字可以不同
执行完上述两条命令以后,就会自动进入Linux环境了。这样我们就算是初步搭建了一个Linux环境
5,在Docker Desktop中也可以看到我们创建的Docker image
6,进入Linux系统中,做同步源码到本地并且编译的准备工作:
准备工作:
-
下载安装git
#:apt-get install git #:git config --global user.name "Your Name" #:git config --global user.email "you@example.com"
-
下载安装repo
#:mkdir ~/bin #:PATH=~/bin:$PATH #:curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo #:chmod a+x ~/bin/repo
-
下载安装OpenJDK
#:apt-get install openjdk-8-jre
-
安装编译需要的库
#:apt-get install gnupg flex bison gperf build-essential zip zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
7,同步源码,我使用的是科大的镜像
#:repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-8.1.0_r81 --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
注:--repo-url=https://mirrors.tuna.tsinghua.edu.cn/ 表示将repo-url切换为清华的镜像,因为repo init的时候,会去更新repo,repo文件内置的url为google的url,访问超时。当然,也可以直接将内置的url改掉
#:repo sync
8,编译:
#:source build/envsetup.sh
#:lunch
#:make -j8
9,生成android.ipr文件
#:mmm development/tools/idegen
#:/development/tools/idegen/idegen.sh
会在根目录下,生成android.ipr文件,这个文件可以用Android Studio打开,打开就可以看各种源码了
10,END
遇到的问题汇总:
1,映射(或者挂载)Windows目录到Linux
通过 docker run -t -i -v F:\Docker\my_android_linux\android_source:/win_share_files my_android_linux bash命令,在run的时候,进行映射
2,在Linux环境下,在映射的目录中进行repo init 和 repo sync的时候,会报错,如下图
原因:和两个操作系统目录之间的映射有关系,目前未解决,只能在Linux中单独创建目录,下载编译完源码以后,copy到映射目录
3,两个操作系统之间,怎么copy文件:
通过docker cp命令
docker cp .\jdk-8u281-linux-x64.tar.gz 706ddb8b7bca:/java_8/
将目标文件jdk-8u281-linux-x64.tar.gz 拷贝到CONTAINER ID为706ddb8b7bca的Linux /java_8/ 目录下
4,报GC overhead limit exceeded.错误
解决方案:
#:export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
#:jack-admin kill-server
#:jack-admin start-server
5,编译过程中,角色问题:
#:export USER=$root
6,使用HTTPS镜像的时候,会报urlopen error unknown url type: https
解决方案:
重新编译Python3.6+, 加上--with-ssl参数
#./configure --prefix=/usr/local/python37 --with-ssl
参考:
安装repo:source.android.google.cn/setup/devel…
更新代码:source.android.google.cn/setup/build…
Ubuntu apt-get 国内镜像源:developer.aliyun.com/mirror/ubun…
Ubuntu apt-get 国内镜像源替换:blog.csdn.net/qq_21095573…
windows下docker文件夹的映射:blog.csdn.net/m0_38044453…
Windows下使用Docker编译Android系统源代码:cloud.tencent.com/developer/a…
清华大学Android开源镜像:mirrors.tuna.tsinghua.edu.cn/help/AOSP/
Ubuntu安装Python3.6+:www.jianshu.com/p/940b774a0…
windows安装docker,搭建Linux:zhuanlan.zhihu.com/p/70870453
Android build号:source.android.google.cn/setup/start…
使用AndroidStudio查看并调试Android源码:blog.csdn.net/cfy137000/a…
从开源镜像站下载Android系统源码:xusiwei.github.io/post/2020/0…
搭建编译环境:source.android.google.cn/source/init…
android ipr文件和iml文件:www.jianshu.com/p/6b60e3cb5…
使用python出现错误 urlopen error unknown url type: https 的解决办法:blog.csdn.net/qq_38189484…