Dockers Images

Images Docker

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”.

Un SDK "complet"

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-`