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

文章目录

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

作者:帅得不敢出门

相关推荐
tangweiguo030519873 小时前
Android Kotlin 动态注册 Broadcast 的完整封装方案
android·kotlin
fatiaozhang95273 小时前
浪潮CD1000-移动云电脑-RK3528芯片-2+32G-安卓9-2种开启ADB ROOT刷机教程方法
android·网络·adb·电脑·电视盒子·刷机固件·机顶盒刷机
janthinasnail4 小时前
使用Docker安装Stirling-PDF(PDF工具)
docker·pdf
前行的小黑炭4 小时前
Android 不同构建模式下使用不同类的例子:如何在debug模式和release模式,让其使用不同的类呢?
android·kotlin·gradle
andyguo4 小时前
AI模型测评平台工程化实战十二讲(第一讲:从手工测试到系统化的觉醒)
android
2501_915921434 小时前
小团队如何高效完成 uni-app iOS 上架,从分工到工具组合的实战经验
android·ios·小程序·uni-app·cocoa·iphone·webview
幂简集成5 小时前
通义灵码 AI 程序员低代码 API 课程实战教程
android·人工智能·深度学习·神经网络·低代码·rxjava
m_136875 小时前
Mac Intel 芯片 Docker 一键部署 Neo4j 最新版本教程
macos·docker·neo4j
Lin_Aries_04215 小时前
在 CentOS 9 上安装 Docker 的完整指南
linux·docker·centos