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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月30日 00时48分28秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
基于java的ssm框架的旅游网站设计与实现
2019-04-30
基于java的SSM框架的流浪猫救助网站的设计与实现
2019-04-30
基于java的SSM框架的教务关系系统的设计与实现
2019-04-30
别再问我什么是A/B测试了!
2019-04-30
如何用同期群分析模型提升留存?(Tableau实战)
2019-04-30
爱了,吹爆这个高颜值的流程图工具!
2019-04-30
一个数据项目
2019-04-30
基于JAVA_JSP电子书下载系统
2019-04-30
基于java出租车计价器设计与实现
2019-04-30
基于java的B2C的网上拍卖系统
2019-04-30
十二时辰篇:这该死的 996
2019-04-30
2021最新 上海互联网公司排名
2019-04-30
字节vs快手!取消大小周之战
2019-04-30
送一个闲置显示器!
2019-04-30
Oracle 行转列 pivot函数基本用法
2019-04-30
Oracle字符串分隔符替换(替换奇数个或偶数个)
2019-04-30
Oracle 利用 UTL_SMTP 包发送邮件
2019-04-30
Oracle 自定义函数实现split功能,支持超长字符串和clob类型的分隔
2019-04-30
Oracle 的循环中的异常捕捉和处理
2019-04-30
Oracle通过pivot和unpivot配合实现行列转换
2019-04-30