Cette page résume l’utilisation d’images docker utilisées en TP
Pour Android, je propose une image de base :Android qui contient le sdk de base. Elle doit être spécialisée et permet de créer simplement une configuration personnalisée. Je propose aussi des configurations “complètes”.
L’application exemple sera dans /tmp/app
et le cache gradle dans /tmp/user
. Sur le réseau filaire du campus les variables UTLN_USERNAME et UTLN_PASSWORD doivent être complétée sinon toutes les références au proxy peuvent être supprimées. L’application exemple est générée à partir de la commande android
(la commande sed
est utilisée pour adpater l’exemple à la version du plugin android).
mkdir -p /tmp/app mkdir -p /tmp/user export UTLN_USERNAME= export UTLN_PASSWORD= export http_proxy=http://${UTLN_USERNAME}:${UTLN_PASSWORD}@proxy.univ-tln.fr:3128 docker pull brunoe-docker.lsis.univ-tln.fr:443/brunoe/androidsdk:24 (ou docker pull brunoe-docker.lsis.univ-tln.fr:443/brunoe/androidsdk:24.0.2-ee7a9ae-53 pour garantir la répétabilité) docker run -it --rm --user `id -u` \ -v /tmp/app:/usr/src/app \ -v /tmp/user:/home/user \ brunoe-docker.lsis.univ-tln.fr:443/brunoe/androidsdk:24 \ android create project \ --name androidtest \ --target android-24 \ --package fr.univtln.bruno.androidtest \ --path /usr/src/app/androidtest \ --activity MainActivity --gradle --gradle-version 2.1.3 sed -i \ -e 's/\/gradle.*\.zip$/\/gradle-2.14.1-all.zip/' \ /tmp/app/androidtest/gradle/wrapper/gradle-wrapper.properties sed -i \ -e 's/runProguard/minifyEnabled/' \ /tmp/app/androidtest/build.gradle
Il est possible de compiler directement (la bonne version de gradle est téléchargée la première fois ainsi que les dépendances maven) :
docker run \ -e "http_proxy=$http_proxy" \ -e "https_proxy=$http_proxy" \ -it --rm --user `id -u` \ -v /tmp/app:/usr/src/app \ -v /tmp/user:/home/user \ -w /usr/src/app/androidtest \ brunoe-docker.lsis.univ-tln.fr:443/brunoe/androidsdk:24 \ ./gradlew \ -Dhttp.proxyHost=proxy.univ-tln.fr -Dhttp.proxyPort=3128 \ -Dhttp.proxyUser=${UTLN_USERNAME} -Dhttp.proxyPassword=${UTLN_PASSWORD} \ -Dhttps.proxyHost=proxy.univ-tln.fr -Dhttps.proxyPort=3128 \ -Dhttps.proxyUser=${UTLN_USERNAME} -Dhttps.proxyPassword=${UTLN_PASSWORD} \ -Duser.home=/home/user \ assemble
Il est aussi possible d’utiliser le démon de Gradle pour accélérer la compilation.
touch /tmp/user/gradle.properties \ && echo "org.gradle.daemon=true" >> /tmp/user/gradle.properties \ && echo "org.gradle.jvmargs=-Xmx2048M" >> /tmp/user/gradle.properties docker run --rm -it --user `id -u`\ -e "http_proxy=$http_proxy" \ -e "https_proxy=$http_proxy" \ -v /tmp/app:/usr/src/app \ -v /tmp/user:/home/user \ -w /usr/src/app/androidtest \ brunoe-docker.lsis.univ-tln.fr:443/brunoe/androidsdk:24 \ ./gradlew \ -Dhttp.proxyHost=proxy.univ-tln.fr -Dhttp.proxyPort=3128 \ -Dhttp.proxyUser=${UTLN_USERNAME} -Dhttp.proxyPassword=${UTLN_PASSWORD} \ -Dhttps.proxyHost=proxy.univ-tln.fr -Dhttps.proxyPort=3128 \ -Dhttps.proxyUser=${UTLN_USERNAME} -Dhttps.proxyPassword=${UTLN_PASSWORD} \ -Duser.home=/home/user \ bash
On peut ensuite utiliser ./gradlew assemble
dans le shell du conteneur.
Pour utiliser adb depuis docker il faut vérifier que le démon adb ne tourne pas sur l’hôte.
docker run \ -it --rm --privileged -v /dev/bus/usb:/dev/bus/usb \ brunoe-docker.lsis.univ-tln.fr:443/brunoe/android adb devices
docker run \ -it --rm --privileged \ -v /dev/bus/usb:/dev/bus/usb \ -v /tmp/app:/usr/src/app \ -v /tmp/user:/home/user \ -w /usr/src/app/androidtest \ brunoe-docker.lsis.univ-tln.fr:443/brunoe/android \ adb install -r `find /tmp/app -name *-debug.apk|cut -d '/' -f 5-`