这篇文章以Android SDK 26.1.1 和gradle 5.4.1为例(在前面使用Android Studio 3.5.3的示例应用中所使用的版本),介绍如何安卓应用构建的容器化方式。
FROM liumiaocn/android:sdk.26.1.1 COPY Demo/ /data/Demo RUN /data/Demo/gradlew --version
Dockerfile说明:
- 使用Android SDK 26.1.1版本作为基础镜像
- 将示例应用拷贝至/data/Demo下
- 执行gradlew --version从而初始化gradle在当前用户下的安装,后续直接使用此镜像可不再需要下载
Demo应用:https://github.com/liumiaocn/easypack/tree/master/containers/standard/android/Demo
镜像下载下载命令:docker pull liumiaocn/android:sdk.26.1.1.gradlew.5.4.1
版本确认liumiaocn:android liumiao$ docker run --rm liumiaocn/android:sdk.26.1.1.gradlew.5.4.1 /data/Demo/gradlew --version ------------------------------------------------------------ Gradle 5.4.1 ------------------------------------------------------------ Build time: 2019-04-26 08:14:42 UTC Revision: 261d171646b36a6a28d5a19a69676cd098a4c19d Kotlin: 1.3.21 Groovy: 2.5.4 Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018 JVM: 1.8.0_232 (Oracle Corporation 25.232-b09) OS: Linux 4.9.184-linuxkit amd64 liumiaocn:android liumiao$apk构建
liumiaocn:android liumiao$ docker run --rm -it liumiaocn/android:sdk.26.1.1.gradlew.5.4.1 sh # cd /data/Demo # ls Demo.iml app build.gradle gradle gradle.properties gradlew gradlew.bat keyReleaseV2.jks local.properties settings.gradle # find . -type f |grep apk # ./gradlew assembleRelease Starting a Gradle Daemon (subsequent builds will be faster) > Task :app:lintVitalRelease Calling mockable JAR artifact transform to create file: /root/.gradle/caches/transforms-2/files-2.1/053686f578beda34f83b61a336b8111f/android.jar with input /usr/local/android/platforms/android-29/android.jar Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0. Use '--warning-mode all' to show the individual deprecation warnings. See https://docs.gradle.org/5.4.1/userguide/command_line_interface.html#sec:command_line_warnings BUILD SUCCESSFUL in 1m 41s 26 actionable tasks: 26 executed # find . -type f |grep apk ./app/build/intermediates/apk_list/release/mainApkListPersistenceRelease/apk-list.gson ./app/build/outputs/apk/release/app-release.apk ./app/build/outputs/apk/release/output.json #总结
如果项目本身自带gradlew的使用方式,实际上可以考虑不必在镜像中安装gradle,因为gradlew本身包含gradle的安装,目前gradlew的使用方式,首次必须使用zip包,此包要么从公网下载,要们本地提供,没有提供指定已安装的gradle的根目录的方式,所以本文的方式是直接在镜像构成时提供gradlew所需要的gradle环境,后续再执行时即可不必下载和设定gradle了。