mirror of
https://github.com/budtmo/docker-android.git
synced 2026-07-31 04:07:25 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a72a5d1edc | ||
|
|
9f58ad6bda | ||
|
|
94a3f40ac6 | ||
|
|
e340223c8c | ||
|
|
77488aea7f | ||
|
|
8f1c4bf1ca | ||
|
|
cd63313358 | ||
|
|
d0f9534e3d | ||
|
|
7b6bc3fe3e | ||
|
|
1f1d4ccf49 | ||
|
|
8278a3f6ef | ||
|
|
92ea480e55 | ||
|
|
0188131350 | ||
|
|
371a57c663 | ||
|
|
6d4de35602 | ||
|
|
51158d8630 | ||
|
|
3a7cba3dc9 | ||
|
|
4bb9f044ed | ||
|
|
0e35dab27f | ||
|
|
14a98aea88 | ||
|
|
337aaf5103 | ||
|
|
f5e86d5806 | ||
|
|
caf2cb2cd8 | ||
|
|
03f2ea256a | ||
|
|
af2d302bbc | ||
|
|
b6752ea535 | ||
|
|
06a8e83922 | ||
|
|
a7e7eaa5aa | ||
|
|
d2c82d05c7 | ||
|
|
79d36e1536 | ||
|
|
90ff1782ae | ||
|
|
92e4933521 | ||
|
|
4f9469db55 | ||
|
|
cc409b9914 | ||
|
|
4cc5a36c32 | ||
|
|
ed77303a16 | ||
|
|
5696fe3ea0 | ||
|
|
b39a8784b7 | ||
|
|
fcb1f2ec31 | ||
|
|
49113f2cb4 | ||
|
|
0a8b7c07a2 | ||
|
|
49b9c44f3a | ||
|
|
15cddf08c4 | ||
|
|
71949ee857 | ||
|
|
d0e3c619ca | ||
|
|
8dc87a3a3c | ||
|
|
76617374c0 | ||
|
|
70fc3b411c | ||
|
|
5e7ce8ce66 | ||
|
|
1d7121c41b | ||
|
|
0a1758091f | ||
|
|
eb045aa644 | ||
|
|
e5a9fe7031 | ||
|
|
fdb464781a | ||
|
|
2e5237ec80 | ||
|
|
b1f9ec5e79 | ||
|
|
1ac4a6484e | ||
|
|
f09e38c92c | ||
|
|
e051faf84a | ||
|
|
2461a6e832 | ||
|
|
20120f5c0a | ||
|
|
6a0f135247 | ||
|
|
b36847817d | ||
|
|
0196d23103 | ||
|
|
01d1c663c1 | ||
|
|
5b8ef77bba | ||
|
|
3b3746fff3 | ||
|
|
d9ba33c9fa | ||
|
|
94132acf41 | ||
|
|
86e7e0f8e5 |
-30
@@ -1,30 +0,0 @@
|
||||
language: python
|
||||
|
||||
python:
|
||||
- "3.5"
|
||||
|
||||
sudo: required
|
||||
|
||||
services:
|
||||
- docker
|
||||
|
||||
install: "pip install -r requirements.txt"
|
||||
|
||||
env:
|
||||
- ANDROID_VERSION=5.0.1
|
||||
- ANDROID_VERSION=5.1.1
|
||||
- ANDROID_VERSION=6.0
|
||||
- ANDROID_VERSION=7.0
|
||||
- ANDROID_VERSION=7.1.1
|
||||
- ANDROID_VERSION=8.0
|
||||
- ANDROID_VERSION=8.1
|
||||
- ANDROID_VERSION=9.0
|
||||
- ANDROID_VERSION=10.0
|
||||
- ANDROID_VERSION=11.0
|
||||
- REAL_DEVICE=True
|
||||
- GENYMOTION=True
|
||||
|
||||
script: bash travis.sh
|
||||
|
||||
after_success:
|
||||
- bash <(curl -s https://codecov.io/bash)
|
||||
+1
-1
@@ -28,7 +28,7 @@ Docker-Android's analytics are sent throughout Docker-Android's execution to Goo
|
||||
Docker-Android's analytics are accessible to Docker-Android's current maintainers. Contact [@budtmo](https://github.com/budtmo) if you are a maintainer and need access.
|
||||
|
||||
## How?
|
||||
The code is viewable in [this lines](./src/appium.sh#L225-L247).
|
||||
The code is viewable in [this script](./src/appium.sh).
|
||||
|
||||
## Opting out before starting Docker-Android
|
||||
Docker-Android analytics helps us, maintainers and leaving it on is appreciated. However, if you want to opt out and not send any information, you can do this by using passing environment variable GA=false to the Docker container.
|
||||
|
||||
@@ -4,11 +4,12 @@
|
||||
|
||||
[](https://github.com/igrigorik/ga-beacon "Analytics")
|
||||
[](https://gitter.im/budtmo/docker-android?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
[](https://travis-ci.org/budtmo/docker-android)
|
||||
[](https://dev.azure.com/budtmoos/budtmoos/_build/latest?definitionId=7&branchName=master)
|
||||
[](https://codecov.io/gh/budtmo/docker-android)
|
||||
[](https://www.codacy.com/app/butomo1989/docker-appium?utm_source=github.com&utm_medium=referral&utm_content=butomo1989/docker-appium&utm_campaign=Badge_Grade)
|
||||
[](https://github.com/budtmo/docker-android/releases)
|
||||
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fbudtmo%2Fdocker-android?ref=badge_shield)
|
||||
[](http://paypal.me/budtmo)
|
||||
[](http://makeapullrequest.com)
|
||||
|
||||
Docker-Android is a docker image built to be used for everything related to mobile website testing and Android project.
|
||||
@@ -43,8 +44,6 @@ List of Docker images
|
||||
|
||||
|OS |Android |API |Browser |Browser version |Chromedriver |Image |Size |
|
||||
|:---|:---|:---|:---|:---|:---|:---|:---|
|
||||
|Linux|5.0.1|21|browser|37.0|2.21|budtmo/docker-android-x86-5.0.1|[](https://microbadger.com/images/budtmo/docker-android-x86-5.0.1 "Get your own image badge on microbadger.com")|
|
||||
|Linux|5.1.1|22|browser|39.0|2.13|budtmo/docker-android-x86-5.1.1|[](https://microbadger.com/images/budtmo/docker-android-x86-5.1.1 "Get your own image badge on microbadger.com")|
|
||||
|Linux|6.0|23|browser|44.0|2.18|budtmo/docker-android-x86-6.0|[](https://microbadger.com/images/budtmo/docker-android-x86-6.0 "Get your own image badge on microbadger.com")|
|
||||
|Linux|7.0|24|chrome|51.0|2.23|budtmo/docker-android-x86-7.0|[](https://microbadger.com/images/budtmo/docker-android-x86-7.0 "Get your own image badge on microbadger.com")|
|
||||
|Linux|7.1.1|25|chrome|55.0|2.28|budtmo/docker-android-x86-7.1.1|[](https://microbadger.com/images/budtmo/docker-android-x86-7.1.1 "Get your own image badge on microbadger.com")|
|
||||
@@ -53,6 +52,7 @@ List of Docker images
|
||||
|Linux|9.0|28|chrome|66.0|2.40|budtmo/docker-android-x86-9.0|[](https://microbadger.com/images/budtmo/docker-android-x86-9.0 "Get your own image badge on microbadger.com")|
|
||||
|Linux|10.0|29|chrome|74.0|74.0.3729.6|budtmo/docker-android-x86-10.0|[](https://microbadger.com/images/budtmo/docker-android-x86-10.0 "Get your own image badge on microbadger.com")|
|
||||
|Linux|11.0|30|chrome|83.0|83.0.4103.39|budtmo/docker-android-x86-11.0|[](https://microbadger.com/images/budtmo/docker-android-x86-11.0 "Get your own image badge on microbadger.com")|
|
||||
|Linux|12.0|31|chrome|93.0|93.0.4577.15|budtmo/docker-android-x86-12.0|[](https://microbadger.com/images/budtmo/docker-android-x86-12.0 "Get your own image badge on microbadger.com")|
|
||||
|All |-|-|-|-|-|budtmo/docker-android-real-device|[](https://microbadger.com/images/budtmo/docker-android-real-device "Get your own image badge on microbadger.com")|
|
||||
|All|All|All|All|All|All|budtmo/docker-android-genymotion|[](https://microbadger.com/images/budtmo/docker-android-genymotion "Get your own image badge on microbadger.com")|
|
||||
|
||||
@@ -81,7 +81,14 @@ Docker is installed in your system.
|
||||
Quick Start
|
||||
-----------
|
||||
|
||||
1. Run Docker-Android
|
||||
1. Your machine need to support virtualization. To check it:
|
||||
|
||||
```
|
||||
sudo apt install cpu-checker
|
||||
kvm-ok
|
||||
```
|
||||
|
||||
2. Run Docker-Android
|
||||
|
||||
- For ***Linux OS***, please use image name that contains "x86"
|
||||
|
||||
@@ -92,7 +99,7 @@ Quick Start
|
||||
- For ***OSX*** and ***Windows OS***, please use Virtual Machine that support Virtualization with Ubuntu OS
|
||||
|
||||
|
||||
2. Verify the ip address of docker host.
|
||||
3. Verify the ip address of docker host.
|
||||
|
||||
- For OSX, you can find out by using following command:
|
||||
|
||||
@@ -102,12 +109,12 @@ Quick Start
|
||||
|
||||
- For different OS, localhost should work.
|
||||
|
||||
3. Open ***http://docker-host-ip-address:6080*** from web browser. Note: Adding ```?view_only=true``` will give user only view only permission.
|
||||
4. Open ***http://docker-host-ip-address:6080*** from web browser. Note: Adding ```?view_only=true``` will give user only view only permission.
|
||||
|
||||
Custom configurations
|
||||
---------------------
|
||||
|
||||
[This document](README_CUSTOM_CONFIG.md) contains custom configurations of Docker-Android that you might need, e.g. Proxy, Changing language on fly, etc.
|
||||
[This document](README_CUSTOM_CONFIG.md) contains custom configurations of Docker-Android that you might need, e.g. Proxy, Changing language on fly, etc.
|
||||
|
||||
Build Android project
|
||||
---------------------
|
||||
@@ -125,31 +132,31 @@ Docker-Android can be used for building Android project and executing its unit t
|
||||
```bash
|
||||
docker run -it --rm -v $PWD/testing-samples/ui/espresso/BasicSample:/tmp -w /tmp budtmo/docker-android-x86-8.1 /tmp/gradlew build
|
||||
```
|
||||
|
||||
|
||||
Control Android connected to host (Emulator or Real Device)
|
||||
-----------------------------------------------------------
|
||||
1. Create a docker container with this command
|
||||
1. Create a docker container with this command
|
||||
|
||||
```
|
||||
$ docker run --privileged -d -p 6080:6080 -p 5554:5554 -p 5555:5555 -p 4723:4723 --name android-container-appium budtmo/docker-android-real-device
|
||||
```
|
||||
|
||||
|
||||
2. Open noVNC [http://localhost:6080](http://localhost:6080)
|
||||
|
||||
3. Open terminal by clicking right on **noVNC** window >> **Terminal emulator**
|
||||
|
||||
4. To connect to host's adb (make sure your host have adb and connected to the device.)
|
||||
4. To connect to host's adb (make sure your host have adb and connected to the device.)
|
||||
|
||||
```
|
||||
$ adb -H host.docker.internal devices
|
||||
```
|
||||
|
||||
|
||||
To specify port, just add `-P port_number`
|
||||
|
||||
```
|
||||
$ adb -H host.docker.internal -P 5037 devices
|
||||
```
|
||||
|
||||
|
||||
5. Now your container can access your host devices. But, you need to add `remoteAdbHost` and `adbPort` desired capabilities to make **Appium** can recognise those devices.
|
||||
|
||||
|
||||
@@ -245,17 +252,23 @@ docker exec -it android-container tail -f /var/log/supervisor/docker-android.std
|
||||
|
||||
Emulator Skins
|
||||
--------------
|
||||
The Emulator skins are taken from [Android Studio IDE](https://developer.android.com/studio) and [Samsung Developer Website](e)
|
||||
The Emulator skins are taken from [Android Studio IDE](https://developer.android.com/studio) and [Samsung Developer Website](https://developer.samsung.com/)
|
||||
|
||||
Security
|
||||
--------
|
||||
All docker images are protected by [Polyverse](https://polyverse.io/) by scrambling the Linux packages. For more information please read [this](https://polyverse.io/how-it-works/)
|
||||
|
||||
Monitoring
|
||||
----------
|
||||
You can use [cadvisor](https://github.com/google/cadvisor) combined with influxdb / prometheus and grafana if needed to monitor each running container.
|
||||
|
||||
Users
|
||||
-----
|
||||
Docker-Android are being used by 100+ countries around the world.
|
||||
|
||||
[](https://datastudio.google.com/s/ht7HVKHKAQE)
|
||||
[](https://datastudio.google.com/s/ht7HVKHKAQE)
|
||||
|
||||
Stargazers over time
|
||||
--------------------
|
||||
|
||||
[](https://starchart.cc/budtmo/docker-android)
|
||||
|
||||
Special Thanks
|
||||
--------------
|
||||
|
||||
@@ -25,6 +25,7 @@ It is also possible to connect appium server that run inside docker-android with
|
||||
- SELENIUM_HOST="\<host\_ip\_address>"
|
||||
- SELENIUM_PORT=\<port\_number>
|
||||
- SELENIUM_TIMEOUT=\<timeout\_in\_seconds>
|
||||
- SELENIUM_PROXY_CLASS=\<selenium\_proxy\_class\_name>
|
||||
|
||||
To run tests for mobile browser, following parameter can be passed:
|
||||
|
||||
|
||||
@@ -13,6 +13,15 @@ You can enable proxy inside container and Android emulator by passing following
|
||||
- NO_PROXY="localhost"
|
||||
- ENABLE_PROXY_ON_EMULATOR=true
|
||||
|
||||
Proxy with authentication
|
||||
----
|
||||
|
||||
You can set proxy with authentication by passing following environment variable:
|
||||
|
||||
- HTTP_PROXY_USER="\<username>"
|
||||
- HTTP_PROXY_PASSWORD="\<password>"
|
||||
|
||||
|
||||
Language
|
||||
--------
|
||||
|
||||
|
||||
+20
-6
@@ -38,23 +38,37 @@ The following instructions are used for OS X. You'll need [docker-machine-parall
|
||||

|
||||
|
||||
4. Enable kvm inside virtual machine
|
||||
4.1. Run as an account other than root to install kvm packages using tce-load.
|
||||
|
||||
4.0 SSH to the machine
|
||||
```bash
|
||||
# su docker
|
||||
$ tce-load -wi kvm
|
||||
docker-machine ssh vmware-dev
|
||||
```
|
||||
|
||||
4.2. Run as root to load kvm module after kvm packages install.
|
||||
4.1 Check kvm version
|
||||
```bash
|
||||
# version
|
||||
$ 10.1
|
||||
```
|
||||
|
||||
Go to http://tinycorelinux.net/10.x/x86_64/tcz/ and check your kvm version, for version 10.1 is kvm-4.19.10-tinycore64.tcz
|
||||
|
||||
4.2. Run as an account other than root to install kvm packages using tce-load.
|
||||
```bash
|
||||
# su docker
|
||||
$ tce-load -wi kvm-4.19.10-tinycore64.tcz
|
||||
```
|
||||
|
||||
4.3. Run as root to load kvm module after kvm packages install.
|
||||
```bash
|
||||
$ sudo modprobe kvm_intel
|
||||
```
|
||||
|
||||
4.3. Check if the kvm device is loaded.
|
||||
4.4. Check if the kvm device is loaded.
|
||||
```bash
|
||||
$ ls /dev/kvm
|
||||
```
|
||||
|
||||
4.4. Check if your CPU supports hardware virtualization now
|
||||
4.5. Check if your CPU supports hardware virtualization now
|
||||
```bash
|
||||
$ egrep -c '(vmx|svm)' /proc/cpuinfo
|
||||
```
|
||||
|
||||
+1
-13
@@ -1,4 +1,4 @@
|
||||
FROM appium/appium:1.17.1-p1
|
||||
FROM appium/appium:v1.22.0-p0
|
||||
|
||||
LABEL maintainer "Budi Utomo <budtmo.os@gmail.com>"
|
||||
|
||||
@@ -7,18 +7,6 @@ LABEL maintainer "Budi Utomo <budtmo.os@gmail.com>"
|
||||
#=============
|
||||
WORKDIR /root
|
||||
|
||||
#===========
|
||||
# Polyverse
|
||||
# https://polyverse.io/how-it-works/
|
||||
#===========
|
||||
ARG TOKEN=xxx
|
||||
|
||||
RUN curl -s https://sh.polyverse.io | sh -s install ${TOKEN}; \
|
||||
if [ $? -eq 0 ]; then \
|
||||
apt -y update && \
|
||||
apt-get -y install --reinstall $(dpkg --get-selections | awk '{print $1}'); \
|
||||
fi
|
||||
|
||||
#==================
|
||||
# General Packages
|
||||
#------------------
|
||||
|
||||
+1
-13
@@ -1,4 +1,4 @@
|
||||
FROM appium/appium:1.17.1-p1
|
||||
FROM appium/appium:v1.22.0-p0
|
||||
|
||||
LABEL maintainer "Budi Utomo <budtmo.os@gmail.com>"
|
||||
|
||||
@@ -7,18 +7,6 @@ LABEL maintainer "Budi Utomo <budtmo.os@gmail.com>"
|
||||
#=============
|
||||
WORKDIR /root
|
||||
|
||||
#===========
|
||||
# Polyverse
|
||||
# https://polyverse.io/how-it-works/
|
||||
#===========
|
||||
ARG TOKEN=xxx
|
||||
|
||||
RUN curl -s https://sh.polyverse.io | sh -s install ${TOKEN}; \
|
||||
if [ $? -eq 0 ]; then \
|
||||
apt -y update && \
|
||||
apt-get -y install --reinstall $(dpkg --get-selections | awk '{print $1}'); \
|
||||
fi
|
||||
|
||||
#==================
|
||||
# General Packages
|
||||
#------------------
|
||||
|
||||
+1
-13
@@ -1,4 +1,4 @@
|
||||
FROM appium/appium:1.17.1-p1
|
||||
FROM appium/appium:v1.22.0-p0
|
||||
|
||||
LABEL maintainer "Budi Utomo <budtmo.os@gmail.com>"
|
||||
|
||||
@@ -7,18 +7,6 @@ LABEL maintainer "Budi Utomo <budtmo.os@gmail.com>"
|
||||
#=============
|
||||
WORKDIR /root
|
||||
|
||||
#===========
|
||||
# Polyverse
|
||||
# https://polyverse.io/how-it-works/
|
||||
#===========
|
||||
ARG TOKEN=xxx
|
||||
|
||||
RUN curl -s https://sh.polyverse.io | sh -s install ${TOKEN}; \
|
||||
if [ $? -eq 0 ]; then \
|
||||
apt -y update && \
|
||||
apt-get -y install --reinstall $(dpkg --get-selections | awk '{print $1}'); \
|
||||
fi
|
||||
|
||||
#==================
|
||||
# General Packages
|
||||
#------------------
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 61 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 53 KiB |
@@ -0,0 +1,51 @@
|
||||
trigger:
|
||||
tags:
|
||||
include:
|
||||
- v*
|
||||
|
||||
jobs:
|
||||
- job: build_and_release_emulators
|
||||
pool:
|
||||
vmImage: ubuntu-20.04
|
||||
strategy:
|
||||
maxParallel: 10
|
||||
matrix:
|
||||
6.0:
|
||||
android.version: '6.0'
|
||||
7.0:
|
||||
android.version: '7.0'
|
||||
7.1.1:
|
||||
android.version: '7.1.1'
|
||||
8.0:
|
||||
android.version: '8.0'
|
||||
8.1:
|
||||
android.version: '8.1'
|
||||
9.0:
|
||||
android.version: '9.0'
|
||||
10.0:
|
||||
android.version: '10.0'
|
||||
11.0:
|
||||
android.version: '11.0'
|
||||
12.0:
|
||||
android.version: '12.0'
|
||||
steps:
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: '3.8.12'
|
||||
displayName: 'Use Python 3.8.12'
|
||||
|
||||
- script: |
|
||||
latest_tag=$(git describe --tags --abbrev=0)
|
||||
echo "##vso[task.setvariable variable=release_version]$latest_tag"
|
||||
|
||||
displayName: 'Get the latest release tag'
|
||||
|
||||
- script: |
|
||||
docker login -u $(DOCKER_USERNAME) -p=$(DOCKER_PASSWORD)
|
||||
./release.sh all $(android.version) $(release_version)
|
||||
docker logout
|
||||
|
||||
displayName: 'Build docker image, run unit tests and push the docker image'
|
||||
|
||||
- script: bash <(curl -s https://codecov.io/bash)
|
||||
displayName: 'Publish test result'
|
||||
@@ -0,0 +1,37 @@
|
||||
trigger:
|
||||
tags:
|
||||
include:
|
||||
- v*
|
||||
|
||||
jobs:
|
||||
- job: build_and_release_genymotion_and_device
|
||||
pool:
|
||||
vmImage: ubuntu-20.04
|
||||
strategy:
|
||||
maxParallel: 2
|
||||
matrix:
|
||||
genymotion:
|
||||
script.name: './release_real.sh'
|
||||
real_device:
|
||||
script.name: './release_geny.sh'
|
||||
steps:
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: '3.8.12'
|
||||
displayName: 'Use Python 3.8.12'
|
||||
|
||||
- script: |
|
||||
latest_tag=$(git describe --tags --abbrev=0)
|
||||
echo "##vso[task.setvariable variable=release_version]$latest_tag"
|
||||
|
||||
displayName: 'Get the latest release tag'
|
||||
|
||||
- script: |
|
||||
docker login -u $(DOCKER_USERNAME) -p=$(DOCKER_PASSWORD)
|
||||
$(script.name) all $(release_version)
|
||||
docker logout
|
||||
|
||||
displayName: 'Build docker image, run unit tests and push the docker image'
|
||||
|
||||
- script: bash <(curl -s https://codecov.io/bash)
|
||||
displayName: 'Publish test result'
|
||||
@@ -0,0 +1,29 @@
|
||||
trigger:
|
||||
branches:
|
||||
include:
|
||||
- master
|
||||
|
||||
pr:
|
||||
branches:
|
||||
include:
|
||||
- '*'
|
||||
|
||||
variables:
|
||||
- name: app_version
|
||||
value: test
|
||||
|
||||
jobs:
|
||||
- job: build_and_test
|
||||
pool:
|
||||
vmImage: ubuntu-20.04
|
||||
steps:
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: '3.8.12'
|
||||
displayName: 'Use Python 3.8.12'
|
||||
- script: pip install -r requirements.txt
|
||||
displayName: 'Install pip packages'
|
||||
- script: ./release.sh test 7.1.1 $(app_version)
|
||||
displayName: 'Build Docker image with Android 7.1.1 and run unit tests'
|
||||
- script: bash <(curl -s https://codecov.io/bash)
|
||||
displayName: 'Publish test result'
|
||||
+12
-14
@@ -10,7 +10,7 @@ else
|
||||
fi
|
||||
|
||||
if [ -z "$2" ]; then
|
||||
read -p "Android version (5.0.1|5.1.1|6.0|7.0|7.1.1|8.0|8.1|9.0|10.0|11.0|all): " ANDROID_VERSION
|
||||
read -p "Android version (6.0|7.0|7.1.1|8.0|8.1|9.0|10.0|11.0|12.0|all): " ANDROID_VERSION
|
||||
else
|
||||
ANDROID_VERSION=$2
|
||||
fi
|
||||
@@ -22,8 +22,6 @@ else
|
||||
fi
|
||||
|
||||
declare -A list_of_levels=(
|
||||
[5.0.1]=21
|
||||
[5.1.1]=22
|
||||
[6.0]=23
|
||||
[7.0]=24
|
||||
[7.1.1]=25
|
||||
@@ -32,13 +30,12 @@ declare -A list_of_levels=(
|
||||
[9.0]=28
|
||||
[10.0]=29
|
||||
[11.0]=30
|
||||
[12.0]=31
|
||||
)
|
||||
|
||||
# The version of the Chrome browser installed on the Android emulator needs to be known beforehand
|
||||
# in order to chose the proper version of chromedriver (see http://chromedriver.chromium.org/downloads)
|
||||
declare -A chromedriver_versions=(
|
||||
[5.0.1]="2.21"
|
||||
[5.1.1]="2.13"
|
||||
[6.0]="2.18"
|
||||
[7.0]="2.23"
|
||||
[7.1.1]="2.28"
|
||||
@@ -47,6 +44,7 @@ declare -A chromedriver_versions=(
|
||||
[9.0]="2.40"
|
||||
[10.0]="74.0.3729.6"
|
||||
[11.0]="83.0.4103.39"
|
||||
[12.0]="93.0.4577.15"
|
||||
)
|
||||
|
||||
function get_android_versions() {
|
||||
@@ -66,7 +64,7 @@ function get_android_versions() {
|
||||
|
||||
# If version cannot be found in the list
|
||||
if [ -z "$versions" ]; then
|
||||
echo "Android version \"$ANDROID_VERSION\" is not found in the list or not supported! Support only version 5.0.1, 5.1.1, 6.0, 7.0, 7.1.1, 8.0, 8.1"
|
||||
echo "Android version \"$ANDROID_VERSION\" is not found in the list or not supported! Support only version 6.0, 7.0, 7.1.1, 8.0, 8.1, 9.0, 10.0, 11.0, 12.0"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -141,27 +139,27 @@ function build() {
|
||||
FILE_NAME=docker/Emulator_x86
|
||||
|
||||
for v in "${versions[@]}"; do
|
||||
level=${list_of_levels[$v]}
|
||||
|
||||
# Find image type and default web browser
|
||||
if [ "$v" == "5.0.1" ] || [ "$v" == "5.1.1" ]; then
|
||||
IMG_TYPE=default
|
||||
BROWSER=browser
|
||||
elif [ "$v" == "6.0" ]; then
|
||||
if [ "$v" == "6.0" ]; then
|
||||
# It is because there is no ARM EABI v7a System Image for 6.0
|
||||
IMG_TYPE=google_apis
|
||||
BROWSER=browser
|
||||
elif [ "$v" == "" ]; then
|
||||
IMG_TYPE=google_apis
|
||||
BROWSER=chrome
|
||||
BROWSER=chrome
|
||||
else
|
||||
#adb root cannot be run in IMG_TYPE=google_apis_playstore
|
||||
#adb root cannot be run in IMG_TYPE=google_apis_playstore
|
||||
IMG_TYPE=google_apis
|
||||
BROWSER=chrome
|
||||
if [ "$v" == "9.0" ]; then
|
||||
# Android 9 & Android 11 had build issues that requires 64-bit
|
||||
# Android 12+ Google dropped 32-bit support
|
||||
if [ "$v" == "9.0" ] || [ $level -ge 30 ]; then
|
||||
processor=x86_64
|
||||
fi
|
||||
fi
|
||||
echo "[BUILD] IMAGE TYPE: $IMG_TYPE"
|
||||
level=${list_of_levels[$v]}
|
||||
echo "[BUILD] API Level: $level"
|
||||
sys_img=$processor
|
||||
echo "[BUILD] System Image: $sys_img"
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
IMAGE_NAME="budtmo/docker-android"
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
read -p "Type : " TYPE
|
||||
else
|
||||
TYPE=$1
|
||||
fi
|
||||
|
||||
if [ -z "$2" ]; then
|
||||
read -p "Version : " VERSION
|
||||
else
|
||||
VERSION=$2
|
||||
fi
|
||||
|
||||
declare -a versions=("7.1.1" "7.0" "6.0" "5.1.1" "5.0.1")
|
||||
|
||||
## now loop through the above array
|
||||
for v in "${versions[@]}"
|
||||
do
|
||||
IMAGE="$IMAGE_NAME-$TYPE-$v"
|
||||
IMAGE_OLD="$IMAGE:$VERSION"
|
||||
IMAGE_LATEST="$IMAGE:latest"
|
||||
echo "Revert image \"$IMAGE_LATEST\" to version \"$IMAGE_OLD\""
|
||||
docker pull $IMAGE_OLD
|
||||
docker tag $IMAGE_OLD $IMAGE_LATEST
|
||||
docker push $IMAGE_LATEST
|
||||
done
|
||||
+8
-5
@@ -3,6 +3,7 @@
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import uuid
|
||||
|
||||
@@ -56,7 +57,7 @@ def is_initialized(device_name) -> bool:
|
||||
if os.path.exists(config_path):
|
||||
logger.info('Found existing config file at {}.'.format(config_path))
|
||||
with open(config_path, 'r') as f:
|
||||
if any('hw.device.name={}'.format(device_name) in line for line in f):
|
||||
if any(re.match(r'hw\.device\.name ?= ?{}'.format(device_name), line) for line in f):
|
||||
logger.info('Existing config file references {}. Assuming device was previously initialized.'.format(device_name))
|
||||
return True
|
||||
else:
|
||||
@@ -149,9 +150,10 @@ def appium_run(avd_name: str):
|
||||
selenium_host = os.getenv('SELENIUM_HOST', '172.17.0.1')
|
||||
selenium_port = int(os.getenv('SELENIUM_PORT', 4444))
|
||||
selenium_timeout = int(os.getenv('SELENIUM_TIMEOUT', 30))
|
||||
selenium_proxy_class = os.getenv('SELENIUM_PROXY_CLASS', 'org.openqa.grid.selenium.proxy.DefaultRemoteProxy')
|
||||
browser_name = default_web_browser if mobile_web_test else 'android'
|
||||
create_node_config(avd_name, browser_name, appium_host, appium_port, selenium_host, selenium_port,
|
||||
selenium_timeout)
|
||||
selenium_timeout, selenium_proxy_class)
|
||||
cmd += ' --nodeconfig {file}'.format(file=CONFIG_FILE)
|
||||
except ValueError as v_err:
|
||||
logger.error(v_err)
|
||||
@@ -160,7 +162,7 @@ def appium_run(avd_name: str):
|
||||
|
||||
|
||||
def create_node_config(avd_name: str, browser_name: str, appium_host: str, appium_port: int, selenium_host: str,
|
||||
selenium_port: int, selenium_timeout: int):
|
||||
selenium_port: int, selenium_timeout: int, selenium_proxy_class: str):
|
||||
"""
|
||||
Create custom node config file in json format to be able to connect with selenium server.
|
||||
|
||||
@@ -170,6 +172,7 @@ def create_node_config(avd_name: str, browser_name: str, appium_host: str, appiu
|
||||
:param selenium_host: Host where selenium server is running
|
||||
:param selenium_port: Port number where selenium server is running
|
||||
:param selenium_timeout: Selenium session timeout in seconds
|
||||
:param selenium_proxy_class: Selenium Proxy class created in Selenium hub
|
||||
"""
|
||||
config = {
|
||||
'capabilities': [
|
||||
@@ -185,11 +188,11 @@ def create_node_config(avd_name: str, browser_name: str, appium_host: str, appiu
|
||||
'configuration': {
|
||||
'cleanUpCycle': 2000,
|
||||
'timeout': selenium_timeout,
|
||||
'proxy': 'org.openqa.grid.selenium.proxy.DefaultRemoteProxy',
|
||||
'proxy': selenium_proxy_class,
|
||||
'url': 'http://{host}:{port}/wd/hub'.format(host=appium_host, port=appium_port),
|
||||
'host': appium_host,
|
||||
'port': appium_port,
|
||||
'maxSession': 6,
|
||||
'maxSession': 1,
|
||||
'register': True,
|
||||
'registerCycle': 5000,
|
||||
'hubHost': selenium_host,
|
||||
|
||||
@@ -58,7 +58,8 @@ class TestAppium(TestCase):
|
||||
def test_config_creation(self):
|
||||
from src import CONFIG_FILE
|
||||
self.assertFalse(os.path.exists(CONFIG_FILE))
|
||||
app.create_node_config('test', 'android', '127.0.0.1', 4723, '127.0.0.1', 4444, 30)
|
||||
app.create_node_config('test', 'android', '127.0.0.1', 4723, '127.0.0.1', 4444, 30,
|
||||
'org.openqa.grid.selenium.proxy.DefaultRemoteProxy')
|
||||
self.assertTrue(os.path.exists(CONFIG_FILE))
|
||||
os.remove(CONFIG_FILE)
|
||||
|
||||
|
||||
+18
-11
@@ -31,13 +31,6 @@ function install_google_play () {
|
||||
adb install -r "/root/google_play_store.apk"
|
||||
}
|
||||
|
||||
function disable_animation () {
|
||||
# To improve performance
|
||||
adb shell "settings put global window_animation_scale 0.0"
|
||||
adb shell "settings put global transition_animation_scale 0.0"
|
||||
adb shell "settings put global animator_duration_scale 0.0"
|
||||
}
|
||||
|
||||
function enable_proxy_if_needed () {
|
||||
if [ "$ENABLE_PROXY_ON_EMULATOR" = true ]; then
|
||||
if [ ! -z "${HTTP_PROXY// }" ]; then
|
||||
@@ -56,9 +49,24 @@ function enable_proxy_if_needed () {
|
||||
adb root
|
||||
|
||||
echo "Set up the Proxy"
|
||||
adb shell "content update --uri content://telephony/carriers --bind proxy:s:"0.0.0.0" --bind port:s:"0000" --where "mcc=310" --where "mnc=260""
|
||||
sleep 5
|
||||
adb shell "content update --uri content://telephony/carriers --bind proxy:s:"${p[0]}" --bind port:s:"${p[1]}" --where "mcc=310" --where "mnc=260""
|
||||
|
||||
|
||||
if [ ! -z "${HTTP_PROXY_USER}" ]; then
|
||||
sleep 2
|
||||
adb shell "content update --uri content://telephony/carriers --bind user:s:"${HTTP_PROXY_USER}" --where "mcc=310" --where "mnc=260""
|
||||
fi
|
||||
if [ ! -z "${HTTP_PROXY_PASSWORD}" ]; then
|
||||
sleep 2
|
||||
adb shell "content update --uri content://telephony/carriers --bind password:s:"${HTTP_PROXY_PASSWORD}" --where "mcc=310" --where "mnc=260""
|
||||
fi
|
||||
|
||||
adb unroot
|
||||
|
||||
# Mobile data need to be restarted for Android 10 or higher
|
||||
adb shell svc data disable
|
||||
adb shell svc data enable
|
||||
else
|
||||
echo "Please use http:// in the beginning!"
|
||||
fi
|
||||
@@ -69,9 +77,8 @@ function enable_proxy_if_needed () {
|
||||
fi
|
||||
}
|
||||
|
||||
enable_proxy_if_needed
|
||||
sleep 1
|
||||
change_language_if_needed
|
||||
sleep 1
|
||||
enable_proxy_if_needed
|
||||
sleep 1
|
||||
install_google_play
|
||||
disable_animation
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Bash version should >= 4 to be able to run this script.
|
||||
|
||||
if [ -z "$TRAVIS_TAG" ]; then
|
||||
echo "UNIT TEST ONLY"
|
||||
bash release.sh test all all 0.1
|
||||
else
|
||||
if [ ! -z "$ANDROID_VERSION" ]; then
|
||||
echo "Log in to docker hub"
|
||||
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
|
||||
echo "[Version: $ANDROID_VERSION] RUN UNIT TEST, BUILD DOCKER IMAGES AND PUSH THOSE TO DOCKER HUB"
|
||||
bash release.sh all $ANDROID_VERSION $TRAVIS_TAG
|
||||
elif [ ! -z "$REAL_DEVICE" ]; then
|
||||
echo "[SUPPORT FOR REAL DEVICE: BUILD DOCKER IMAGES AND PUSH THOSE TO DOCKER HUB ]"
|
||||
bash release_real.sh all $TRAVIS_TAG
|
||||
elif [ ! -z "$GENYMOTION" ]; then
|
||||
echo "[SUPPORT FOR GENYMOTION: BUILD DOCKER IMAGES AND PUSH THOSE TO DOCKER HUB ]"
|
||||
bash release_genymotion.sh all $TRAVIS_TAG
|
||||
fi
|
||||
echo "Log out of docker hub"
|
||||
docker logout
|
||||
fi
|
||||
Reference in New Issue
Block a user