Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Install build tools on arm64 doesn't work

Tags:

android

arm64

I've been trying to install sdkmanager "build-tools;30.0.2" on an arm64 processor (ampere CPU).

But every time I get this:

Warning: Dependant package with key emulator not found!                         
Warning: Unable to compute a complete list of dependencies.

I'm trying to build an app and I get this error:

Failed to install the following SDK components:
      build-tools;30.0.2 Android SDK Build-Tools 30.0.2

Edit: I think the problem is the package emulator isn't available. I tried downloading it from here but sdkmanager didn't recognize it.

like image 703
index9090 Avatar asked Jan 30 '26 22:01

index9090


2 Answers

(Assumption: CMD Line Tools are installed)

SDK manager package "emulator" is missing on ARM

Workaround:

  1. Download emulator from Google for Linux: https://developer.android.com/studio/emulator_archive

  2. Extract it to $ANDROID_SDK_HOME/emulator

  3. You need a license file called "package.xml" which is automatically created when you download it via Android Studio UI SDK Manager, you copy that file to $ANDROID_SDK_HOME/emulator and change all version numbers related to the version you have downloaded:

    ... <revision><major>31</major><minor>1</minor><micro>4</micro></revision>...
    
like image 160
true-mt Avatar answered Feb 01 '26 14:02

true-mt


If you are facing this issue due to arm64 incompatibility, you can try doing exactly what I did.

  1. First you'll need to update your android/build.gradle file
  • Increase the buildToolsVersion to 32 or higher for example
   buildscript {
   ext {
      buildToolsVersion = "33.0.1"
   }
}
  1. If you're using dependencies in your project that explicitly specify build tools version 30, gradle will still attempt to download it and that will cause an error. To prevent that, you can force all dependencies to use the buildToolsVersion of the main project. It might cause some issues, but if you are lucky, there will be none. This is how to implement that
buildscript {
   subprojects { subproject ->
      afterEvaluate{      if((subproject.plugins.hasPlugin("android") || subproject.plugins.hasPlugin("android-library"))) {
                android {
                    compileSdkVersion rootProject.ext.compileSdkVersion
                    buildToolsVersion rootProject.ext.buildToolsVersion
                }
            }
        }
    }
}
  1. The binaries in the build and platform tools that sdkmanager will download are for x86_64 so the gradle build will still fail. To solve this problem, you'll need to either build those tools yourself or download them. After a long search I found these https://github.com/lzhiyong/android-sdk-tools/releases/download/33.0.3/android-sdk-tools-static-aarch64.zip All thanks to https://github.com/lzhiyong for building these tools and making them available. Other releases are here https://github.com/lzhiyong/android-sdk-tools/releases After downloading the tools, you should delete the binaries in your android sdk folder and symlink the paths to the downloaded binaries.

The binaries I symlinked in my case are,

Build Tools

aapt aapt2 aidl apksigner zipalign split-select dexdump

Platform Tools

fastboot adb dmtracedump e2fsdroid etc1tool hprof-conv make_f2fs make_f2fs_casefold mke2fs sload_f2fs sqlite3

Most of them won't be used though, but just to be safe.

  1. Gradle might still download the x86_64 aapt2 version and attempt to use it. To ensure that such doesn't happen, You can add this line to your android/gradle.properties file
android.aapt2FromMavenOverride=/path-to-downloaded-aapt2-binary

Good luck

like image 31
Nifemi Avatar answered Feb 01 '26 12:02

Nifemi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!