diff --git a/ci/android-install-ndk.sh b/ci/android-install-ndk.sh
index e37a5542c38a4306b6618662aa451c33aff8ff93..463565125972fb65d6c7583a336bbf4edf58a2e6 100644
--- a/ci/android-install-ndk.sh
+++ b/ci/android-install-ndk.sh
@@ -3,21 +3,21 @@
 set -ex
 
 NDK=android-ndk-r21d
-wget --tries=20 https://dl.google.com/android/repository/${NDK}-linux-x86_64.zip
+wget --tries=20 -q https://dl.google.com/android/repository/${NDK}-linux-x86_64.zip
 unzip -q ${NDK}-linux-x86_64.zip
 
 case "$1" in
   arm)
     arch=arm
-    api=24
+    api=28
     ;;
   armv7)
     arch=arm
-    api=24
+    api=28
     ;;
   aarch64)
     arch=arm64
-    api=24
+    api=28
     ;;
   i686)
     arch=x86
diff --git a/ci/android-install-sdk.sh b/ci/android-install-sdk.sh
index 8858de16d75831d8f10aa5767e2acbe5939319cd..6f6aeb28e82b087e1e5e0eed0efc70f53e0db8a4 100644
--- a/ci/android-install-sdk.sh
+++ b/ci/android-install-sdk.sh
@@ -9,10 +9,10 @@ set -ex
 # located in https://github.com/appunite/docker by just wrapping it in a script
 # which apparently magically accepts the licenses.
 
-SDK=4333796
-mkdir sdk
-wget --tries=20 https://dl.google.com/android/repository/sdk-tools-linux-${SDK}.zip
-unzip -q -d sdk sdk-tools-linux-${SDK}.zip
+SDK=6609375
+mkdir -p sdk/cmdline-tools
+wget -q --tries=20 https://dl.google.com/android/repository/commandlinetools-linux-${SDK}_latest.zip
+unzip -q -d sdk/cmdline-tools commandlinetools-linux-${SDK}_latest.zip
 
 case "$1" in
   arm | armv7)
@@ -51,14 +51,14 @@ echo '#Fri Nov 03 10:11:27 CET 2017 count=0' >> /root/.android/repositories.cfg
 #
 # | grep -v = || true    removes the progress bar output from the sdkmanager
 # which produces an insane amount of output.
-yes | ./sdk/tools/bin/sdkmanager --licenses --no_https | grep -v = || true
-yes | ./sdk/tools/bin/sdkmanager --no_https \
+yes | ./sdk/cmdline-tools/tools/bin/sdkmanager --licenses --no_https | grep -v = || true
+yes | ./sdk/cmdline-tools/tools/bin/sdkmanager --no_https \
         "emulator" \
         "platform-tools" \
         "platforms;android-${api}" \
         "${image}" | grep -v = || true
 
 echo "no" |
-    ./sdk/tools/bin/avdmanager create avd \
+    ./sdk/cmdline-tools/tools/bin/avdmanager create avd \
         --name "${1}" \
         --package "${image}" | grep -v = || true
diff --git a/ci/android-sysimage.sh b/ci/android-sysimage.sh
index d6eb32ed68a49ca44a8d42efc2ed0c7685d478c1..b49712035cf338c7158404388fe4d3e60e1ebaf6 100644
--- a/ci/android-sysimage.sh
+++ b/ci/android-sysimage.sh
@@ -14,7 +14,7 @@ main() {
     apt-get install --no-install-recommends e2tools
 
     pushd "${td}"
-    wget --tries=5 "${URL}/${name}"
+    wget -q --tries=5 "${URL}/${name}"
     unzip -q "${name}"
 
     local system
diff --git a/ci/docker/aarch64-linux-android/Dockerfile b/ci/docker/aarch64-linux-android/Dockerfile
index 71a1e6bdece4896755681bb5be50a49dfd5f3dab..d5396a32e18c6e0e502b7c36f4fe7a9c95f4808c 100644
--- a/ci/docker/aarch64-linux-android/Dockerfile
+++ b/ci/docker/aarch64-linux-android/Dockerfile
@@ -19,16 +19,17 @@ WORKDIR /android/
 COPY android* /android/
 
 ENV ANDROID_ARCH=aarch64
-ENV PATH=$PATH:/android/ndk-$ANDROID_ARCH/bin:/android/sdk/tools:/android/sdk/platform-tools
+ENV PATH=$PATH:/android/ndk-$ANDROID_ARCH/bin:/android/sdk/cmdline-tools/tools:/android/sdk/platform-tools
 
 RUN sh /android/android-install-ndk.sh $ANDROID_ARCH
 RUN sh /android/android-install-sdk.sh $ANDROID_ARCH
 RUN mv /root/.android /tmp
 RUN chmod 777 -R /tmp/.android
-RUN chmod 755 /android/sdk/tools/* /android/sdk/emulator/qemu/linux-x86_64/*
+RUN chmod 755 /android/sdk/cmdline-tools/tools/* /android/sdk/emulator/qemu/linux-x86_64/*
+RUN ls -a /android/sdk/platform-tools
 
 ENV PATH=$PATH:/rust/bin \
-    CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=aarch64-linux-android-gcc \
+    CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=aarch64-linux-android28-clang \
     CARGO_TARGET_AARCH64_LINUX_ANDROID_RUNNER=/tmp/runtest \
     HOME=/tmp
 
diff --git a/ci/docker/arm-linux-androideabi/Dockerfile b/ci/docker/arm-linux-androideabi/Dockerfile
index 3b200402c52d9cf37dff6dbe3f77e6703cbee5d6..25f76d2c8ac13cd3a6304bc80eff53bb45e711bb 100644
--- a/ci/docker/arm-linux-androideabi/Dockerfile
+++ b/ci/docker/arm-linux-androideabi/Dockerfile
@@ -19,13 +19,14 @@ WORKDIR /android/
 COPY android* /android/
 
 ENV ANDROID_ARCH=arm
-ENV PATH=$PATH:/android/ndk-$ANDROID_ARCH/bin:/android/sdk/tools:/android/sdk/platform-tools
+ENV PATH=$PATH:/android/ndk-$ANDROID_ARCH/bin:/android/sdk/cmdline-tools/tools:/android/sdk/platform-tools
 
 RUN sh /android/android-install-ndk.sh $ANDROID_ARCH
 RUN sh /android/android-install-sdk.sh $ANDROID_ARCH
 RUN mv /root/.android /tmp
 RUN chmod 777 -R /tmp/.android
-RUN chmod 755 /android/sdk/tools/* /android/sdk/emulator/qemu/linux-x86_64/*
+RUN chmod 755 /android/sdk/cmdline-tools/tools/* /android/sdk/emulator/qemu/linux-x86_64/*
+RUN ls -a /android/sdk/platform-tools
 
 ENV PATH=$PATH:/rust/bin \
     CARGO_TARGET_ARM_LINUX_ANDROIDEABI_LINKER=arm-linux-androideabi-gcc \
diff --git a/ci/docker/i686-linux-android/Dockerfile b/ci/docker/i686-linux-android/Dockerfile
index 9c050ef9553e4a9d5900cf2f22e09ff65835ed54..c9145921044c9c78a36077f7b85ab339ddbf62c6 100644
--- a/ci/docker/i686-linux-android/Dockerfile
+++ b/ci/docker/i686-linux-android/Dockerfile
@@ -20,13 +20,13 @@ WORKDIR /android/
 COPY android* /android/
 
 ENV ANDROID_ARCH=i686
-ENV PATH=$PATH:/android/ndk-$ANDROID_ARCH/bin:/android/sdk/tools:/android/sdk/platform-tools
+ENV PATH=$PATH:/android/ndk-$ANDROID_ARCH/bin:/android/sdk/cmdline-tools/tools:/android/sdk/cmdline-tools/platform-tools
 
 RUN sh /android/android-install-ndk.sh $ANDROID_ARCH
 RUN sh /android/android-install-sdk.sh $ANDROID_ARCH
 RUN mv /root/.android /tmp
 RUN chmod 777 -R /tmp/.android
-RUN chmod 755 /android/sdk/tools/* /android/sdk/emulator/qemu/linux-x86_64/*
+RUN chmod 755 /android/sdk/cmdline-tools/tools/* /android/sdk/emulator/qemu/linux-x86_64/*
 
 ENV PATH=$PATH:/rust/bin \
     CARGO_TARGET_I686_LINUX_ANDROID_LINKER=i686-linux-android-gcc \
diff --git a/libc-test/Cargo.toml b/libc-test/Cargo.toml
index 00e0b5407ca4293db113d3058dacbcdea6695912..ae5bfe39330a73729c5dbb80059cf1dd8cfa0c1e 100644
--- a/libc-test/Cargo.toml
+++ b/libc-test/Cargo.toml
@@ -9,7 +9,7 @@ path = ".."
 default-features = false
 
 [build-dependencies]
-cc = "1.0"
+cc = "=1.0.52"
 # FIXME: Use fork ctest until the maintainer gets back.
 ctest2 = "0.3"
 
diff --git a/libc-test/build.rs b/libc-test/build.rs
index efc9840a5e816a0eb66de1df1cfc44d4a259ad6d..b9120809b8ae324b867e5917862c33e55294100d 100755
--- a/libc-test/build.rs
+++ b/libc-test/build.rs
@@ -1370,7 +1370,6 @@ fn test_android(target: &str) {
         t => panic!("unsupported target: {}", t),
     };
     let x86 = target.contains("i686") || target.contains("x86_64");
-    let aarch64 = target.contains("aarch64");
 
     let mut cfg = ctest_cfg();
     cfg.define("_GNU_SOURCE", None);
@@ -1592,31 +1591,6 @@ fn test_android(target: &str) {
             // test the XSI version below.
             "strerror_r" => true,
 
-            // FIXME: Somehow we cannot find these fns on aarch64.
-            // https://github.com/rust-lang/libc/issues/1765
-            "lockf"
-            | "preadv64"
-            | "pwritev64"
-            | "openpty"
-            | "forkpty"
-            | "login_tty"
-            | "getifaddrs"
-            | "freeifaddrs"
-            | "sethostname"
-            | "getgrgid_r"
-            | "getgrnam_r"
-            | "sigtimedwait"
-            | "fmemopen"
-            | "open_memstream"
-            | "open_wmemstream"
-            | "clock_getcpuclockid"
-            | "process_vm_readv"
-            | "process_vm_writev"
-                if aarch64 =>
-            {
-                true
-            }
-
             _ => false,
         }
     });