Docker安装Ubuntu搭建Android SDK编译环境

发布于:2025-09-07 ⋅ 阅读:(25) ⋅ 点赞:(0)

docker

安装ubuntu18.04镜像

docker pull ubuntu:18.04

18.04这个是版本号,可根据需要修改成自己要的版本, 有些比较老的SDK可能需要安装14.04。18.04有编译过Android13,更新的没试过。

查看安装好的镜像

docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
ubuntu        18.04     8d5df41c547b   11 days ago     63.1MB

运行镜像

docker run -itd --privileged=true --name ubuntu18 ubuntu:18.04

privileged使用该参数,container内的root拥有真正的root权限,
使用–name命令容器为ubuntu18, 可以改成自己需要的名字,后面会用到。

运行后,查看容器

docker ps
CONTAINER ID   IMAGE          COMMAND   CREATED          STATUS          PORTS     NAMES
5fd7afa11989   ubuntu:18.04   "bash"    22 seconds ago   Up 21 seconds             ubuntu18

进入容器
docker run中使用–name命令后,可以直接使用这个name进入,这样比使用一长串id(比如此例的5fd7afa11989)的方式来方便许多。
登录虚拟机ubuntu

docker exec -it ubuntu18 /bin/bash

安装应用

apt-get update

这步很重要,否则装不了软件

apt-get install vim

docker ubuntu中文乱码

打开bash.bashrc

vi /etc/bash.bashrc
添加:
export LC_ALL="C.UTF-8"
然后:
source /etc/bash.bashrc

ssh登录docker

想可以远程ssh登录docker下的虚拟机,还需要一些操作。

docker中安装ssh服务

apt install openssh-server
service ssh start

修改

/etc/bash.bashrc
添加
service ssh start

docker中命令补全

比如输入git p狂按tab键没有任何反应,安全补全后按下tab键自动实例为push

apt-get install bash-completion
source /usr/share/bash-completion/bash_completion

安装完要进行commit保存,否则重启后ssh修改会丢失

docker  container ls
CONTAINER ID   IMAGE   COMMAND       CREATED        STATUS        PORTS  NAMES
b35788b503a2   ubuntu:18.04   "/bin/bash"  4 months ago   Up 3 months    ubuntu18

得到CONTAINER ID为b35788b503a2
退出虚拟机,在主机中执行进行保存

docker commit b35788b503a2 ubuntu18 

然后就可以直接通过ssh登录docker了,运行命令如下:

docker run -it --privileged=true -v /home/xx/aa:/aa -d -p 2222:22 --name=ubuntu18 ubuntu:18.04 /usr/sbin/sshd -D

其中-v用来mount本地目录到docker中,比如-v /xx/aa:/aa 代表把本地/xx/aa目录映射到docker中的/aa目录, 这样可以在docker中的ubuntu中访问主机的目录。
-p 2222:22用来把虚拟机的2222映射到主机的22端口,主机22端口是ssh端口,
这样做的好处是可以通过2222端口与虚拟机进行ssh交互, 比如登录ssh: “ssh 虚拟机ip -p 2222”。

编译环境

apt-get install -y g++-multilib gcc-multilib
apt-get install -y git-core gnupg flex bison gperf build-essential zip curl
apt-get install -y  xsltproc unzip  m4 bc rsync
apt-get install -y lib32z-dev lib32z1 libc6-dev-i386 libgl1-mesa-dev libncurses5 lib32ncurses5-dev libssl-dev libx11-dev libxml2-utils  zlib1g-dev

apt-get install -y python

cpan install Archive::Zip

不同的Android SDK对与jdk的版本要求可能不一样,要对应好版本,
查看openjdk有哪些版本可安装

apt-cache search openjdk
比如安装openjdk-8
apt-get install -y openjdk-8-jdk

可能会报错:
在这里插入图片描述
遇到这个错误,先执行下

apt-get update

查看安装了哪些jdk

dpkg --list | grep -i openjdk

在这里插入图片描述

FAILED: setup-jack-server

  1. 编译安卓时出现这种原因,大概率是安卓SDK版本与系统中的JDK版本不一致导致,
    Android 8需要的是openjdk-8,安装openjdk-8,
    或者配置环境变量直接使用sdk中的jdk,其中xx是sdk路径
export JAVA_HOME=/xx/prebuilts/jdk/jdk8/linux-x86
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

可以把上面3句放到~/.bashrc中
如果是要使用系统安装的, 改成如下

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

然后

source ~/.bashrc
  1. 还有另外一种原因,修复方法如下
    进入sdk目录执行
out/host/linux-x86/bin/jack-admin kill-server
out/host/linux-x86/bin/jack-admin start-server

如果第二句会卡住,可以杀掉放到另外一个命令符界面中执行.

USER: unbound variable

FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex.rsp
out/host/linux-x86/bin/jack: line 29: USER: unbound variable

这是由于docker没有设置USER环境变量导致,输入user,手动添加后继续编译即可

export USER=$(whoami)

可以把这句也放到~/.bashrc
这样开机就会自动运行,不需要手动。

编译过程提示Permission denied

docker中明明是root的权限,“#”代表是最高权限了
在这里插入图片描述

但是编译过程会报没权限,如下图:
在这里插入图片描述
这也可能是因为docker没有设置USER环境变量导致,修改方法与上面一条一样。

ImportError: No module named Crypto.PublicKey

在 Python 中遇到 ImportError: No module named Crypto.PublicKey 错误通常意味着你的环境中没有安装 pycryptodome 库,或者安装的库版本不正确。Crypto.PublicKey 是 pycryptodome 库的一部分,用于处理公钥和私钥。

解决方案
安装 pycryptodome

如果你还没有安装 pycryptodome,可以通过 pip 来安装。打开你的命令行工具(例如 CMD、Terminal 或 PowerShell),然后输入以下命令:

pip install pycryptodome

调用docker命令不需要输入密码

默认安装docker后,执行docker是需要输入root的密码的。
如果要不输入密码,需要把当前用户加入到docker的用户组中。

  1. 查看是否存在docker组getent group docker
  2. 不存在则创建sudo groupadd docker
  3. 把当前用户myname添加进组sudo gpasswd -a myname docker
  4. 更新组newgrp docker
  5. 如果还是不行,则输入sudo chmod 666 /var/run/docker.sock

linux下docker安装ubuntu
MacOS安装Docker battery-historian
作者:帅得不敢出门


网站公告

今日签到

点亮在社区的每一天
去签到