如何在 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-v8asystem image 代表虚拟 Android 设备的 CPU ABI,不代表 Emulator 能在 arm64 Raspberry Pi OS 上运行。
建议按以下方式调整:
- 卸载 ADT,不再使用 Eclipse 内置的 SDK Manager 和 AVD Manager。
- 只把 Eclipse 用作 Java/Kotlin 编辑器。
- 使用 Gradle Wrapper 和 Android Gradle Plugin,通过命令行构建项目。
- 使用实体 Android 设备调试。
- 逐一确认
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。
备注:内容仅供参考。
