PAYATHON 2026

如何在 Raspberry Pi OS(arm64)的 Eclipse 中开发 Android

排障赵师傅

结论

Raspberry Pi 5 可以用来编写 Android 代码。在工具链完整兼容的情况下,也能生成 APK,并通过实体 Android 设备调试。不过,“最新版 Eclipse + ADT + 当前 Android SDK”无法组成一套正常工作的开发环境。

这里有三处兼容性问题:

  • ADT 已于 2015 年停止维护,只适配旧版 Eclipse 和旧式 Android SDK 目录结构。
  • Google 为 Linux 发布的 adb、Build Tools、Android Emulator 等主机程序通常面向 x86_64,并不一定支持 Linux arm64 主机。
  • arm64-v8a system image 代表虚拟 Android 设备的 CPU ABI,不代表 Emulator 能在 arm64 Raspberry Pi OS 上运行。

建议按以下方式调整:

  1. 卸载 ADT,不再使用 Eclipse 内置的 SDK Manager 和 AVD Manager。
  2. 只把 Eclipse 用作 Java/Kotlin 编辑器。
  3. 使用 Gradle Wrapper 和 Android Gradle Plugin,通过命令行构建项目。
  4. 使用实体 Android 设备调试。
  5. 逐一确认 adb、aapt2 等主机端可执行文件确实是 AArch64 版本。安装官方 SDK 包并不代表这些文件支持 AArch64。

如果找不到可运行的 arm64 Build Tools,Raspberry Pi 就只能用于编辑代码,构建需要交给 x86_64 主机、远程服务器或 CI 环境。

当前配置的问题

ADT 与 Eclipse 2024-12 不兼容

ADT 是 Android Studio 出现前使用的 Eclipse 插件,依赖旧版 SDK Tools 提供的目录和接口,例如:

tools/
tools/android
tools/lib/
platform-tools/

现代 SDK 使用的目录结构已经变为:

cmdline-tools/latest/
platform-tools/
build-tools/
platforms/

ADT 检查 tools 目录时,还会读取其中的版本信息并调用旧工具。手工创建一个空的 tools 文件夹无法补齐这些内容,只会让 ADT 把它识别为损坏的 SDK。

以下两个提示就是版本错配造成的:

failed to get the required ADT version number from the SDK
SDK platform tools component is missing

ADT 没有适配 Eclipse 2024-12、Java 21 和现代 Android Gradle Plugin。继续替换旧版 SDK Tools,往往还会引出其他冲突。

下载的文件不是 Platform-Tools

文件名:

commandlinetools-linux-13114758_latest.zip

对应的是 Command-line Tools,里面包含 sdkmanager、avdmanager 等程序,并非 Platform-Tools。

adb 位于单独的 SDK 包中:

platform-tools

安装命令是:

sdkmanager "platform-tools"

安装完成后,仍要检查其中的 adb 能否在 AArch64 主机上执行。

回退 SDK Tools 无法解决主机架构问题

安装以下组件:

Android SDK Tools 24.4.1
Android SDK Platform-tools 23.0.1

只是把部分 SDK 组件退回到 ADT 所处的年代,不会把程序转换成 arm64 可执行文件。旧版工具也可能不支持当前使用的 Java、TLS、软件仓库格式和设备协议。

以下两套工具不应混用:

  • ADT 依赖的旧版 SDK Tools
  • 现代 cmdline-tools、Gradle 和 Android Gradle Plugin

两者采用不同的目录布局,不能相互替代。

ADB 错误说明

日志显示:

Stopping ADB server failed (code -1).
Stopping ADB server failed (code 2).
Starting ADB server failed (code 2).

这说明 ADT 没能正常执行 adb。仅凭这些日志无法锁定具体原因,可能的情况包括:

  • platform-tools/adb 不存在;
  • adb 是 x86_64 文件,无法在 AArch64 系统上直接运行;
  • ELF 动态加载器或共享库缺失;
  • 文件没有执行权限;
  • ADT 找到了错误版本的 adb。

可以直接运行以下命令检查:

uname -m

file /home/zicrys/programs/android_sdk/platform-tools/adb

ls -l /home/zicrys/programs/android_sdk/platform-tools/adb

/home/zicrys/programs/android_sdk/platform-tools/adb version

在 64 位 Raspberry Pi OS 上,uname -m 应显示:

aarch64

如果 file 的输出类似:

ELF 64-bit LSB pie executable, x86-64

这个 adb 就不能在原生 AArch64 环境中直接运行。可以改用 Raspberry Pi OS/Debian 软件仓库提供的 AArch64 版本,也可以从 Android 源码自行构建。发行版提供的版本可能较旧,安装前需要确认它能够识别目标设备。

如果软件仓库提供了相应软件包,可以尝试:

sudo apt update
sudo apt install adb
adb version

不要将发行版的 adb 复制到 SDK 目录并覆盖原文件。可以直接调用 /usr/bin/adb,也可以让它在 PATH 中排在 SDK 自带的 x86_64 版本之前:

export PATH="/usr/bin:$PATH"
which adb
file "$(which adb)"
adb version

AVD 为什么无法使用

安装:

system-images;android-23;default;arm64-v8a

得到的只是 ARM64 Android 客体系统镜像。运行完整 AVD 还需要 Android Emulator 主机程序,而且该程序必须支持 Raspberry Pi OS 的 AArch64 架构和对应的虚拟化环境。

arm64-v8a 描述的是虚拟设备内部运行的 Android ABI,无法解决 Emulator 主机程序的架构兼容问题。ADT 自带的旧 AVD Manager 也不能可靠地管理现代 AVD 配置。

因此,这套环境不适合继续使用 Eclipse 的 AVD Manager。调试时应优先连接实体 Android 手机或平板。

Eclipse 崩溃不能直接归因于 Java 17

崩溃信息显示,Eclipse 实际使用的是自带的 Java 21:

org.eclipse.justj.openjdk.hotspot.jre.full.linux.aarch64_21.0.5

终端里显示的 OpenJDK 17 并不是此次 Eclipse 进程使用的 JVM。只修改终端中的 JAVA_HOME,不一定会改变 Eclipse 的运行环境。

现有信息只有启动参数和:

JVM terminated. Exit code=1

这些内容不足以判断崩溃原因。需要检查:

<workspace>/.metadata/.log

还要查看启动目录或主目录中是否生成了:

hs_err_pid*.log

也可以检查进程是否因内存不足被系统终止:

journalctl -k -b | grep -i -E 'oom|out of memory|killed process'

-Xmx2048m 表示 Eclipse 最多可以使用约 2 GiB Java 堆。进程的总内存还包括 SWT、GTK 和本地库,因此内存不足确实可能导致退出,但现有日志无法证明这就是根因。ADT 调用了不兼容的旧工具或本地程序,也可能造成崩溃。

推荐的环境结构

先在 Eclipse 中卸载 ADT,再删除手工创建的空 tools 文件夹。SDK 目录交给 sdkmanager 管理,例如:

/home/zicrys/programs/android_sdk/
├── cmdline-tools/
│   └── latest/
├── platforms/
├── build-tools/
├── platform-tools/
└── licenses/

设置环境变量:

export ANDROID_SDK_ROOT="$HOME/programs/android_sdk"
export PATH="$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$PATH"

如果 SDK 自带的 adb 不是 AArch64 程序,不要直接把 platform-tools 加入 PATH,应让系统提供的 arm64 adb 保持较高优先级。

检查命令行工具:

sdkmanager --version
sdkmanager --list

然后安装项目实际需要的 SDK Platform 和 Build Tools。所选版本必须与项目的 compileSdk、Android Gradle Plugin 和 Gradle 版本匹配,不能为了满足 ADT 的旧目录要求而固定使用 API 23。

示意命令如下,具体版本号应替换为项目声明的版本:

sdkmanager \
  "platforms;android-<COMPILE_SDK>" \
  "build-tools;<BUILD_TOOLS_VERSION>"

现代项目通常不需要显式指定 buildToolsVersion,Android Gradle Plugin 会选择对应版本。

在 Eclipse 中使用 Gradle 项目

Eclipse 仍可用于:

  • 编辑 Java、Kotlin、XML 和资源文件;
  • 使用 Git;
  • 运行 Gradle 命令;
  • 查看普通 Java 代码错误。

但它无法通过 ADT 提供现代 Android Studio 中的布局预览、设备管理、Android 调试集成和 APK 分析功能。

可以在 Eclipse 中打开已有的标准 Gradle Android 项目,并始终使用项目自带的 Gradle Wrapper:

cd /path/to/project
./gradlew tasks
./gradlew assembleDebug

构建成功后,APK 通常位于:

app/build/outputs/apk/debug/app-debug.apk

SDK 路径可以写入项目的 local.properties:

sdk.dir=/home/zicrys/programs/android_sdk

local.properties 包含本机路径,通常不应提交到版本库。

在 Eclipse 中,可以通过 Run > External Tools > External Tools Configurations 创建 Gradle 启动项:

Location: ${workspace_loc:/项目名/gradlew}
Working Directory: ${workspace_loc:/项目名}
Arguments: assembleDebug

Gradle 能否在 Raspberry Pi 上完成构建,取决于构建期间调用的每个主机端程序。如果 aapt2 无法执行,可以先检查:

file "$ANDROID_SDK_ROOT/build-tools/<版本>/aapt2"

还要检查 Gradle 缓存下载的 aapt2:

find "$HOME/.gradle/caches" -type f -name 'aapt2' -exec file {} \;

如果这些文件是 x86_64 版本,即使 Java 和 Gradle 能正常运行,资源编译仍会失败。此时需要使用可靠的 AArch64 aapt2 构建,或者把构建任务转移到受支持的 x86_64 环境。不要随意替换为其他版本的 aapt2,因为它需要与 Android Gradle Plugin 和 Build Tools 配套。

使用实体设备调试

先在 Android 设备上启用 Developer options 和 USB debugging,再连接 Raspberry Pi:

adb kill-server
adb start-server
adb devices

首次连接时,需要在设备屏幕上确认 RSA 调试授权。识别成功后会显示:

List of devices attached
<serial>    device

安装调试 APK:

adb install -r app/build/outputs/apk/debug/app-debug.apk

查看日志:

adb logcat

也可以通过 Gradle 安装应用:

./gradlew installDebug

如果 USB 无法识别设备,需要检查数据线、USB 权限和 udev 规则,这些问题与 ADT 无关。

使用原生代码时还要检查 NDK

如果项目包含 C/C++、JNI、CMake 或 externalNativeBuild,还需要考虑 NDK 的主机架构。APK 中打包了 arm64-v8a 原生库,并不代表 NDK 编译器支持 Linux AArch64 主机。

需要分别理解两个概念:

  • host architecture:运行编译工具的 Raspberry Pi 5,即 AArch64;
  • target ABI:应用最终运行的 Android ABI,例如 arm64-v8a。

如果官方 NDK 包中的主机工具是 x86_64,就不能在 Raspberry Pi OS 上原生运行。这类项目更适合放在远程 x86_64 环境中构建。

可行性边界

Raspberry Pi 5 上较现实的配置是“Eclipse 编辑器 + Gradle 命令行 + 实体设备”。ADT 工作流不适合在这套环境中继续使用。

能否在本机完成构建,主要取决于以下工具是否都有可用的 AArch64 版本:

adb
aapt2
zipalign
apksigner
aidl
d8/r8 及其启动环境
NDK 工具链(如果项目使用原生代码)

其中一部分是 Java 程序,另一部分是与平台架构有关的本地可执行文件。任何一个关键工具只有 x86_64 版本,都会使完整构建链中断。

可以按以下方式分配工作:

  • Raspberry Pi 5:运行 Eclipse、编辑代码、使用 Git 和完成基础检查;
  • x86_64 Linux 主机或 CI:执行 Gradle 构建、签名和自动化测试;
  • 实体 Android 设备:安装、运行应用,并通过 adb logcat 调试。

如果已经取得并验证过 AArch64 Build Tools,也可以在 Raspberry Pi 上运行 Gradle 构建。不过这属于社区工具链方案,不能默认所有官方 Android SDK 组件都原生支持 Raspberry Pi OS arm64。

备注:内容仅供参考。