|
|
# Quick Setup Guide (Android & iOS)
|
|
|
|
|
|
## Android
|
|
|
|
|
|
* [Reference](https://bugfender.com/blog/how-to-add-your-first-android-job-to-jenkins/)
|
|
|
|
|
|
### Prerequisite
|
|
|
|
|
|
* Java 8 SDK
|
|
|
|
|
|
```sh
|
|
|
$ sudo apt-get install java-8-openjdk
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
* snapd
|
|
|
|
|
|
```sh
|
|
|
$ sudo apt install snapd
|
|
|
|
|
|
# this will change Java jdk to 11java
|
|
|
$ sudo apt install android-sdk
|
|
|
|
|
|
|
|
|
|
|
|
/home/AccountName/Android/Sdk
|
|
|
|
|
|
/usr/lib/android-sdk
|
|
|
|
|
|
/Library/Android/sdk/
|
|
|
|
|
|
/Users/[USER]/Library/Android/sdk
|
|
|
|
|
|
wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip
|
|
|
unzip commandlinetools-linux-6609375_latest.zip -d cmdline-tools
|
|
|
sudo mv cmdline-tools $ANDROID_HOME/
|
|
|
export PATH=$ANDROID_HOME/cmdline-tools/tools/bin:$PATH
|
|
|
|
|
|
sudo /usr/lib/android-sdk/cmdline-tools/tools/bin/sdkmanager --licenses
|
|
|
|
|
|
$ sudo ./gradlew assembleRelease
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
* Android SDK
|
|
|
|
|
|
```sh
|
|
|
sudo apt-get install unzip
|
|
|
|
|
|
# here you paste the link you grabbed in the developer.android.com site
|
|
|
|
|
|
sudo -iu jenkins wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
|
|
|
|
|
|
sudo -iu jenkins mkdir android-sdk
|
|
|
|
|
|
sudo -iu jenkins unzip sdk-tools-linux-3859397.zip -d android-sdk
|
|
|
|
|
|
# this step is important to accept the Android SDK license
|
|
|
|
|
|
yes |sudo -iu jenkins android-sdk/tools/bin/sdkmanager --licenses
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
* Android Emulator (Integration Test)
|
|
|
|
|
|
```sh
|
|
|
# Download emulator
|
|
|
$ sudo -iu jenkins android-sdk/tools/bin/sdkmanager --list --verbose
|
|
|
|
|
|
# create Android Virtual Device instance
|
|
|
$ echo no | $ANDROID_SDK_ROOT/tools/bin/avdmanager -v create avd --force --package 'system-images;android-25;google_apis;armeabi-v7a' --name Android25 --tag google_apis --abi armeabi-v7a
|
|
|
|
|
|
# install Android Emulator as service (Using Supervisor)
|
|
|
$ sudo apt-get install supervisor
|
|
|
|
|
|
# apply configuration file
|
|
|
$ sudo service supervisor restart
|
|
|
|
|
|
$ sudo -iu jenkins android-sdk/platform-tools/adb devices
|
|
|
```
|
|
|
|
|
|
* `Supervisord` configuration file `/etc/supervisor/conf.d/emulator.conf` to run emulator as service
|
|
|
|
|
|
```ini
|
|
|
[program:emulator]
|
|
|
|
|
|
command=/var/lib/jenkins/android-sdk/emulator/emulator -avd Android25 -no-window -noaudio -no-boot-anim -accel on -ports 5556,5557
|
|
|
|
|
|
autostart=true
|
|
|
|
|
|
user=jenkins
|
|
|
|
|
|
environment=ANDROID_SDK_ROOT=/var/lib/jenkins/android-sdk
|
|
|
```
|
|
|
|
|
|
* Jenkins Script for running integration test
|
|
|
|
|
|
```text
|
|
|
ANDROID_SERIAL=emulator-5556
|
|
|
|
|
|
# wait for emulator to be up and fully booted, unlock screen
|
|
|
|
|
|
$ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done; input keyevent 82'
|
|
|
|
|
|
./gradlew connectedAndroidTest
|
|
|
```
|
|
|
|
|
|
### Jenkins build
|
|
|
|
|
|
* Once you have the source code in Jenkins, it’s time to build. If your project has a Gradle wrapper, that’s what you should use
|
|
|
* Task :
|
|
|
|
|
|
* `assembleDebug`: APK Debug build
|
|
|
* `assembleRelease` : APK release build
|
|
|
* `bundleRelease`: [Bundle APK release](https://developer.android.com/guide/app-bundle) Size Limit : 150MB
|
|
|
* [info](https://medium.com/androiddevelopers/building-your-first-app-bundle-bbcd228bf631)
|
|
|
|
|
|
* [Signing bundle](https://medium.com/androiddevelopers/building-your-first-app-bundle-bbcd228bf631)
|
|
|
|
|
|
* ```sh
|
|
|
$ jarsigner -keystore $pathToKeystore app-release.aab $keyAlias
|
|
|
```
|
|
|
|
|
|
* ```
|
|
|
In android studio, to generate signed bundle
|
|
|
Build => Generate Signed Bundle / APK
|
|
|
```
|
|
|
|
|
|
* Flutter
|
|
|
|
|
|
* `flutter build apk` will output to `./build\app\outputs\apk\release`
|
|
|
|
|
|
* `flutter build appbundle` will generated a publishing format aab
|
|
|
|
|
|
```sh
|
|
|
# build\app\outputs\bundle\release\app-release.apk
|
|
|
$ flutter build apk
|
|
|
|
|
|
# build\app\outputs\bundle\release\app-release.aab
|
|
|
$ flutter build appbundle
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Next
|
|
|
|
|
|
* Automate app signing & publishing
|
|
|
|
|
|
* Improve build time (Accelerated Gradle Build)
|
|
|
|
|
|
```sh
|
|
|
$ mkdir -p /var/lib/jenkins/.gradle
|
|
|
|
|
|
$ echo org.gradle.daemon=true | sudo -iu jenkins tee -a /var/lib/jenkins/.gradle/gradle.properties
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Configure Jenkins
|
|
|
|
|
|
* Go to Manage Jenkins > Configure System
|
|
|
* Check “Environment variables”
|
|
|
* Add Name: ANDROID_HOME
|
|
|
* Add Value: /var/lib/jenkins/android-sdk
|
|
|
* Click “Apply” then “Save”
|
|
|
|
|
|
|
|
|
|
|
|
# IOS
|
|
|
|
|
|
* [Reference](https://bugfender.com/blog/how-to-add-your-first-ios-job-to-jenkins/)
|
|
|
|
|
|
### Prerequiste
|
|
|
|
|
|
* Apple Mac H/W
|
|
|
|
|
|
* Xcode
|
|
|
|
|
|
```sh
|
|
|
$ xcode-select --install
|
|
|
```
|
|
|
|
|
|
### Sample script
|
|
|
|
|
|
* Build Script
|
|
|
|
|
|
```text
|
|
|
cd Example # again, we need to move directory
|
|
|
|
|
|
mkdir -p output # this directory will contain the output of the tests
|
|
|
|
|
|
xcrun xcodebuild -workspace BugfenderExample.xcworkspace \
|
|
|
|
|
|
-scheme "BugfenderExample" \
|
|
|
|
|
|
-sdk iphonesimulator \
|
|
|
|
|
|
-destination 'platform=iOS Simulator,name=iPhone 6,OS=10.0' \
|
|
|
|
|
|
-derivedDataPath './output' \
|
|
|
|
|
|
test
|
|
|
```
|
|
|
|
|
|
|