Initial commit

This commit is contained in:
Anton Malinskiy
2018-02-12 15:24:41 +07:00
parent aa3e1bb594
commit 6c4d823b68
8 changed files with 3222 additions and 0 deletions

61
templates/Dockerfile Normal file
View File

@@ -0,0 +1,61 @@
FROM ubuntu:16.04
MAINTAINER Anton Malinskiy "anton@malinskiy.com"
# Set up insecure default key
ADD adbkey adbkey.pub adb_usb.ini /root/.android/
ENV LINK_ANDROID_SDK=https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip \
LANG=en_US.UTF-8 \
LANGUAGE=en_US:en \
LC_ALL=en_US.UTF-8 \
ANDROID_HOME=/opt/android-sdk-linux \
PATH="$PATH:/opt/android-sdk-linux/tools:/opt/android-sdk-linux/platform-tools:/opt/android-sdk-linux/tools/bin:/opt/android-sdk-linux/emulator"
RUN dpkg --add-architecture i386 && \
echo "deb mirror://mirrors.ubuntu.com/mirrors.txt xenial main restricted universe multiverse" > /etc/apt/sources.list && \
echo "deb mirror://mirrors.ubuntu.com/mirrors.txt xenial-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb mirror://mirrors.ubuntu.com/mirrors.txt xenial-security main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb mirror://mirrors.ubuntu.com/mirrors.txt xenial-backports main restricted universe multiverse" >> /etc/apt/sources.list && \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -yq software-properties-common libstdc++6:i386 zlib1g:i386 libncurses5:i386 \
locales ca-certificates apt-transport-https curl unzip redir iproute2 \
openjdk-8-jdk xvfb x11vnc fluxbox nano libpulse0 \
--no-install-recommends && \
locale-gen en_US.UTF-8 && \
# Install Android SDK
curl -L $LINK_ANDROID_SDK > /tmp/android-sdk-linux.zip && \
unzip /tmp/android-sdk-linux.zip -d /opt/android-sdk-linux/ && \
rm /tmp/android-sdk-linux.zip && \
# Customized steps per specific platform
yes | sdkmanager --no_https --licenses && \
sdkmanager --no_https emulator tools platform-tools "platforms;{{ .Env.PLATFORM }}" "system-images;{{ .Env.PLATFORM }};google_apis;x86" --verbose && \
echo no | avdmanager create avd -n "x86" --package "system-images;{{ .Env.PLATFORM }};google_apis;x86" --tag google_apis && \
# Unfilter devices (now local because CI downloads from github are unstable)
# curl -o /root/.android/adb_usb.ini https://raw.githubusercontent.com/apkudo/adbusbini/master/adb_usb.ini && \
# Optimize size of the image
rm /root/.android/avd/x86.avd/userdata.img && \
tar -czvf /opt/android-sdk-linux/system-images/{{ .Env.PLATFORM }}/google_apis/x86/userdata.img.tar.gz /opt/android-sdk-linux/system-images/{{ .Env.PLATFORM }}/google_apis/x86/userdata.img && \
rm /opt/android-sdk-linux/system-images/{{ .Env.PLATFORM }}/google_apis/x86/userdata.img && \
tar -czvf /opt/android-sdk-linux/system-images/{{ .Env.PLATFORM }}/google_apis/x86/system.img.tar.gz /opt/android-sdk-linux/system-images/{{ .Env.PLATFORM }}/google_apis/x86/system.img && \
rm /opt/android-sdk-linux/system-images/{{ .Env.PLATFORM }}/google_apis/x86/system.img && \
DEBIAN_FRONTEND=noninteractive apt-get purge -yq unzip openjdk-8-jdk && \
apt-get -yq autoremove && \
apt-get clean && \
apt-get autoclean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ADD config.ini /root/.android/avd/x86.avd/config.ini
# Expose adb
EXPOSE 5037 5554 5555
# Add script
ADD start.sh /start.sh
RUN chmod +x /start.sh
CMD /start.sh

39
templates/config.ini Normal file
View File

@@ -0,0 +1,39 @@
avd.ini.encoding=UTF-8
AvdId=x86
PlayStore.enabled=true
abi.type=x86
avd.ini.displayname=x86
disk.dataPartition.size=800M
hw.accelerometer=yes
hw.audioInput=no
hw.battery=yes
hw.camera.back=none
hw.camera.front=none
hw.cpu.arch=x86
hw.cpu.ncore=2
hw.dPad=no
hw.device.hash2=MD5:1be89bc42ec9644d4b77968b23474980
hw.device.manufacturer=Google
hw.device.name=Nexus 5X
hw.gps=yes
hw.gpu.enabled=yes
hw.gpu.mode=swiftshader
hw.initialOrientation=Portrait
hw.keyboard=no
hw.lcd.density=160
hw.mainKeys=no
hw.ramSize=1536
hw.sensors.orientation=yes
hw.sensors.proximity=yes
hw.trackBall=no
image.sysdir.1=system-images/{{ .Env.PLATFORM }}/google_apis/x86/
runtime.network.latency=none
runtime.network.speed=full
showDeviceFrame=no
skin.dynamic=yes
skin.name=480x800
skin.path=_no_skin
skin.path.backup=_no_skin
tag.display=Google APIs
tag.id=google_apis
vm.heapSize=512

58
templates/start.sh Normal file
View File

@@ -0,0 +1,58 @@
#!/usr/bin/env bash
console_port=$CONSOLE_PORT
adb_port=$ADB_PORT
adb_server_port=$ADB_SERVER_PORT
if [ -z "$console_port" ]
then
console_port="5554"
fi
if [ -z "$adb_port" ]
then
adb_port="5555"
fi
if [ -z "$adb_server_port" ]
then
adb_server_port="5037"
fi
# Detect ip and forward ADB ports outside to outside interface
ip=$(ip addr list eth0|grep "inet "|cut -d' ' -f6|cut -d/ -f1)
redir --laddr=$ip --lport=$adb_server_port --caddr=127.0.0.1 --cport=$adb_server_port &
redir --laddr=$ip --lport=$console_port --caddr=127.0.0.1 --cport=$console_port &
redir --laddr=$ip --lport=$adb_port --caddr=127.0.0.1 --cport=$adb_port &
# Moving adb binary away so that stopping adb server with delay will release the emulator and will make it available for external connections
mv /opt/android-sdk-linux/platform-tools/adb /opt/android-sdk-linux/platform-tools/_adb
sleep 30 && _adb kill-server &
export DISPLAY=:1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/android-sdk-linux/emulator/lib64/qt/lib:/opt/android-sdk-linux/emulator/lib64/libstdc++:/opt/android-sdk-linux/emulator/lib64:/opt/android-sdk-linux/emulator/lib64/gles_swiftshader
Xvfb :1 +extension GLX +extension RANDR +extension RENDER +extension XFIXES -screen 0 1024x768x24 &
fluxbox -display ":1.0" &
x11vnc -display :1 -nopw -forever &
# Set up and run emulator
# qemu references bios by relative path
cd /opt/android-sdk-linux/emulator
tar -xvf /opt/android-sdk-linux/system-images/{{ .Env.PLATFORM }}/google_apis/x86/userdata.img.tar.gz --directory /
tar -xvf /opt/android-sdk-linux/system-images/{{ .Env.PLATFORM }}/google_apis/x86/system.img.tar.gz --directory /
CONFIG="/root/.android/avd/x86.avd/config.ini"
CONFIGTMP=${CONFIG}.tmp
if [ -n "$ANDROID_CONFIG" ];
then
IFS=';' read -ra OPTS <<< "$ANDROID_CONFIG"
for OPT in "${OPTS[@]}"; do
IFS='=' read -ra KV <<< "$OPT"
KEY=${KV[0]}
VALUE=${KV[1]}
mv ${CONFIG} ${CONFIGTMP}
cat ${CONFIGTMP} | grep -v ${KEY}= > ${CONFIG}
echo ${OPT} >> ${CONFIG}
done
fi
LIBGL_DEBUG=verbose ./qemu/linux-x86_64/qemu-system-i386 -avd x86 -screen multi-touch -no-boot-anim -noaudio -nojni -wipe-data -netfast -verbose -camera-back none -camera-front none -skip-adb-auth -ports $console_port,$adb_port $EMULATOR_OPTS -qemu $QEMU_OPTS