From cb4ccea3c225fa4d294f4861530ff3b67c1d9efd Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Wed, 18 Nov 2020 22:01:29 +0000 Subject: [PATCH] build-system: update Android builder docker container This adjusts the docker setup to create a container with the correct NDK, SDK, tools, Qt version, etc, and updates the helper scripts that are needed in order to do that. Signed-off-by: Dirk Hohndel --- packaging/android/android-build-setup.sh | 8 +- .../docker/android-build-container/Dockerfile | 90 +++++++++---------- .../android-build-container/setup-docker.sh | 13 ++- 3 files changed, 58 insertions(+), 53 deletions(-) diff --git a/packaging/android/android-build-setup.sh b/packaging/android/android-build-setup.sh index 88f2d99be..20aff7edd 100755 --- a/packaging/android/android-build-setup.sh +++ b/packaging/android/android-build-setup.sh @@ -13,7 +13,6 @@ if [ "$(uname)" != Linux ] ; then fi SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null && pwd )" -export SUBSURFACE_SOURCE="$SCRIPTDIR"/../.. # these are the current versions for Qt, Android SDK & NDK: source "$SCRIPTDIR"/variables.sh @@ -45,13 +44,14 @@ fi # first we need to get the Android SDK and NDK export JAVA_HOME=/usr export ANDROID_HOME=$(pwd) -export PATH=$ANDROID_HOME/cmdline-tools/bin:/usr/local/bin:/bin +export PATH=$ANDROID_HOME/cmdline-tools/bin:/usr/local/bin:/bin:/usr/bin rm -rf cmdline-tools/latest -sdkmanager --sdk_root="$ANDROID_HOME" "ndk;$NDK_VERSION" "cmdline-tools;latest" "platform-tools" "platforms;$ANDROID_PLATFORMS" "build-tools;$ANDROID_BUILDTOOLS_REVISION" -echo "yyyyyyyy" | sdkmanager --sdk_root=/android --licenses +yes | sdkmanager --sdk_root="$ANDROID_HOME" "ndk;$NDK_VERSION" "cmdline-tools;latest" "platform-tools" "platforms;$ANDROID_PLATFORMS" "build-tools;$ANDROID_BUILDTOOLS_REVISION" +yes | sdkmanager --sdk_root=/android --licenses # next check that Qt is installed if [ ! -d "$LATEST_QT" ] ; then + pip3 install aqtinstall aqt install -O /android "$LATEST_QT" linux android -m qtcharts fi diff --git a/scripts/docker/android-build-container/Dockerfile b/scripts/docker/android-build-container/Dockerfile index 1fcc1aa76..d260ea957 100644 --- a/scripts/docker/android-build-container/Dockerfile +++ b/scripts/docker/android-build-container/Dockerfile @@ -5,12 +5,14 @@ RUN apt-get update && \ apt-get install -y \ autoconf \ automake \ + cmake \ git \ libtool-bin \ make \ wget \ unzip \ python \ + python3-pip \ bzip2 \ pkg-config \ libx11-xcb1 \ @@ -18,65 +20,59 @@ RUN apt-get update && \ libglib2.0-0 \ openjdk-8-jdk \ curl \ + coreutils \ p7zip-full # create our working directory and place the local copies of the Qt # install, NDK and SDK there, plus the three files from the Subsurface # sources that we need to get the prep routines to run RUN mkdir -p /android -ADD android-ndk-r*-linux-x86_64.zip /android/ -ADD sdk-tools-linux-*.zip /android/ -ADD install-qt.sh android-build-wrapper.sh variables.sh /android/ +ADD commandlinetools-linux-*.zip /android/ +RUN cd /android && unzip commandlinetools-linux-*.zip +ADD android-build-setup.sh variables.sh /android/ -# install current cmake -ADD cmake-3.13.2.tar.gz /android/ -RUN cd /android/cmake-3.13.2 && \ - bash ./bootstrap && \ - make -j6 && make install - -# run the build wrapper in prep mode -RUN cd /android && bash -x /android/android-build-wrapper.sh -prep-only +# run the build setup +RUN ls -l /android +RUN cd /android && bash -x /android/android-build-setup.sh # clean up the files that we don't need to keep the container smaller RUN cd /android && \ - apt-get remove -y gcc g++-7 libstdc++-7-dev && \ rm -rf \ - Qt/5*/android_arm*/lib/*x86* \ - Qt/5*/android_arm*/doc \ - Qt/5*/android_arm*/include/QtHelp \ - Qt/5*/android_arm*/include/QtFbSupport \ - Qt/5*/android_arm*/include/QtFontDatabaseSupport \ - Qt/5*/android_arm*/include/QtNfc \ - Qt/5*/android_arm*/include/QtPrintSupport \ - Qt/5*/android_arm*/include/QtTest \ - Qt/5*/android_arm*/include/QtXml \ - Qt/5*/android_arm*/plugins/geoservices/libqtgeoservices_mapboxgl.so \ - sdk-tools-linux-*.zip \ - android-ndk-r*-linux-x86_64.zip \ - $( find android-ndk*/platforms -name arch-mips -o -name arch-x86 ) \ - android-ndk-r[0-9a-z]*/toolchains/x86-* android-ndk*/toolchains/llvm/prebuilt/x86-* \ - android-ndk-r[0-9a-z]*/platforms/android-[12][2345678] \ - android-ndk-r[0-9a-z]*/platforms/android-21/arch-x86_64 \ - android-ndk-r[0-9a-z]*/prebuilt/linux-x86_64 \ - android-ndk-r[0-9a-z]*/simpleperf \ - android-ndk-r[0-9a-z]*/sources/cxx-stl/llvm-libc++/libs/x* \ - android-ndk-r[0-9a-z]*/sources/cxx-stl/llvm-libc++/libs/*/*static* \ - android-ndk-r[0-9a-z]*/sources/cxx-stl/llvm-libc++/test \ - android-ndk-r[0-9a-z]*/sources/cxx-stl/llvm-libc++/utils \ - android-ndk-r[0-9a-z]*/sources/cxx-stl/llvmlibc++abi \ - android-ndk-r[0-9a-z]*/sources/cxx-stl/system \ - android-ndk-r[0-9a-z]*/sources/third_party \ - android-ndk-r[0-9a-z]*/sysroot/usr/lib \ - android-sdk-linux/build-tools/28.0.3/renderscript \ - android-sdk-linux/platform-tools/systrace \ - android-sdk-linux/tools/lib \ - android-sdk-linux/tools/proguard \ - android-sdk-linux/tools/support \ - android-sdk-linux/emulator \ - /usr/lib/gcc \ - cmake-3.13* && \ + 5*/android/lib/*x86* \ + 5*/android/doc \ + 5*/android/include/QtHelp \ + 5*/android/include/QtFbSupport \ + 5*/android/include/QtFontDatabaseSupport \ + 5*/android/include/QtNfc \ + 5*/android/include/QtPrintSupport \ + 5*/android/include/QtTest \ + 5*/android/include/QtXml \ + 5*/android/plugins/geoservices/libqtgeoservices_mapboxgl.so \ + commandlinetools-linux-*.zip \ + $( find platforms -name arch-mips -o -name arch-x86 ) \ + toolchains/x86-* android-ndk*/toolchains/llvm/prebuilt/x86-* \ + platforms/android-[12][2345678] \ + platforms/android-21/arch-x86_64 \ + ndk/*/sources/cxx-stl/llvm-libc++/libs/x* \ + ndk/*/sources/cxx-stl/llvm-libc++/libs/*/*static* \ + ndk/*/sources/cxx-stl/llvm-libc++/test \ + ndk/*/sources/cxx-stl/llvm-libc++/utils \ + ndk/*/sources/cxx-stl/llvmlibc++abi \ + ndk/*/sources/cxx-stl/system \ + ndk/*/sources/third_party \ + ndk/*/sysroot/usr/lib \ + build-tools/*/renderscript \ + platform-tools/systrace \ + tools/lib \ + tools/proguard \ + tools/support \ + emulator \ + platform-tools-2 \ + variables.sh \ + android-build-setup.sh + /usr/lib/gcc && \ ls -l && \ du -sh * RUN apt-get clean -RUN cd /android/android-ndk-r18b/toolchains && ln -s x86_64-4.9 x86-64-4.9 +#RUN cd /android/android-ndk-r18b/toolchains && ln -s x86_64-4.9 x86-64-4.9 RUN touch /android/finished-"`date`" diff --git a/scripts/docker/android-build-container/setup-docker.sh b/scripts/docker/android-build-container/setup-docker.sh index f9b9b5310..e8437d30e 100644 --- a/scripts/docker/android-build-container/setup-docker.sh +++ b/scripts/docker/android-build-container/setup-docker.sh @@ -2,10 +2,19 @@ # Use this to re-create a docker container for building Android binaries +# Google makes it intentionally very hard to download the command line tools +# the URL is constantly changing and the website requires you to click through +# a license. +# Today this URL works: +if [ ! -f commandlinetools-linux-6858069_latest.zip ] ; then + wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip +fi +# if this fails, go to https://developer.android.com/studio#cmdline-tools and click through +# for yourself... + # copy the dependency script into this folder -cp ../../../packaging/android/android-build-wrapper.sh . +cp ../../../packaging/android/android-build-setup.sh . cp ../../../packaging/android/variables.sh . -cp ../../../packaging/android/install-qt.sh . # create the container (this takes a while) sudo docker build -t android-builder --squash .