Android应用构建:16:使用gradle和Android SDK镜像构建安卓应用
发布日期:2021-06-30 20:16:03 浏览次数:2 分类:技术文章

本文共 5144 字,大约阅读时间需要 17 分钟。

在这里插入图片描述

这篇文章以Android SDK 26.1.1 和gradle 6.0.1为例,介绍如何安卓应用构建的容器化方式,前面文章介绍了gradle wrapper的使用方式,而本文方式则是固定gradle版本在镜像之中的方式,如果需要变动直接调整镜像的FROM生成新的构建镜像即可。

Dockerfile

#################################################################################IMAGE:   Android SDK#VERSION: 26.1.1#         Gradle: 6.0.1#         JDK     1.8################################################################################FROM liumiaocn/gradle:jdk8.6.0.1################################################################################MAINTAINER###############################################################################MAINTAINER LiuMiao 
################################################################################ENVIRONMENT VARS###############################################################################ENV ANDROID_HOME /usr/local/androidENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools################################################################################ install gradle ###############################################################################ARG SDK_ZIP_FILE=sdk-tools-linux-4333796.zipARG SDK_TOOLS_URL=https://dl.google.com/android/repository/${SDK_ZIP_FILE}RUN set -o errexit -o nounset \ && wget ${SDK_TOOLS_URL} \ && unzip ${SDK_ZIP_FILE} \ && mkdir -p ${ANDROID_HOME} \ && mv tools ${ANDROID_HOME} \ && cd ${ANDROID_HOME}/tools/bin \ && mkdir -p /root/.android \ && touch /root/.android/repositories.cfg \ && yes | sdkmanager --licenses \ && ./sdkmanager platform-tools "platforms;android-29" "build-tools;29.0.2"

Dockerfile说明:

  • 在前文SDK的镜像构建方法之中已经说明:https://liumiaocn.blog.csdn.net/article/details/103640872
  • FROM:是唯一的不同之处,前面SDK镜像只是用OPENJDK作为基础镜像,而本文示例则使用Gradle 6.0.1的镜像作为基础镜像。

镜像下载

下载命令:docker pull liumiaocn/android:sdk.26.1.1.gradle.6.0.1

版本确认

liumiaocn:android liumiao$ docker run --rm liumiaocn/android:sdk.26.1.1.gradle.6.0.1 gradle --version------------------------------------------------------------Gradle 6.0.1------------------------------------------------------------Build time:   2019-11-18 20:25:01 UTCRevision:     fad121066a68c4701acd362daf4287a7c309a0f5Kotlin:       1.3.50Groovy:       2.5.8Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019JVM:          1.8.0_232 (AdoptOpenJDK 25.232-b09)OS:           Linux 4.9.184-linuxkit amd64liumiaocn:android liumiao$

Demo应用

此镜像与前文的gradlew使用方式的镜像有所区别,gradlew更像是一个带着gradle安装程序的配置文件方式,所以需要一个包含gradlew配置的工程在镜像之中,本文的镜像更为纯粹,就是Android工程的构建环境:Android SDK + Gradle,所使用的代码工程如下所示:

  • https://github.com/liumiaocn/easypack/tree/master/containers/standard/android/Demo

apk构建

使用时通过-v将待构建的内容挂载到容器中,然后执行构建即可

liumiaocn:Demo liumiao$ lsDemo.iml		build.gradle		gradle.properties	gradlew.bat		local.propertiesapp			gradle			gradlew			keyReleaseV2.jks	settings.gradleliumiaocn:Demo liumiao$ find . -type f |grep apkliumiaocn:Demo liumiao$ docker run --rm -v `pwd`:/data/Demo liumiaocn/android:sdk.26.1.1.gradle.6.0.1 gradle -b /data/Demo/build.gradle assembleReleaseStarting a Gradle Daemon (subsequent builds will be faster)> Task :app:preBuild UP-TO-DATE> Task :app:preReleaseBuild UP-TO-DATE> Task :app:compileReleaseAidl NO-SOURCE> Task :app:checkReleaseManifest> Task :app:compileReleaseRenderscript NO-SOURCE> Task :app:generateReleaseBuildConfig> Task :app:javaPreCompileRelease> Task :app:mainApkListPersistenceRelease> Task :app:generateReleaseResValues> Task :app:generateReleaseResources> Task :app:createReleaseCompatibleScreenManifests> Task :app:processReleaseManifest> Task :app:mergeReleaseResources> Task :app:processReleaseResources> Task :app:compileReleaseJavaWithJavac> Task :app:compileReleaseSources> Task :app:prepareLintJar> Task :app:lintVitalReleaseCalling mockable JAR artifact transform to create file: /home/gradle/.gradle/caches/transforms-2/files-2.1/9b93ae36d1d5a1d11f3fe6311b0e3a13/android.jar with input /usr/local/android/platforms/android-29/android.jar> Task :app:checkReleaseDuplicateClasses> Task :app:transformClassesWithDexBuilderForRelease> Task :app:mergeReleaseShaders> Task :app:compileReleaseShaders> Task :app:generateReleaseAssets> Task :app:mergeReleaseAssets> Task :app:processReleaseJavaRes NO-SOURCE> Task :app:validateSigningRelease> Task :app:signingConfigWriterRelease> Task :app:mergeExtDexRelease> Task :app:mergeReleaseJniLibFolders> Task :app:mergeReleaseNativeLibs> Task :app:stripReleaseDebugSymbols> Task :app:mergeReleaseJavaResource> Task :app:mergeDexRelease> Task :app:packageRelease> Task :app:assembleReleaseDeprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.Use '--warning-mode all' to show the individual deprecation warnings.See https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warningsBUILD SUCCESSFUL in 2m 2s26 actionable tasks: 26 executedliumiaocn:Demo liumiao$ liumiaocn:Demo liumiao$ find . -type f |grep apk./app/build/intermediates/apk_list/release/mainApkListPersistenceRelease/apk-list.gson./app/build/outputs/apk/release/output.json./app/build/outputs/apk/release/app-release.apkliumiaocn:Demo liumiao$

转载地址:https://liumiaocn.blog.csdn.net/article/details/103650668 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:实例学习Ansible系列(18)服务管理的几种方式
下一篇:Android应用构建:15:使用gradlew和Android SDK镜像构建安卓应用

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月30日 00时48分28秒