You can setup your own CI server with real devices on gitlab with these scripts and setups. I found this issues that are common between any CI server:
- Copy env/secret variables to local project before each run.
- Run commands on every device connected.
- Run tests with test coverage and see it inside gitlab-ci.
- Install app dependencies before each run if needed.
- You need to setup (How to) your gitlab runner executor to
shellto make it run processes “natively” instead of start a new Docker instance for every test.
1. Gitlab will run everything you put in
.gitlab-ci.yml, check this sample:
- I use spoon to run UI tests, update the gradle task in case you use another thing.
- All scripts in
scripts/will be explained in 3. .
2. Android project setup:
Setup code coverage, tests and spoon:
Setup jacoco tasks to generate code coverage files:
Setup tests to print each test result (to see in the job results which ones failed)
3. Usefull scripts:
Install your project dependencies on the machine by terminal:
Run the same command on every connected device (avoid INSTALL_FAILED_UPDATE_INCOMPATIBLE)
Copy every env/secret variable into
gradle.propertesfile inside the project (gmaps key or something like that)
NOTE: you can use
System.getenv("VAR_NAME") in your gradle files if you dont need a local
.properties file for your project. (thanks to reddit/Atraac)
- “Free” testing farm (your own devices, maybe uncle/grandmother/mom old devices).
- “Free” Parallel Job Executions based on your machine (you can setup your gitlab-ci runner to allow this).
- “Secure” handling of signing keys (it depends to you).
- “Secure” handling of services config keys (like google console config jsons).
- Fastest test/build/everything jobs since gradle daemon can run in your machine (on CircleCi/Travis/Etc you need to disable it since they start a new virtual machine for every test).
Now enjoy a happy android dev :)