From a81cf038f32e0262cc47acf3820470b875b395dc Mon Sep 17 00:00:00 2001 From: Randy Webster Date: Fri, 11 Feb 2022 10:13:04 -0800 Subject: [PATCH] Update Ubuntu and Android versions --- Dockerfile | 58 +++++---- LICENSE | 201 ++++++++++++++++++++++++++++++ README.md | 4 +- hooks/build | 6 +- packages.txt | 7 +- utils/install-android-sdk.sh | 11 -- utils/install-google-cloud-sdk.sh | 5 +- utils/start-test-emulator.sh | 14 +-- utils/wait-for-emulator.sh | 4 +- 9 files changed, 251 insertions(+), 59 deletions(-) create mode 100644 LICENSE delete mode 100755 utils/install-android-sdk.sh diff --git a/Dockerfile b/Dockerfile index 97f35b0..8140846 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ # https://github.com/randr0id/android-docker # -FROM ubuntu:18.04 +FROM ubuntu:20.04 LABEL maintainer="randy@randr0id.com" ARG BUILD_DATE @@ -20,50 +20,56 @@ LABEL org.label-schema.url="https://hub.docker.com/r/randr0id/android-docker" LABEL org.label-schema.vcs-url="https://github.com/randr0id/android-docker" LABEL org.label-schema.vcs-ref=${VCS_REF} -ENV VERSION_TOOLS "6858069" +ENV VERSION_TOOLS "8092744" ENV ANDROID_HOME "/sdk" -ENV PATH "${PATH}:${ANDROID_HOME}/tools" +ENV ANDROID_TOOLS "${ANDROID_HOME}/cmdline-tools" +ENV PATH "${PATH}:${ANDROID_TOOLS}" + ENV DEBIAN_FRONTEND noninteractive +ENV LANG en_US.UTF-8 + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + apt-utils=2.0.6 \ + build-essential=12.8ubuntu1.1 \ + bzip2=1.0.8-2 \ + curl=7.68.0-1ubuntu2.7 \ + git=1:2.25.1-1ubuntu3.2 \ + html2text=1.3.2a-25 \ + libc6-i386=2.31-0ubuntu9.2 \ + lib32stdc++6=10.3.0-1ubuntu1~20.04 \ + lib32gcc1=1:10.3.0-1ubuntu1~20.04 \ + lib32ncurses6=6.2-0ubuntu2 \ + lib32z1=1:1.2.11.dfsg-2ubuntu1.2 \ + locales=2.31-0ubuntu9 \ + openjdk-11-jdk=11.0.13+8-0ubuntu1~20.04 \ + qemu-kvm=1:4.2-3ubuntu6.19 \ + unzip=6.0-25ubuntu1 \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ + && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 + +RUN locale-gen -RUN apt-get -qq update && \ - apt-get install -qqy --no-install-recommends \ - build-essential=12.4ubuntu1 \ - bzip2=1.0.6-8.1ubuntu0.2 \ - curl=7.58.0-2ubuntu3.12 \ - git=1:2.17.1-1ubuntu0.7 \ - html2text=1.3.2a-21 \ - libc6-i386=2.27-3ubuntu1.4 \ - lib32stdc++6=8.4.0-1ubuntu1~18.04 \ - lib32gcc1=1:8.4.0-1ubuntu1~18.04 \ - lib32ncurses5=6.1-1ubuntu1.18.04 \ - lib32z1=1:1.2.11.dfsg-0ubuntu2 \ - openjdk-8-jdk=8u275-b01-0ubuntu1~18.04 \ - qemu-kvm=1:2.11+dfsg-1ubuntu7.34 \ - unzip=6.0-21ubuntu1.1 \ - && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -RUN rm -f /etc/ssl/certs/java/cacerts; \ - /var/lib/dpkg/info/ca-certificates-java.postinst configure +RUN rm -f /var/lib/dpkg/info/ca-certificates-java.postinst configure RUN curl -s https://dl.google.com/android/repository/commandlinetools-linux-${VERSION_TOOLS}_latest.zip > /tools.zip && \ unzip /tools.zip -d ${ANDROID_HOME} && \ - mv ${ANDROID_HOME}/cmdline-tools ${ANDROID_HOME}/tools && \ rm -v /tools.zip RUN mkdir -p ${ANDROID_HOME}/licenses/ && \ printf "8933bad161af4178b1185d1a37fbf41ea5269c55\\nd56f5187479451eabf01fb78af6dfcb131a6481e\\n24333f8a63b6825ea9c5514f83c2829b004d1fee" > ${ANDROID_HOME}/licenses/android-sdk-license && \ printf "84831b9409646a918e30573bab4c9c91346d8abd\\n504667f4c0de7af1a06de9f4b1727b84351f2910" > ${ANDROID_HOME}/licenses/android-sdk-preview-license -RUN yes | ${ANDROID_HOME}/tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} --licenses +RUN yes | ${ANDROID_TOOLS}/bin/sdkmanager --sdk_root=${ANDROID_HOME} --licenses RUN mkdir -p /root/.android && \ touch /root/.android/repositories.cfg && \ - ${ANDROID_HOME}/tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} --update + ${ANDROID_TOOLS}/bin/sdkmanager --sdk_root=${ANDROID_HOME} --update COPY packages.txt ${ANDROID_HOME} RUN while read -r package; do PACKAGES="${PACKAGES}${package} "; done < /sdk/packages.txt && \ - ${ANDROID_HOME}/tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} ${PACKAGES} + ${ANDROID_TOOLS}/bin/sdkmanager --sdk_root=${ANDROID_HOME} ${PACKAGES} COPY utils ${ANDROID_HOME}/utils diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..60fbf90 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2022 Randy Webster. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index 9db85a4..0f57371 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Android Docker Image -[![License](http://img.shields.io/badge/License-Apache%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0) [![Docker Image](https://images.microbadger.com/badges/image/randr0id/android-docker.svg)](https://microbadger.com/images/randr0id/android-docker) +[![License](http://img.shields.io/badge/License-Apache%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0) [![Download](https://img.shields.io/docker/v/randr0id/android-docker?style=flat-square)](https://hub.docker.com/r/randr0id/android-docker/tags) _A Docker image for building and testing Android apps._ @@ -9,7 +9,7 @@ Builds are available at Docker Hub: [https://hub.docker.com/r/randr0id/android-d ## License - Copyright 2021 Randy Webster. All rights reserved. + Copyright 2022 Randy Webster. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/hooks/build b/hooks/build index 69d2b6c..aba0911 100644 --- a/hooks/build +++ b/hooks/build @@ -3,6 +3,6 @@ # $IMAGE_NAME var is injected into the build so the tag is correct. echo "Build hook running" -docker build --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ - --build-arg VCS_REF=`git rev-parse --short HEAD` \ - -t $IMAGE_NAME . +docker build --build-arg BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \ + --build-arg VCS_REF=$(git rev-parse --short HEAD) \ + -t "$IMAGE_NAME" . diff --git a/packages.txt b/packages.txt index a977b89..d1b8509 100644 --- a/packages.txt +++ b/packages.txt @@ -1,6 +1,3 @@ -add-ons;addon-google_apis-google-24 -build-tools;29.0.3 -build-tools;30.0.3 -platform-tools -platforms;android-29 +build-tools;31.0.0 platforms;android-30 +platforms;android-31 diff --git a/utils/install-android-sdk.sh b/utils/install-android-sdk.sh deleted file mode 100755 index 9bfcfe9..0000000 --- a/utils/install-android-sdk.sh +++ /dev/null @@ -1,11 +0,0 @@ -VERSION_SDK_TOOLS="4333796" - -curl -s "https://dl.google.com/android/repository/sdk-tools-linux-${VERSION_SDK_TOOLS}.zip" > ~/sdk.zip && \ - unzip ~/sdk.zip -d "${ANDROID_HOME}" && rm -v ~/sdk.zip - -mkdir -p ~/.android && touch ~/.android/repositories.cfg - -while read -r package; do PACKAGES="${PACKAGES}${package} "; done < packages.txt && \ - "${ANDROID_HOME}/tools/bin/sdkmanager" "${PACKAGES}" - -"${ANDROID_HOME}/tools/bin/sdkmanager" --update diff --git a/utils/install-google-cloud-sdk.sh b/utils/install-google-cloud-sdk.sh index 652a011..16e1191 100755 --- a/utils/install-google-cloud-sdk.sh +++ b/utils/install-google-cloud-sdk.sh @@ -1,8 +1,7 @@ #!/usr/bin/env bash source /etc/os-release -CLOUD_SDK_REPO="cloud-sdk-${VERSION_CODENAME}" -echo "deb http://packages.cloud.google.com/apt ${CLOUD_SDK_REPO} main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list +echo "deb https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list curl "https://packages.cloud.google.com/apt/doc/apt-key.gpg" | apt-key add - -apt-get -qqy update && apt-get install -qqy --no-install-recommends google-cloud-sdk +apt-get update && apt-get install google-cloud-sdk diff --git a/utils/start-test-emulator.sh b/utils/start-test-emulator.sh index 5d29c42..2e4f374 100755 --- a/utils/start-test-emulator.sh +++ b/utils/start-test-emulator.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -android=26 +android=31 abi='x86' avd_name='android_ci_test' @@ -14,17 +14,17 @@ where: while getopts ':ha:b:n:' option; do case "${option}" in - h) echo "${usage}" - exit ;; a) android=${OPTARG} ;; b) abi=${OPTARG} ;; n) avd_name=${OPTARG} ;; + *) echo "${usage}" + exit ;; esac done echo "Starting Android emulator ${avd_name} with API ${android} and ABI ${abi}" -${ANDROID_HOME}/tools/bin/sdkmanager "system-images;android-${android};google_apis;${abi}" -${ANDROID_HOME}/tools/bin/avdmanager delete avd -n ${avd_name} -echo "no" | ${ANDROID_HOME}/tools/bin/avdmanager create avd -f -n ${avd_name} -b "google_apis/${abi}" -k "system-images;android-${android};google_apis;${abi}" -echo "no" | ${ANDROID_HOME}/tools/emulator @${avd_name} -wipe-data -no-audio -no-window -verbose & ${BASH_SOURCE%/*}/wait-for-emulator.sh +${ANDROID_TOOLS}/bin/sdkmanager "system-images;android-${android};google_apis;${abi}" +${ANDROID_TOOLS}/bin/avdmanager delete avd -n ${avd_name} +echo "no" | ${ANDROID_TOOLS}/bin/avdmanager create avd -f -n ${avd_name} -b "google_apis/${abi}" -k "system-images;android-${android};google_apis;${abi}" +echo "no" | ${ANDROID_TOOLS}/emulator @${avd_name} -wipe-data -no-audio -no-window -verbose & ${BASH_SOURCE%/*}/wait-for-emulator.sh diff --git a/utils/wait-for-emulator.sh b/utils/wait-for-emulator.sh index bf223f8..0bceb36 100755 --- a/utils/wait-for-emulator.sh +++ b/utils/wait-for-emulator.sh @@ -7,9 +7,9 @@ counter=0 timeout=360 until [[ "${bootanim}" =~ "stopped" ]]; do - bootanim=`adb -e shell getprop init.svc.bootanim 2>&1 &` + bootanim=$(adb -e shell getprop init.svc.bootanim 2>&1 &) if [[ "${bootanim}" =~ "device not found" || "${bootanim}" =~ "device offline" || "${bootanim}" =~ "running" ]]; then - let "counter += 1" + (( "counter += 1" )) echo "Waiting for emulator to start..." if [[ ${counter} -gt timeout ]]; then