在 arm64 上安装构建工具不起作用

问题描述 投票:0回答:4

我一直在尝试在 arm64 处理器(安培 CPU)上安装

sdkmanager "build-tools;30.0.2"

但每次我得到这个:

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

我正在尝试构建一个应用程序,但出现此错误:

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

编辑:我认为问题是包

emulator
不可用。我试过从这里下载它,但sdkmanager不认识它。

android arm64
4个回答
1
投票

(假设:已安装 CMD 行工具)

ARM 上缺少 SDK 管理器包“模拟器”

解决方法:

  1. 从谷歌下载 Linux 模拟器:https://developer.android.com/studio/emulator_archive

  2. 解压到$ANDROID_SDK_HOME/emulator

  3. 您需要一个名为“package.xml”的许可证文件,当您通过 Android Studio UI SDK 管理器下载它时会自动创建该文件,您将该文件复制到 $ANDROID_SDK_HOME/emulator 并更改与您下载的版本相关的所有版本号:

    ... <revision><major>31</major><minor>1</minor><micro>4</micro></revision>...
    

0
投票

我能够通过从 https://chromium.googlesource.com/android_tools/+/refs/heads/main/sdk/emulator/

不幸的是,安装的软件包似乎没有为 arm64 编译并且无法正常工作。


0
投票

有人帮忙交叉编译 arm64 模拟器吗? https://developer.android.com/studio/releases/emulator

ARM64 主机模拟器 Linux 模拟器源代码现在支持从 x86_64 主机到 arm64 主机的交叉编译,从而可以使用 KVM 虚拟化运行 arm64 系统映像。目前,仅支持 -gpu swiftshader_indirect(Swiftshader arm64 主机渲染),但也可以使用一组兼容的主机 GPU libEGL/libGLESv2 库,方法是将 lib64/gles_swiftshader 替换为它们,然后使用 -gpu swiftshader_indirect 重新启动。快照也可能无法正常工作(将 -no-snapshot 添加到命令行)。

说明:

cd emu
repo init -u https://android.googlesource.com/platform/manifest -b emu-master-dev --depth=1
repo sync -qcj 12
cd external/qemu
pip install absl-py
pip install urlfetch
sudo apt-get install crossbuild-essential-arm64
python android/build/python/cmake.py --noqtwebengine --noshowprefixforinfo --target linux_aarch64

有人试试这个吗? 我遇到错误,无法安装一个工具


0
投票

如果你因为 arm64 不兼容而面临这个问题,你可以尝试做我所做的。

  1. 首先你需要更新你的 android/build.gradle 文件
  • 例如将 buildToolsVersion 增加到 32 或更高
   buildscript {
   ext {
      buildToolsVersion = "33.0.1"
   }
}
  1. 如果您在项目中使用明确指定构建工具版本 30 的依赖项,gradle 仍将尝试下载它,这将导致错误。 为防止这种情况,您可以强制所有依赖项使用主项目的 buildToolsVersion。它可能会导致一些问题,但如果幸运的话,不会有任何问题。 这是如何实现的
buildscript {
   subprojects { subproject ->
      afterEvaluate{      if((subproject.plugins.hasPlugin("android") || subproject.plugins.hasPlugin("android-library"))) {
                android {
                    compileSdkVersion rootProject.ext.compileSdkVersion
                    buildToolsVersion rootProject.ext.buildToolsVersion
                }
            }
        }
    }
}
  1. sdkmanager 将下载的构建和平台工具中的二进制文件适用于 x86_64,因此 gradle 构建仍然会失败。 要解决这个问题,您需要自己构建这些工具或下载它们。经过长时间的搜索,我发现了这些 https://github.com/lzhiyong/android-sdk-tools/releases/download/33.0.3/android-sdk-tools-static-aarch64.zip 感谢 https://github.com/lzhiyong 构建这些工具并使它们可用。 其他版本在这里 https://github.com/lzhiyong/android-sdk-tools/releases 下载工具后,您应该删除 android sdk 文件夹中的二进制文件,并将路径符号链接到下载的二进制文件。

我在我的案例中符号链接的二进制文件是,

构建工具

贴切 aapt2 援助 apksigner 拉链对齐 拆分选择 转储

平台工具

快速启动 亚行 dmtracedump e2fsdroid etc1工具 hprof转换 make_f2fs make_f2fs_casefold mke2fs sload_f2fs sqlite3

虽然大多数不会被使用,但只是为了安全。

  1. Gradle 可能仍会下载 x86_64 aapt2 版本并尝试使用它。为了确保这种情况不会发生, 您可以将此行添加到您的 android/gradle.properties 文件
android.aapt2FromMavenOverride=/path-to-downloaded-aapt2-binary

祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.