文章目录
- docker
- 安装应用
-
- [docker ubuntu中文乱码](#docker ubuntu中文乱码)
- ssh登录docker
- docker中命令补全
- 编译环境
-
- [FAILED: setup-jack-server](#FAILED: setup-jack-server)
- [USER: unbound variable](#USER: unbound variable)
- [编译过程提示Permission denied](#编译过程提示Permission denied)
- [ImportError: No module named Crypto.PublicKey](#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-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
-
编译安卓时出现这种原因,大概率是安卓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
-
还有另外一种原因,修复方法如下
进入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的用户组中。
- 查看是否存在docker组getent group docker
- 不存在则创建sudo groupadd docker
- 把当前用户myname添加进组sudo gpasswd -a myname docker
- 更新组newgrp docker
- 如果还是不行,则输入sudo chmod 666 /var/run/docker.sock
linux下docker安装ubuntu
MacOS安装Docker battery-historian
作者:帅得不敢出门