Initial commit
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
build/
|
||||||
3013
base/adb_usb.ini
Normal file
3013
base/adb_usb.ini
Normal file
File diff suppressed because it is too large
Load Diff
28
base/adbkey
Normal file
28
base/adbkey
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDGZTSw8To7S/tN
|
||||||
|
etbRl420qlPpkBIs/3LRLIn34xmjnQzf70sTk5ZIHrQI73suMbO8T9mbo/4M5n+k
|
||||||
|
aeWEES36E9vDVtO4riJjWNFxAgzHu2bzFto0Fk6ADp4cCfNIc2gBfSh/4Le6Pvl8
|
||||||
|
7d4ZE78HHUU8LXPKt8mN8F7inizKXNIsKValZyHr3rIg2H/NXxrBjP9P43IHzPsG
|
||||||
|
Z4MhmDBvyBlvhCjcE2EQKwiThj1u26Kdm4bTKXX1lefzHm6dzRC/85D+HzWfBgup
|
||||||
|
Jdfb3EE8RRm/8dPKRuE9d9MQu8WottWTVPwL40Vp3bKgJzsbhWiCesGoXr75dfFl
|
||||||
|
SNk4CGV1AgMBAAECggEAAnhgH5PhVbusdVqCMjng2c8FHHNexpCnrVMQpLV/LDpY
|
||||||
|
XrFsDeJYjK1VMIdK0VhtFHsqCnYQQ7ja/gETioFsQSDeK6B5ImOIqhQBB5cu8Y2z
|
||||||
|
ynMOZHeiopWMAm1dShmlwd79EhqKLxd5o8SSb11/k2cZ5ZXrSyrep5XGmKu/gwV/
|
||||||
|
OC1uetBULTlC1t3AumLzCYhGVL1+bpB9tXqYJ42ELOctcevCNhGnn8zBHNGR4fSG
|
||||||
|
9QdA9Bzab5iaOKCIhIiXYHyAny5GTRo144kr0FyhMfaneDeikmafn/0fj55JnyPC
|
||||||
|
PKLjss18JURUDuUTSVt/iSvO9fiq4nP5HRJsZiwgQQKBgQDxxtFcL2CxEwO+C4N5
|
||||||
|
oHVTVzhXiaFsMSEKM29Cc9zRBDt2tWClRAXzylVv2DGEdXzs2ADTKFy1BryCelUe
|
||||||
|
V9xGt4lyR07Sf0namhAOp3NvCVNr/WKD/6ew38DRHh+ClUsuEM1OjL2HoyAhT9+U
|
||||||
|
oZBtqzhxplNh4xabQj9Mz3rovwKBgQDSEQ+dhXUwXCs/Vma4U+qWUrQSH2kvO2bV
|
||||||
|
2mdtLnZwOs+p6XKICkpixvhyl1omTLE/UrbxWyyU3tZRAfYhgdP0XIfj1UcjUcVK
|
||||||
|
3S8WhxgE1iDqWW3PJxwLJ4Tz6T8CoMqYU77J1BwINQXvrMl5yqblTCuu0nmGxmrE
|
||||||
|
PYkWQr2qywKBgDhIKARlowSVgJGE7J4rlCRKcXsvNryQ0zgksQmvHwApFA6WOmE+
|
||||||
|
bIRL3YejtCM5llMsFUUSaEJbxxY4lAf0O/raTsyjfN3Tc8XHh2Vh5aU7bof8/Cnu
|
||||||
|
IYMzExebA4rKZi3bC2/1o0kn2BrpFQrscUqWSRVruo1W57RMv5+JzPrRAoGAZeTK
|
||||||
|
q0Cp+Fwsyhsx1iU2O9Y/7C56SePJXOAEnQwVfRi51BQdbul27XTP3F2X5835h9qq
|
||||||
|
TGZKOKfiUwbdiaE822HqtFOmnvYx+b9R8N50gxwOeT4Jqpqw2qQ/tEQmQTMXMk4k
|
||||||
|
1CdjtYNqrrgkPkRTMhQBeFo1gm9KKIgkr7yN3YMCgYBrRZPdWMxV6EOTSlZrbC14
|
||||||
|
Vxw4OboqTkDaQMFk8AZDcCfm+b3PM1y22yDp6/B5mNk5VYaNWAAGS956onE68dpr
|
||||||
|
WymhKxo6LZ0teqwP4oJgJduBYN6kkPh70LBtfanuzO6hIKkDAiUKVBfH3RzIKKhi
|
||||||
|
iD5ARoDOri+IHtn12TiLfQ==
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
1
base/adbkey.pub
Normal file
1
base/adbkey.pub
Normal file
@@ -0,0 +1 @@
|
|||||||
|
QAAAACN9EI51ZQg42Uhl8XX5vl6owXqCaIUbOyegst1pReML/FST1baoxbsQ03c94UbK0/G/GUU8Qdzb1yWpCwafNR/+kPO/EM2dbh7z55X1dSnThpudottuPYaTCCsQYRPcKIRvGchvMJghg2cG+8wHcuNP/4zBGl/Nf9ggst7rIWelViks0lzKLJ7iXvCNybfKcy08RR0HvxMZ3u18+T66t+B/KH0BaHNI8wkcng6AThY02hbzZrvHDAJx0VhjIq6401bD2xP6LRGE5Wmkf+YM/qOb2U+8szEue+8ItB5IlpMTS+/fDJ2jGeP3iSzRcv8sEpDpU6q0jZfR1npN+0s7OvGwNGXGHai3vMWTpuKLYk4BKy8JKnbe0ldZojnY8+djY7DplwNoLNKBX4+on0Q2kIqX4V4De45sGusKBT2MlA8qfx0l2hu2S/0TbFJV3XKFLmrratlcDWBgat/8G1gF1Cp2bst9p70lW9BQqIOxGJImACW2MStoe3dQBwTl9Cz4M10ihdeQ8WtaS3LrCj9eW8yPrJsvuwD4s2oQc/mZctHeQqK5mYtqNhaHJ2APb50EO81I4/h3VpQqyh98H4Y8si6xcN8fU0Nc1GgJvgzX0BeOWVeIPRpX8plePk8Nmq8Ci75SD0/UyhL0GsrlGOerXbgWUIGxJjhPIkpYjloCxZBuF9zDbQEAAQA= <20>@ci
|
||||||
21
generate.sh
Normal file
21
generate.sh
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
function createDockerfile() {
|
||||||
|
platform=$1
|
||||||
|
mkdir -p ./build/$platform
|
||||||
|
docker run -e PLATFORM="$platform" -v $(pwd):/src hairyhenderson/gomplate --input-dir=/src/templates --output-dir=/src/build/$platform
|
||||||
|
cp base/* ./build/$platform
|
||||||
|
}
|
||||||
|
|
||||||
|
rm -rf ./build
|
||||||
|
|
||||||
|
createDockerfile android-16
|
||||||
|
createDockerfile android-17
|
||||||
|
createDockerfile android-18
|
||||||
|
createDockerfile android-19
|
||||||
|
createDockerfile android-21
|
||||||
|
createDockerfile android-22
|
||||||
|
createDockerfile android-23
|
||||||
|
createDockerfile android-24
|
||||||
|
createDockerfile android-25
|
||||||
|
createDockerfile android-26
|
||||||
61
templates/Dockerfile
Normal file
61
templates/Dockerfile
Normal 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
39
templates/config.ini
Normal 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
58
templates/start.sh
Normal 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
|
||||||
Reference in New Issue
Block a user