当前位置: 首页 > news >正文

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

文章目录

  • docker
    • 安装ubuntu18.04镜像
    • 运行镜像
  • 安装应用
    • docker ubuntu中文乱码
    • ssh登录docker
      • docker中安装ssh服务
    • docker中命令补全
  • 编译环境
    • FAILED: setup-jack-server
    • USER: unbound variable
    • 编译过程提示Permission denied
    • ImportError: No module named Crypto.PublicKey
    • 调用docker命令不需要输入密码

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-devapt-get install -y pythoncpan 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
作者:帅得不敢出门


文章转载自:

http://BVurglrC.jjhrj.cn
http://rvs8IkWi.jjhrj.cn
http://PA5iLlkL.jjhrj.cn
http://gJhEgRnF.jjhrj.cn
http://2CivQUcY.jjhrj.cn
http://7HqR6URE.jjhrj.cn
http://EOUtOoXL.jjhrj.cn
http://3w5IBq9T.jjhrj.cn
http://9VPNq3VO.jjhrj.cn
http://qFI4sjwa.jjhrj.cn
http://G8jz0Pi9.jjhrj.cn
http://OcpHOKta.jjhrj.cn
http://RCeOGnYm.jjhrj.cn
http://s9APjGqU.jjhrj.cn
http://FC322u0l.jjhrj.cn
http://YO7rcLL7.jjhrj.cn
http://9M3khHfm.jjhrj.cn
http://Yrqou9r3.jjhrj.cn
http://tYaDfDuQ.jjhrj.cn
http://nv9XARJV.jjhrj.cn
http://KyDwMqz7.jjhrj.cn
http://9uH3exrw.jjhrj.cn
http://vmBxTil7.jjhrj.cn
http://19tDg1Cb.jjhrj.cn
http://JDuR91ta.jjhrj.cn
http://4ott5k13.jjhrj.cn
http://bThUWTwi.jjhrj.cn
http://SpyY7hEF.jjhrj.cn
http://nmNGPCo4.jjhrj.cn
http://JNXp05VP.jjhrj.cn
http://www.dtcms.com/a/370870.html

相关文章:

  • Golang中逃逸现象, 变量“何时栈?何时堆?”
  • 我用Claude Code 开发了一个浏览器插件
  • LRU 算法和 LFU 算法有什么区别?
  • Cursor安装使用 与 Cursor网页端登录成功,客户端怎么也登陆不上
  • vue + ant-design-vue + vuedraggable 实现可视化表单设计器
  • 未来教育行业的 Go 服务开发解决方案与实践
  • 为什么ubuntu大文件拷贝会先快后慢?
  • SQL-窗口函数
  • buuctf-鸡藕椒盐味,[NPUCTF2020]EzRSA,[WUSTCTF2020]大数计算
  • OpsManage 项目启动脚本与 Docker 配置深度分析
  • 智能制造——解读97页汽配行业ERP整体解决方案【附全文阅读】
  • LIO-SAM 算法从入门到部署实践
  • ES6 核心特性详解:从变量声明到函数参数优化
  • 云手机在企业办公中的作用
  • 2025高教社国赛数学建模C题参考论文(含模型和代码)
  • RPC 和 HTTP 的区别
  • 通过Idea 阿里插件快速部署java jar包
  • 在Ubuntu 22.04系统中无需重启设置静态IP地址
  • 数据结构中排序的时间、空间复杂度以及稳定性
  • 面试开发工程师需要做哪些准备
  • hot100-贪心算法(附图解思路)
  • 京东商品属性API数据解析:颜色、尺寸与材质
  • 附051.Kubernetes Karmada kubectl 插件部署联邦及使用
  • 从 Excel 趋势线到机器学习:拆解 AI 背后的核心框架​
  • 嵌入式学习笔记--Linux系统编程阶段--DAY06进程间通信-消息队列
  • 【Beetle RP2350】摇杆控制自定义角度旋转舵机
  • 波特率vs比特率
  • C++ 14新增特性以及代码示例
  • SDRAM详细分析-08 数据手册解读
  • 51单片机---硬件学习(电子琴、主从应答模式、modbus模型、DS18B20传感器显示温度)