Compare commits

...
50 Commits
Author SHA1 Message Date
butomo1989 1d7121c41b Merge branch 'master' of github.com:butomo1989/docker-android 2021-01-08 08:34:25 +01:00
butomo1989 0a1758091f Updated base image 2021-01-08 08:34:06 +01:00
Budi UtomoandGitHub eb045aa644 Merge pull request #270 from jnvillar/patch-1
Update README_VMWARE.md
2021-01-07 10:42:00 +01:00
Juan Ignacio Noli VillarandGitHub e5a9fe7031 Update README_VMWARE.md 2020-12-17 10:49:08 -03:00
butomo1989 fdb464781a Added monitoring section 2020-09-02 11:33:07 +02:00
Budi UtomoandGitHub 2e5237ec80 Merge pull request #260 from yintro4ha/master
Able to add proxy user and password on Android emulator
2020-08-27 12:56:15 +02:00
yintro4haandGitHub b1f9ec5e79 Merge pull request #1 from yintro4ha/add-proxy-auth
Update utils.sh
2020-08-24 15:14:00 +08:00
yintro4haandGitHub 1ac4a6484e Update README_CUSTOM_CONFIG.md
Add document for new proxy auth variable
2020-08-24 15:10:03 +08:00
yintro4haandGitHub f09e38c92c Update utils.sh
Add Variable: 
1. HTTP_PROXY_USER
2. HTTP_PROXY_PASSWORD
2020-08-24 15:05:22 +08:00
butomo1989 e051faf84a Updated the base image 2020-07-31 10:51:08 +02:00
butomo1989 2461a6e832 Restart mobile data for specific version 2020-07-23 17:26:36 +02:00
butomo1989 20120f5c0a Added stargazers 2020-07-22 09:12:27 +02:00
butomo1989 6a0f135247 Typo 2020-07-17 14:59:21 +02:00
butomo1989 b36847817d Enable Animation 2020-07-17 14:58:17 +02:00
butomo1989 0196d23103 Switched the order because of bug on Android 10 or higher 2020-07-17 14:57:20 +02:00
butomo1989 01d1c663c1 Updated documentation 2020-07-14 09:54:31 +02:00
butomo1989 5b8ef77bba Updated link 2020-07-14 09:53:05 +02:00
butomo1989 3b3746fff3 Updated security link 2020-07-14 09:52:38 +02:00
butomo1989 d9ba33c9fa Renamed 2020-07-14 09:50:31 +02:00
butomo1989 94132acf41 Updated user statistics 2020-07-14 09:47:13 +02:00
butomo1989 86e7e0f8e5 Updated ga lines 2020-07-13 14:59:51 +02:00
butomo1989 77a1216730 Added docker-android users statistics 2020-07-13 14:20:51 +02:00
butomo1989 56e01002da Added Android 11.0 into travis configuration 2020-07-13 14:10:42 +02:00
butomo1989 287378162f Updated base image 2020-07-13 13:04:49 +02:00
butomo1989 8affae0fa1 Added Android 11.0 2020-07-13 13:03:58 +02:00
Budi UtomoandGitHub ca28b7ad10 Merge pull request #253 from analogue/update_readme_no_google_play
Update README to call out that google play store not installed
2020-07-12 18:54:47 +02:00
Budi UtomoandGitHub edebdfd380 Merge branch 'master' into update_readme_no_google_play 2020-07-12 18:46:08 +02:00
Budi UtomoandGitHub ddf0a451c9 Merge pull request #252 from analogue/fix_crashing_when_run_by_default_as_root_user
Workaround for "Running as root without --no-sandbox is not supported"
2020-07-12 18:45:40 +02:00
analogue fcc439b938 Update README to call out that play store not installed 2020-07-12 10:55:39 -05:00
analogue 68ac0c42ce Workaround crashing when run by default as root user 2020-07-12 09:56:22 -05:00
butomo1989 666d3eaee6 [Fixed issue in codacy] Using correct operator 2020-07-02 14:24:52 +02:00
butomo1989 ecfaf236b9 [Fixed issue in codacy] Added semi-colon 2020-07-02 14:24:18 +02:00
butomo1989 a5714c805d Fixed quote 2020-07-02 14:19:51 +02:00
butomo1989 9eb4b3c595 Fixed link 2020-07-02 14:18:17 +02:00
butomo1989 0389f64365 Removed duplicated note 2020-07-02 14:17:30 +02:00
butomo1989 ba476eb993 Merge branch 'master' of github.com:butomo1989/docker-android 2020-07-02 14:16:18 +02:00
butomo1989 9b2bc985e0 Added sample config of nginx 2020-07-02 14:16:02 +02:00
Budi UtomoandGitHub 1a9b9361e6 Merge pull request #248 from p0vidl0/master
Add selenium session timeout configuration via environment variable
2020-07-02 09:16:28 +02:00
Budi UtomoandGitHub abdb45ea0b Merge branch 'master' into master 2020-07-01 11:19:06 +02:00
butomo1989 b9d6237eb4 Added example to pass password through url 2020-07-01 11:06:05 +02:00
butomo1989 5936037a56 Removed unused lines 2020-06-26 16:02:58 +02:00
butomo1989 0460a62956 Added example of using nginx 2020-06-26 16:01:12 +02:00
Aleksandr Kalashnikov 6403ff78be Add selenium session timeout configuration via environment variable 2020-06-26 10:17:08 +06:00
butomo1989 7ad2eb45c8 Able to have pass in vnc 2020-06-18 16:08:48 +02:00
butomo1989 ea5661fa41 Added note 2020-06-17 17:14:57 +02:00
butomo1989 f323d29aa4 Fixed build issue for API 28 2020-06-17 17:14:50 +02:00
butomo1989 eec0c5df02 Fixed build issue for API 28 2020-06-17 12:21:36 +02:00
butomo1989 b66c5d122a Disabled apklinker 2020-05-08 15:03:47 +02:00
butomo1989 8289bc166f Using Appium 1.17.1 2020-05-08 14:18:14 +02:00
butomo1989 d1e9f7472b Added sponsor link 2020-04-25 09:08:24 +02:00
23 changed files with 283 additions and 32 deletions
+17
View File
@@ -0,0 +1,17 @@
# These are supported funding model platforms
# Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
github: [budtmo]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
# Bitcoin (BTC)
custom:
- "paypal.me/budtmo"
+1
View File
@@ -20,6 +20,7 @@ env:
- ANDROID_VERSION=8.1 - ANDROID_VERSION=8.1
- ANDROID_VERSION=9.0 - ANDROID_VERSION=9.0
- ANDROID_VERSION=10.0 - ANDROID_VERSION=10.0
- ANDROID_VERSION=11.0
- REAL_DEVICE=True - REAL_DEVICE=True
- GENYMOTION=True - GENYMOTION=True
+1 -1
View File
@@ -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. 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? ## 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 ## 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. 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.
+19 -4
View File
@@ -52,6 +52,7 @@ List of Docker images
|Linux|8.1|27|chrome|61.0|2.33|budtmo/docker-android-x86-8.1|[![](https://images.microbadger.com/badges/image/budtmo/docker-android-x86-8.1.svg)](https://microbadger.com/images/budtmo/docker-android-x86-8.1 "Get your own image badge on microbadger.com")| |Linux|8.1|27|chrome|61.0|2.33|budtmo/docker-android-x86-8.1|[![](https://images.microbadger.com/badges/image/budtmo/docker-android-x86-8.1.svg)](https://microbadger.com/images/budtmo/docker-android-x86-8.1 "Get your own image badge on microbadger.com")|
|Linux|9.0|28|chrome|66.0|2.40|budtmo/docker-android-x86-9.0|[![](https://images.microbadger.com/badges/image/budtmo/docker-android-x86-9.0.svg)](https://microbadger.com/images/budtmo/docker-android-x86-9.0 "Get your own image badge on microbadger.com")| |Linux|9.0|28|chrome|66.0|2.40|budtmo/docker-android-x86-9.0|[![](https://images.microbadger.com/badges/image/budtmo/docker-android-x86-9.0.svg)](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://images.microbadger.com/badges/image/budtmo/docker-android-x86-10.0.svg)](https://microbadger.com/images/budtmo/docker-android-x86-10.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://images.microbadger.com/badges/image/budtmo/docker-android-x86-10.0.svg)](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://images.microbadger.com/badges/image/budtmo/docker-android-x86-11.0.svg)](https://microbadger.com/images/budtmo/docker-android-x86-11.0 "Get your own image badge on microbadger.com")|
|All |-|-|-|-|-|budtmo/docker-android-real-device|[![](https://images.microbadger.com/badges/image/budtmo/docker-android-real-device.svg)](https://microbadger.com/images/budtmo/docker-android-real-device "Get your own image badge on microbadger.com")| |All |-|-|-|-|-|budtmo/docker-android-real-device|[![](https://images.microbadger.com/badges/image/budtmo/docker-android-real-device.svg)](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://images.microbadger.com/badges/image/budtmo/docker-android-genymotion.svg)](https://microbadger.com/images/budtmo/docker-android-genymotion "Get your own image badge on microbadger.com")| |All|All|All|All|All|All|budtmo/docker-android-genymotion|[![](https://images.microbadger.com/badges/image/budtmo/docker-android-genymotion.svg)](https://microbadger.com/images/budtmo/docker-android-genymotion "Get your own image badge on microbadger.com")|
@@ -101,7 +102,7 @@ Quick Start
- For different OS, localhost should work. - For different OS, localhost should work.
3. Open ***http://docker-host-ip-address:6080*** from web browser. 3. Open ***http://docker-host-ip-address:6080*** from web browser. Note: Adding ```?view_only=true``` will give user only view only permission.
Custom configurations Custom configurations
--------------------- ---------------------
@@ -208,8 +209,7 @@ SMS Simulation
Google Play Services and Google Play Store Google Play Services and Google Play Store
------------------------------------------ ------------------------------------------
Not installed at this time.
Docker-Android contains Google Play Service (v12.8.74) and Google Play Store (v11.0.50). Both applications are downloaded from [apklinker](https://www.apklinker.com/), so please be aware of it in case you use private/company account to that applications.
Jenkins Jenkins
------- -------
@@ -249,7 +249,22 @@ The Emulator skins are taken from [Android Studio IDE](https://developer.android
Security 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/) All docker images are protected by [Polyverse](https://polyverse.io/) by scrambling the Linux packages. For more information please visit [this link](https://youtu.be/eSZNP42n-pM)
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.
[![ga-datastudio-docker-android](./images/docker-android_users.png)](https://datastudio.google.com/s/ht7HVKHKAQE)
Stargazers over time
--------------------
[![Stargazers over time](https://starchart.cc/budtmo/docker-android.svg)](https://starchart.cc/budtmo/docker-android)
Special Thanks Special Thanks
-------------- --------------
+1
View File
@@ -24,6 +24,7 @@ It is also possible to connect appium server that run inside docker-android with
- APPIUM_PORT=\<port\_number> - APPIUM_PORT=\<port\_number>
- SELENIUM_HOST="\<host\_ip\_address>" - SELENIUM_HOST="\<host\_ip\_address>"
- SELENIUM_PORT=\<port\_number> - SELENIUM_PORT=\<port\_number>
- SELENIUM_TIMEOUT=\<timeout\_in\_seconds>
To run tests for mobile browser, following parameter can be passed: To run tests for mobile browser, following parameter can be passed:
+19
View File
@@ -1,3 +1,8 @@
VNC pass
--------
Passing ```VNC_PASSWORD="your_pass_here"``` will secure your vnc connection.
Proxy Proxy
----- -----
@@ -8,6 +13,15 @@ You can enable proxy inside container and Android emulator by passing following
- NO_PROXY="localhost" - NO_PROXY="localhost"
- ENABLE_PROXY_ON_EMULATOR=true - ENABLE_PROXY_ON_EMULATOR=true
Proxy with authentication
----
You can set proxy with authentication by passing following environment variable:
- HTTP_PROXY_USER="\<username>"
- HTTPS_PROXY_PASSWORD="\<password>"
Language Language
-------- --------
@@ -72,3 +86,8 @@ docker run --privileged -d -p 6080:6080 -p 4723:4723 -p 5554:5554 -p 5555:5555 -
``` ```
For the first run, this will create a new avd and all the changes will be accessible in the `local_backup` directory. Now for all future runs, it will reuse the avds. Even this should work with new releases of `docker-android` For the first run, this will create a new avd and all the changes will be accessible in the `local_backup` directory. Now for all future runs, it will reuse the avds. Even this should work with new releases of `docker-android`
Nginx
-----
Sample nginx configuration can be found [here](nginx)
+10 -1
View File
@@ -38,10 +38,19 @@ The following instructions are used for OS X. You'll need [docker-machine-parall
![Enable nested virtualization for Parallels Desktop](images/parallels_enable_nested_virtualization.png) ![Enable nested virtualization for Parallels Desktop](images/parallels_enable_nested_virtualization.png)
4. Enable kvm inside virtual machine 4. Enable kvm inside virtual machine
4.0 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.1. Run as an account other than root to install kvm packages using tce-load. 4.1. Run as an account other than root to install kvm packages using tce-load.
```bash ```bash
# su docker # su docker
$ tce-load -wi kvm $ tce-load -wi kvm-4.19.10-tinycore64.tcz
``` ```
4.2. Run as root to load kvm module after kvm packages install. 4.2. Run as root to load kvm module after kvm packages install.
+10 -3
View File
@@ -1,4 +1,4 @@
FROM appium/appium:1.17.0-p0 FROM appium/appium:1.20.0-p0
LABEL maintainer "Budi Utomo <budtmo.os@gmail.com>" LABEL maintainer "Budi Utomo <budtmo.os@gmail.com>"
@@ -142,8 +142,8 @@ RUN wget -nv -O chrome.zip "https://chromedriver.storage.googleapis.com/${CHROME
#================================================================ #================================================================
# Download Google Play Services APK and Play Store from apklinker # Download Google Play Services APK and Play Store from apklinker
#================================================================ #================================================================
Run wget -nv -O google_play_services.apk "https://www.apklinker.com/wp-content/uploads/uploaded_apk/5b5155e5ef4f8/com.google.android.gms_${GOOGLE_PLAY_SERVICE}-020700-204998136_12874013_MinAPI21_(x86)(nodpi)_apklinker.com.apk" #Run wget -nv -O google_play_services.apk "https://www.apklinker.com/wp-content/uploads/uploaded_apk/5b5155e5ef4f8/com.google.android.gms_${GOOGLE_PLAY_SERVICE}-020700-204998136_12874013_MinAPI21_(x86)(nodpi)_apklinker.com.apk"
Run wget -nv -O google_play_store.apk "https://www.apklinker.com/wp-content/uploads/uploaded_apk/5b632b1164e31/com.android.vending_${GOOGLE_PLAY_STORE}-all-0-PR-206665793_81105000_MinAPI16_(armeabi,armeabi-v7a,mips,mips64,x86,x86_64)(240,320,480dpi)_apklinker.com.apk" #Run wget -nv -O google_play_store.apk "https://www.apklinker.com/wp-content/uploads/uploaded_apk/5b632b1164e31/com.android.vending_${GOOGLE_PLAY_STORE}-all-0-PR-206665793_81105000_MinAPI16_(armeabi,armeabi-v7a,mips,mips64,x86,x86_64)(240,320,480dpi)_apklinker.com.apk"
#================================================ #================================================
# noVNC Default Configurations # noVNC Default Configurations
@@ -171,6 +171,13 @@ ADD src/.fehbg /root/.fehbg
ADD src/rc.xml /etc/xdg/openbox/rc.xml ADD src/rc.xml /etc/xdg/openbox/rc.xml
RUN echo /root/.fehbg >> /etc/xdg/openbox/autostart RUN echo /root/.fehbg >> /etc/xdg/openbox/autostart
#======================
# Workarounds
#======================
# Fix emulator from crashing when running as root user.
# See https://github.com/budtmo/docker-android/issues/223
ENV QTWEBENGINE_DISABLE_SANDBOX=1
#=============== #===============
# Expose Ports # Expose Ports
#--------------- #---------------
+1 -1
View File
@@ -1,4 +1,4 @@
FROM appium/appium:1.17.0-p0 FROM appium/appium:1.20.0-p0
LABEL maintainer "Budi Utomo <budtmo.os@gmail.com>" LABEL maintainer "Budi Utomo <budtmo.os@gmail.com>"
+1 -1
View File
@@ -1,4 +1,4 @@
FROM appium/appium:1.17.0-p0 FROM appium/appium:1.20.0-p0
LABEL maintainer "Budi Utomo <budtmo.os@gmail.com>" LABEL maintainer "Budi Utomo <budtmo.os@gmail.com>"
Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

+16
View File
@@ -0,0 +1,16 @@
Nginx
-----
You can have one page which contains the list of running containers.
##### Quick Start
1. Run 2 docker-android containers which have port 6081 and 6082
2. Run docker-nginx
```
docker run -d --name nginx --network host -v $PWD/conf.d:/etc/nginx/conf.d nginx:1.18.0
```
3. Open [http://127.0.0.1](http://127.0.0.1) from Web-Browser to see the list of running containers OR open ```http://127.0.0.1/container-1/?nginx=&path=/container-1/websockify&view_only=true&password=secr3t``` to see specific container.
+11
View File
@@ -0,0 +1,11 @@
containers = '[\
{\
"No": "1", \
"Name": "Emulator 01", \
"VNC": "http://127.0.0.1/container-1/?nginx=&path=/container-1/websockify&view_only=true"\
}, \
{\
"No": "2", \
"Name": "Emulator 02", \
"VNC": "http://127.0.0.1/container-2/?nginx=&path=/container-2/websockify&view_only=true"\
}]';
+43
View File
@@ -0,0 +1,43 @@
server {
listen 80;
server_name _;
location / {
root /etc/nginx/conf.d;
index index.html;
}
location /container-1/ {
proxy_pass http://127.0.0.1:6081/;
}
location /container-1/websockify {
proxy_pass http://127.0.0.1:6081/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# VNC connection timeout
proxy_read_timeout 61s;
# Disable cache
proxy_buffering off;
}
location /container-2/ {
proxy_pass http://127.0.0.1:6082/;
}
location /container-2/websockify {
proxy_pass http://127.0.0.1:6082/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# VNC connection timeout
proxy_read_timeout 61s;
# Disable cache
proxy_buffering off;
}
}
+13
View File
@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>List of docker-android containers</title>
<link href="styles/main.css" type="text/css" rel="stylesheet">
</head>
<body>
<div id="showData"></div>
<script type="text/javascript" src="data/data.json"></script>
<script src="scripts/main.js" type="text/javascript"></script>
</body>
</html>
+55
View File
@@ -0,0 +1,55 @@
var devices = JSON.parse(containers);
var headers = [];
for (var pos = 0; pos < devices.length; pos++) {
for (var deviceKey in devices[pos]) {
// Check if key is already added to headers
if (headers.indexOf(deviceKey) === -1) {
headers.push(deviceKey);
}
}
}
// Create a table
var table = document.createElement("table");
// Insert table header
var tr = table.insertRow(-1);
for (var pos = 0; pos < headers.length; pos++) {
var th = document.createElement("th"); // TABLE HEADER.
var header = headers[pos];
th.innerHTML = header;
tr.appendChild(th);
}
// Insert table content
for (var pos = 0; pos < devices.length; pos++) {
tr = table.insertRow(-1);
for (var index = 0; index < headers.length; index++) {
var td = document.createElement("td");
var content = devices[pos][headers[index]];
if (index === 1) {
var link = document.createElement("a");
link.href = devices[pos][headers[index+1]];
link.innerHTML = content;
td.appendChild(link);
} else if (index === 2) {
var object = document.createElement("object");
object.type = "text/html";
object.data = content;
object.width = "950px";
object.height = "950px";
td.appendChild(object);
} else {
td.innerHTML = content;
}
tr.appendChild(td);
}
}
// Put the table inside div
var divContainer = document.getElementById("showData");
divContainer.innerHTML = "";
divContainer.appendChild(table);
+13
View File
@@ -0,0 +1,13 @@
th, td {
font:14px Verdana;
}
table, th, td
{
border: solid 1px #DDD;
border-collapse: collapse;
padding: 2px 3px;
text-align: center;
}
th {
font-weight:bold;
}
+13 -5
View File
@@ -10,7 +10,7 @@ else
fi fi
if [ -z "$2" ]; then 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|all): " ANDROID_VERSION 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
else else
ANDROID_VERSION=$2 ANDROID_VERSION=$2
fi fi
@@ -31,6 +31,7 @@ declare -A list_of_levels=(
[8.1]=27 [8.1]=27
[9.0]=28 [9.0]=28
[10.0]=29 [10.0]=29
[11.0]=30
) )
# The version of the Chrome browser installed on the Android emulator needs to be known beforehand # The version of the Chrome browser installed on the Android emulator needs to be known beforehand
@@ -45,6 +46,7 @@ declare -A chromedriver_versions=(
[8.1]="2.33" [8.1]="2.33"
[9.0]="2.40" [9.0]="2.40"
[10.0]="74.0.3729.6" [10.0]="74.0.3729.6"
[11.0]="83.0.4103.39"
) )
function get_android_versions() { function get_android_versions() {
@@ -147,10 +149,16 @@ function build() {
# It is because there is no ARM EABI v7a System Image for 6.0 # It is because there is no ARM EABI v7a System Image for 6.0
IMG_TYPE=google_apis IMG_TYPE=google_apis
BROWSER=browser BROWSER=browser
elif [ "$v" == "" ]; then
IMG_TYPE=google_apis
BROWSER=chrome
else 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 IMG_TYPE=google_apis
BROWSER=chrome BROWSER=chrome
if [ "$v" == "9.0" ]; then
processor=x86_64
fi
fi fi
echo "[BUILD] IMAGE TYPE: $IMG_TYPE" echo "[BUILD] IMAGE TYPE: $IMG_TYPE"
level=${list_of_levels[$v]} level=${list_of_levels[$v]}
@@ -159,8 +167,8 @@ function build() {
echo "[BUILD] System Image: $sys_img" echo "[BUILD] System Image: $sys_img"
chrome_driver="${chromedriver_versions[$v]}" chrome_driver="${chromedriver_versions[$v]}"
echo "[BUILD] chromedriver version: $chrome_driver" echo "[BUILD] chromedriver version: $chrome_driver"
image_version="$IMAGE-$processor-$v:$RELEASE" image_version="$IMAGE-x86-$v:$RELEASE"
image_latest="$IMAGE-$processor-$v:latest" image_latest="$IMAGE-x86-$v:latest"
echo "[BUILD] Image name: $image_version and $image_latest" echo "[BUILD] Image name: $image_version and $image_latest"
echo "[BUILD] Dockerfile: $FILE_NAME" echo "[BUILD] Dockerfile: $FILE_NAME"
docker build -t $image_version --build-arg TOKEN=$TOKEN --build-arg ANDROID_VERSION=$v --build-arg API_LEVEL=$level \ docker build -t $image_version --build-arg TOKEN=$TOKEN --build-arg ANDROID_VERSION=$v --build-arg API_LEVEL=$level \
@@ -174,8 +182,8 @@ function build() {
function push() { function push() {
# Push docker image(s) # Push docker image(s)
for v in "${versions[@]}"; do for v in "${versions[@]}"; do
image_version="$IMAGE-$processor-$v:$RELEASE" image_version="$IMAGE-x86-$v:$RELEASE"
image_latest="$IMAGE-$processor-$v:latest" image_latest="$IMAGE-x86-$v:latest"
echo "[PUSH] Image name: $image_version and $image_latest" echo "[PUSH] Image name: $image_version and $image_latest"
docker push $image_version docker push $image_version
docker push $image_latest docker push $image_latest
+6 -3
View File
@@ -148,8 +148,10 @@ def appium_run(avd_name: str):
appium_port = int(os.getenv('APPIUM_PORT', 4723)) appium_port = int(os.getenv('APPIUM_PORT', 4723))
selenium_host = os.getenv('SELENIUM_HOST', '172.17.0.1') selenium_host = os.getenv('SELENIUM_HOST', '172.17.0.1')
selenium_port = int(os.getenv('SELENIUM_PORT', 4444)) selenium_port = int(os.getenv('SELENIUM_PORT', 4444))
selenium_timeout = int(os.getenv('SELENIUM_TIMEOUT', 30))
browser_name = default_web_browser if mobile_web_test else 'android' 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) create_node_config(avd_name, browser_name, appium_host, appium_port, selenium_host, selenium_port,
selenium_timeout)
cmd += ' --nodeconfig {file}'.format(file=CONFIG_FILE) cmd += ' --nodeconfig {file}'.format(file=CONFIG_FILE)
except ValueError as v_err: except ValueError as v_err:
logger.error(v_err) logger.error(v_err)
@@ -158,7 +160,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, def create_node_config(avd_name: str, browser_name: str, appium_host: str, appium_port: int, selenium_host: str,
selenium_port: int): selenium_port: int, selenium_timeout: int):
""" """
Create custom node config file in json format to be able to connect with selenium server. Create custom node config file in json format to be able to connect with selenium server.
@@ -167,6 +169,7 @@ def create_node_config(avd_name: str, browser_name: str, appium_host: str, appiu
:param appium_port: Port number where where appium server is running :param appium_port: Port number where where appium server is running
:param selenium_host: Host where selenium server is running :param selenium_host: Host where selenium server is running
:param selenium_port: Port number where selenium server is running :param selenium_port: Port number where selenium server is running
:param selenium_timeout: Selenium session timeout in seconds
""" """
config = { config = {
'capabilities': [ 'capabilities': [
@@ -181,7 +184,7 @@ def create_node_config(avd_name: str, browser_name: str, appium_host: str, appiu
], ],
'configuration': { 'configuration': {
'cleanUpCycle': 2000, 'cleanUpCycle': 2000,
'timeout': 30, 'timeout': selenium_timeout,
'proxy': 'org.openqa.grid.selenium.proxy.DefaultRemoteProxy', 'proxy': 'org.openqa.grid.selenium.proxy.DefaultRemoteProxy',
'url': 'http://{host}:{port}/wd/hub'.format(host=appium_host, port=appium_port), 'url': 'http://{host}:{port}/wd/hub'.format(host=appium_host, port=appium_port),
'host': appium_host, 'host': appium_host,
+1 -1
View File
@@ -58,7 +58,7 @@ class TestAppium(TestCase):
def test_config_creation(self): def test_config_creation(self):
from src import CONFIG_FILE from src import CONFIG_FILE
self.assertFalse(os.path.exists(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) app.create_node_config('test', 'android', '127.0.0.1', 4723, '127.0.0.1', 4444, 30)
self.assertTrue(os.path.exists(CONFIG_FILE)) self.assertTrue(os.path.exists(CONFIG_FILE))
os.remove(CONFIG_FILE) os.remove(CONFIG_FILE)
+18 -11
View File
@@ -31,13 +31,6 @@ function install_google_play () {
adb install -r "/root/google_play_store.apk" 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 () { function enable_proxy_if_needed () {
if [ "$ENABLE_PROXY_ON_EMULATOR" = true ]; then if [ "$ENABLE_PROXY_ON_EMULATOR" = true ]; then
if [ ! -z "${HTTP_PROXY// }" ]; then if [ ! -z "${HTTP_PROXY// }" ]; then
@@ -56,9 +49,24 @@ function enable_proxy_if_needed () {
adb root adb root
echo "Set up the Proxy" 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"" 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 adb unroot
# Mobile data need to be restarted for Android 10 or higher
adb shell svc data disable
adb shell svc data enable
else else
echo "Please use http:// in the beginning!" echo "Please use http:// in the beginning!"
fi fi
@@ -69,9 +77,8 @@ function enable_proxy_if_needed () {
fi fi
} }
enable_proxy_if_needed
sleep 1
change_language_if_needed change_language_if_needed
sleep 1 sleep 1
enable_proxy_if_needed
sleep 1
install_google_play install_google_play
disable_animation
Executable
+13
View File
@@ -0,0 +1,13 @@
#!/bin/bash
vnc="/usr/bin/x11vnc -display ${DISPLAY} -forever -shared "
pass_path="/root/vncpass"
if [ ! -z "${VNC_PASSWORD}" ]; then
/usr/bin/x11vnc -storepasswd ${VNC_PASSWORD} ${pass_path}
param="-rfbauth ${pass_path}"
else
param="-nopw"
fi
${vnc}${param}
+1 -1
View File
@@ -17,7 +17,7 @@ stderr_logfile=%(ENV_LOG_PATH)s/openbox.stderr.log
priority=2 priority=2
[program:x11vnc] [program:x11vnc]
command=/usr/bin/x11vnc -display %(ENV_DISPLAY)s -nopw -forever -shared command=./src/vnc.sh
stdout_logfile=%(ENV_LOG_PATH)s/x11vnc.stdout.log stdout_logfile=%(ENV_LOG_PATH)s/x11vnc.stdout.log
stderr_logfile=%(ENV_LOG_PATH)s/x11vnc.stderr.log stderr_logfile=%(ENV_LOG_PATH)s/x11vnc.stderr.log
priority=2 priority=2