Android
使用适用于您设备的 USB 数据线将手机插入电脑。确保此 USB 数据线具有数据线(并非所有数据线都有)。
在您的智能手机上,您应该会看到充电图标。如果是这种情况,请转到您的通知栏,滚动到底部,直到您看到通知说您的手机以充电模式连接。
点击通知,然后将其设置为文件传输模式、MTP 或类似模式。
您现在应该看到大多数桌面环境都检测到您的手机。
同步
有各种应用程序可以传输文件、同步通知等。
一体化
- KDE Connect (kdeconnect) – 将您的 Android 设备与 KDE 或 Gnome 桌面集成(具有同步通知和剪贴板、多媒体控制以及文件/URL 共享功能)。
同步通知
- a2lnAUR – 提供基于 LAN 的通知同步,具有身份验证、加密等功能
传输文件
- USB 数据线
- 媒体传输协议,用于现代 Android 设备
- USB 大容量存储,用于旧设备
- Android 调试桥
- 专用 USB 存储棒 / 带适配器的普通 USB 存储棒
- 蓝牙
- 具有 Android 对应版本的 Arch Linux 软件
应用开发
构建 Android 应用的官方支持方式是使用 #Android Studio。[1]
Android Studio
Android Studio 是基于 IntelliJ IDEA 的官方 Android 开发环境。它为开发和调试提供了集成的 Android 开发者工具。
您可以使用 android-studioAUR 软件包安装它。对于 Beta 分支,安装 android-studio-betaAUR 软件包。对于 Canary 分支,安装 android-studio-canaryAUR 软件包。
Android Studio 在 home 目录下创建一个 .android
目录。要重置 Android Studio,可以删除此目录。
- 确保您正确设置 Java 环境,否则 android-studio 将无法启动。但是,在较新版本中,Java 默认包含在内,因此无需这样做;请参阅#Java 开发工具包。
- 如果 Android Studio 显示为空白窗口,请尝试导出
_JAVA_AWT_WM_NONREPARENTING=1
,请参阅issue #57675。
Android Studio 设置向导会安装所需的 #SDK 软件包,并将 SDK 默认放置在 ~/Android/Sdk
中。
要从命令行构建应用(例如,使用 ./gradlew assembleDebug
),请将 ANDROID_HOME 环境变量 设置为您的 SDK 位置。
Android Studio 自 2024.2 版本以来 具有实验性的 Wayland 支持,您可以通过转到 Menu -> Help -> Edit Custom VM Options
并添加 -Dawt.toolkit.name=WLToolkit
作为参数来启用它。
SDK 软件包
Android SDK 软件包可以直接从上游安装,使用 #Android Studio 的 SDK 管理器 或 sdkmanager 命令行工具(Android SDK 工具的一部分)。一些 Android SDK 软件包也可以作为 AUR 软件包使用,它们通常安装到 /opt/android-sdk/
。
Android SDK 软件包 | SDK 风格路径 | AUR 软件包 | AUR dummy | CLI 工具 |
---|---|---|---|---|
命令行工具 | tools | android-sdk-cmdline-tools-latestAUR | android-sdk-cmdline-tools-latest-dummyAUR | apkanalyzer, avdmanager, lint, retrace, screenshot2, sdkmanager |
SDK 构建工具 | build-tools;版本号 | android-sdk-build-toolsAUR | android-sdk-build-tools-dummyAUR | aapt, aapt2, aidl, apksigner, bcc_compat, d8, dexdump, dx, lld, llvm-rs-cc, mainDexClases, split-select, zipalign |
SDK 平台工具 | platform-tools | android-sdk-platform-toolsAUR | android-sdk-platform-tools-dummyAUR | adb, dmtracedump, e2fsdroid, etc1tool, #fastboot, hprof-conv, make_f2fs, make_f2fs_casefold, mke2fs, sload_f2fs, sqlite3, systrace |
SDK 平台 | platforms;android-级别 | android-platformAUR, 旧版本 | android-platform-dummyAUR (非必需) |
android-tools 软件包提供了来自 SDK 平台工具的 adb、#fastboot、e2fsdroid
和 mke2fs.android
,以及 mkbootimg
和 ext2simg
。
- 由于 Android SDK 包含 32 位二进制文件,因此您必须启用 multilib 仓库。否则,您将收到
error: target not found: lib32-*
错误消息。 - 如果您选择直接从上游安装 SDK 软件包,请安装 AUR dummy 列的 AUR 软件包以拉取所需的依赖项。
- 如果您在尝试运行
sdkmanager
时收到java.lang.NoClassDefFoundError
异常,请临时使用 OpenJDK 8 的 JRE,方法是安装 jre8-openjdk 软件包并切换 Java 环境。请参阅 Failed to run sdkmanager --list with Java 9
Android Emulator
Android Emulator 以 emulator
SDK 软件包、android-emulatorAUR 软件包的形式提供,并且还有一个用于它的 dummy 软件包:android-emulator-dummyAUR。
要运行 Android Emulator,您需要 Intel 或 ARM 系统镜像。您可以通过 AUR、使用 sdkmanager 或使用 Android Studio 的 AVD 管理器来安装它们。
如果使用 Wayland,请务必阅读 Wayland#Qt,因为模拟器可能会抱怨 Wayland。
AUR 中的其他 SDK 软件包
Android Support Library 现在可以从 Google 的 Maven 仓库在线获取。您也可以通过 extras;android;m2repository
SDK 软件包离线安装它(也可作为 android-support-repositoryAUR 使用)。
使 /opt/android-sdk 组可写
AUR 软件包将 SDK 安装在 /opt/android-sdk/
中。此目录具有 root 权限,因此请记住以 root 身份运行 sdk 管理器。如果您打算以普通用户身份使用它,请创建 android-sdk 用户组,添加您的用户。
# groupadd android-sdk # gpasswd -a <user> android-sdk
设置访问控制列表以允许新创建的组的成员写入 android-sdk 文件夹。由于运行 sdkmanager 也会创建新文件,因此将 ACL 设置为默认 ACL。默认组条目中的 X 表示“如果所有者(或任何其他人)可执行,则允许执行”
# setfacl -R -m g:android-sdk:rwx /opt/android-sdk # setfacl -d -m g:android-sdk:rwX /opt/android-sdk
重新登录或以 <user> 身份将您的终端登录到新创建的组
$ newgrp android-sdk
其他 IDE
Android Studio 是基于 IntelliJ IDEA 的官方 Android 开发环境。或者,您可以使用带有 NBAndroid-V2 的 Netbeans。所有这些都在下面描述。
Netbeans
如果您更喜欢使用 Netbeans 作为您的 IDE 并希望开发 Android 应用程序,请使用 NBAndroid-V2。
安装 android-sdkAUR 软件包,并按照 NBANDROID README 中的说明进行操作。
Vim / Neovim
可以使用 (Neo)vim 像 IDE 一样编写适用于 Android 和 iOS 的 flutter
应用程序。使用 Vim 插件管理器安装 coc。还要安装 coc-flutter 扩展以实现自动完成(如 Android Studio 中一样)并将代码加载到 Android 模拟器中。
Emacs
要使用 Emacs 开发移动 flutter
应用程序,正如 flutter.dev 上的官方说明建议的那样,安装 lsp-dart。
其他工具
Marvin
Marvin 是一款帮助初学者设置 Android 开发环境的工具。安装 marvin_dscAUR 可以帮助您设置以下内容:JDK、Android SDK、IDE 和 AVD。
构建
请注意,这些说明基于官方 AOSP 构建说明。其他派生的 Android 系统(如 LineageOS)通常需要额外的步骤。
所需软件包
/etc/pacman.conf
中启用 multilib 仓库。要构建 AOSP 13,您需要安装 TTF 字体(例如 ttf-dejavu)以及 aosp-develAUR 元软件包的依赖项。
此外,LineageOS(以及许多其他 Android 发行版,如 ArrowOS、PixelExperience 等)需要 lineageos-develAUR 元软件包的以下依赖项。
Java 开发工具包
所需的 JDK 版本取决于您正在构建的 Android 版本
- 对于 Android 9 (Pie) 及更高版本,Java 包含在 Android 源代码中,无需单独安装。
- 对于 Android 7 和 8(Nougat 和 Oreo),需要 OpenJDK 8,它可以通过 jdk8-openjdk 软件包获得。
/usr/lib/jvm/java-version-openjdk-amd64
中。设置 JAVA_HOME 以避免此要求并匹配 Arch Linux 安装路径。示例
$ export JAVA_HOME=/usr/lib/jvm/java-version-openjdk此更改仅在当前终端会话中有效。
设置构建环境
创建一个目录来构建。
$ mkdir ~/android $ cd ~/android
下载源代码
这将克隆仓库。您只需在第一次构建 Android 时执行此操作,或者如果您想切换分支。
repo
有一个-j
开关,其操作方式与make
中使用的开关类似。由于它控制并发下载的数量,因此您应该根据下游网络带宽调整该值。
- 您需要指定要检出的分支(分支列表),使用
-b
开关。如果您忽略此开关,您将获得所谓的主分支。
$ repo init --partial-clone -b main -u https://android.googlesource.com/platform/manifest $ repo sync -j4
-c
开关与 repo 命令一起使用,如下所示$ repo sync -j8 -c
-c
开关将仅同步清单中指定的分支,而清单中指定的分支又由 -b
开关指定的分支或仓库维护者设置的默认分支确定。
请耐心等待很长时间。仅未编译的源代码,以及用于跟踪它的 .repo
和 .git
目录就非常大。截至 Android 10,至少需要 250 GB 的可用磁盘空间 required。
$ repo sync
构建代码
这应该可以满足您对 AOSP 的需求
$ source build/envsetup.sh $ lunch full-eng $ make -j4
如果您在不带参数的情况下运行 lunch,它将询问您要创建哪个构建。使用 -j,数字介于内核/线程数的 1 到 2 倍之间。
构建需要很长时间。
- 确保您有足够的 RAM。Android 将大量使用
/tmp
目录。默认情况下,/tmp
的大小是您 RAM 大小的一半。如果它被填满,构建将失败。建议使用 4 GiB 或更多的 RAM。如果/tmp
不够大,您可以增加它。确保您有足够的 RAM 和交换空间来支持它。或者,您可以完全从 fstab 中删除 tmpfs。 - 来自 Android 构建和运行指南
- GNU make 可以使用
-jN
参数处理并行任务,通常使用的任务数 N 介于用于构建的计算机上的硬件线程数的 1 到 2 倍之间。例如,在双 E5520 机器(2 个 CPU,每个 CPU 4 个内核,每个内核 2 个线程)上,最快的构建是使用make -j16
和make -j32
之间的命令完成的。
- GNU make 可以使用
测试构建
完成后,运行/测试最终镜像。
$ emulator
创建可刷写的镜像
要创建可以刷写的镜像,必须
make -j8 updatepackage
这将在 out/target/product/hammerhead
(hammerhead 是设备名称)下创建一个 zip 镜像,可以刷写。
刷写
在某些情况下,您希望在将自定义 ROM 刷入 Android 移动设备后返回到原厂 Android。有关您设备的刷写说明,请使用 XDA 论坛。
Fastboot
Fastboot(以及 ADB)包含在 android-tools 软件包中。
- 使用
fastboot
恢复固件可能非常棘手,但您可能需要浏览 XDA 开发者论坛以查找原厂固件,这通常是一个*.zip
文件,但在其中包含固件文件和flash-all.sh
脚本。例如,Google Nexus 固件包含flash-all.sh
脚本,或者另一个示例可能是 OnePlus One - XDA 线程,您可以在其中找到包含flash-all.sh
脚本的固件。 - 如果您收到
no permissions
错误或执行只是挂起并显示< waiting for any device >
,那么您需要以 root 用户身份运行fastboot
。或者,您可以安装 android-udev 或 AUR 软件包 android-udev-gitAUR 并重新连接您的设备。
三星设备
三星设备无法使用 Fastboot 工具刷写。替代方案是 Heimdall 和 Odin(通过使用 Windows 和 VirtualBox)。
samloader
要下载三星原厂固件,可以使用平台独立的脚本 samloader。
Heimdall
Heimdall 是一款跨平台开源工具套件,用于将固件(也称为 ROM)刷入三星移动设备,也被称为 Odin 的替代方案。它可以作为 heimdall 安装,但是,它已不再维护:一个积极维护的分支可以作为 heimdall-grimler-gitAUR 安装。
刷写说明可以在 Heimdall 的 GitHub 仓库 或 XDA 论坛上找到。
Odin (Virtualbox)
也可以使用 Odin 在三星设备上恢复 固件 (Android),但在 VirtualBox 内部。
Arch Linux(主机)准备
- 安装 VirtualBox 及其 扩展包 和 Guest Additions。
- 使用 VirtualBox 将您首选的但与 Odin 兼容的 Windows 操作系统(带有 VirtualBox Guest Additions)安装到虚拟硬盘驱动器中。
- 打开 Windows 操作系统的 VirtualBox 设置,导航到USB,然后勾选(或确保已勾选)启用 USB 2.0 (EHCI) 控制器。
- 在运行 Windows 操作系统的 VirtualBox 中,单击菜单栏中的设备 > USB 设备,然后从列表中单击通过 USB 连接到计算机的三星移动设备。
Windows(虚拟机)准备
- 安装 三星驱动程序。
- 安装 Odin。
- 下载您的智能手机型号所需的 三星固件 (Android)。
检查配置是否正常工作
- 将您的设备置于下载模式并连接到您的 Linux 机器。
- 在虚拟机工具栏中,选择设备 > USB > ...Samsung... 设备。
- 打开 Odin。“消息”的白色框(左下角的大框)应打印类似于以下内容的一行
<ID:0/003> Added!!
这意味着您的设备对 Odin 和 Windows 操作系统可见,并且已准备好刷写。
在 Arch Linux 上运行 Android 应用
有几个项目和方法支持在 Arch Linux(或其他发行版)上运行 Android。如下所列
- 基于容器的解决方案往往是最流行的。它们是您可以在非 Android Linux 内核上原生运行 Android 应用的最接近方式。它们往往与您的系统集成得最好,并且具有良好的性能。值得注意的有
- Waydroid 是 Anbox 的一个分支,并且越来越受欢迎。它的性能更高,因为它更接近硬件运行。它基于更新的 LineageOS 17.1 (Android 10) 基础镜像,可以选择安装 Google Play 商店和其他 Open Gapps。除了在独立窗口中运行应用程序外,它还可以运行完整的 Android UI。
- 还有一些 Chromium 扩展程序可以运行 android 应用
- Arc Welder 是 Google 的一个扩展程序,用于测试应用程序在 Chrome OS 上的运行情况,但现已停产。
- ARChon 是一个未维护的开源扩展程序,用于在基于 Chromium 的浏览器上运行 android 应用程序。截至 2023 年 7 月,示例应用程序无法工作,因为 “旧版本的 Chrome 应用在 2022 年之后将无法在 Linux 设备上打开”。
- 当然,也可以运行完整的 android 模拟器。这样做的一个优点是您可以在 x86 上运行 arm 应用程序。缺点是性能较差。示例包括
- Android Studio 的内置模拟器,如本文前面所述。
- Genymotion 是一款付费的 Android 模拟/测试套件。
- 还有基于 Android 的 x86_64 兼容操作系统镜像,可以在常见的虚拟机(包括带有 VirtIO GPU 的 KVM)或裸机上运行。
- Bliss OS 是一款基于 Android 的开源操作系统,它集成了许多优化和功能,并预装了 KernelSU root。还包括 ARM 模拟。
- 对于较旧的 Android 版本,请参阅 Android-x86。
故障排除
Android Studio:Android 虚拟机显示 “failed to load”。
确保您已按照 #Android Studio 中的说明导出变量 ANDROID_HOME
。
Android Studio:“failed to create the SD card”
如果您尝试在 x86_64 Arch 下运行 AVD(Android 虚拟机)并遇到上述错误,请从 multilib 仓库安装 lib32-gcc-libs 软件包。
Eclipse:调试期间 “Source not found”
很可能调试器想要步入 Java 代码。由于 Android 的源代码不包含在 Android SDK 中,因此会导致错误。最好的解决方案是使用步进过滤器,以不跳入 Java 源代码。步进过滤器默认未激活。要激活它们:窗口 > 首选项 > Java > 调试 > 步进过滤。考虑全选它们。如果合适,您可以添加 android.* 软件包。请参阅 使用步进过滤器。
ValueError: unsupported pickle protocol
一种解决方法是执行
$ rm ~/.repopickle_.gitconfig
如果这不起作用,请尝试以下操作
$ find /path/to/android-root -name .repopickle_config -delete
libGL error: failed to load driver: swrast OR AVD does not load and no error message displayed
有时,开始加载 AVD 会导致显示类似于此的错误消息,或者加载过程似乎已完成但未加载 AVD 并且不显示错误消息。
AVD 加载了不正确的 libstdc++ 版本,您可以从 ~/.android-sdk/emulator/lib64
文件夹(对于 64 位)或 ~/.android-sdk/emulator/lib
文件夹(对于 32 位)中移除 libstdc++ 文件夹,例如:
$ rm -r ~/.android-sdk/emulator/lib64/libstdc++
请注意,在 Android Studio 3.0 之前的版本中,此目录位于不同的位置
$ rm -r ~/Android/Sdk/emulator/lib64/libstdc++
或者,您可以在 ~/.profile 中设置并导出 ANDROID_EMULATOR_USE_SYSTEM_LIBS,如下所示:
export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1
可以通过使用 env 命令来修复 .desktop 文件,在前缀 Exec 行添加 Desktop entries#修改环境变量
env ANDROID_EMULATOR_USE_SYSTEM_LIBS=1
sh: glxinfo: 命令未找到
以下是完整错误信息
Cannot launch AVD in emulator. Output: sh: glxinfo: command not found sh: glxinfo: command not found libGL error: unable to load driver: swrast_dri.so libGL error: failed to load driver: swrast X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 154 (GLX) Minor opcode of failed request: 24 (X_GLXCreateNewContext) Value in failed request: 0x0 Serial number of failed request: 32 Current serial number in output stream: 33 QObject::~QObject: Timers cannot be stopped from another thread
您可以尝试安装 glxinfo (mesa-utils),但如果您的计算机性能足够强大,您可以简单地使用软件来渲染图形。为此,请转到工具 > Android > AVD 管理器,编辑 AVD(点击铅笔图标),然后为模拟性能 > 图形选择软件 - GLES 2.0。
Android 模拟器:xfwm4 中没有键盘输入
在 xfwm4 中,位于模拟器右侧的垂直工具栏按钮窗口会从模拟器获取焦点并消耗键盘事件。(错误报告)
您可以使用 [2] 中描述的解决方法
- 打开 xfwm4 设置。
- 切换到“焦点”选项卡。
- 将焦点模式更改为“鼠标跟随焦点”。
- 禁用下方当窗口接收焦点时自动提升窗口选项。
Android 模拟器:在 WM 平铺模式下使用时,窗口抖动和闪烁
当使用平铺窗口管理器(如 dwm)时,Android 模拟器会抖动和闪烁。您可以使用 krohnkite issue 72 中描述的解决方法(在 dwm 中,窗口浮动由 Alt+f
触发)。
Android 模拟器:段错误 (核心已转储)
当使用 Nouveau 驱动程序时,尝试禁用 GPU 硬件加速。
在某些设备中,这只能通过编辑 $HOME/.avd/device_name.avd/config.ini
来完成。[3]
- 设置
hw.gpu.enabled=no
- 设置
hw.gpu.mode=off
Android 模拟器:无法启动 / qemu-system:地址解析失败
当在 Android Studio 中启动虚拟设备后,出现没有模拟器窗口显示的问题。如果这适用于您,请从控制台启动模拟器并检查其输出
$ emulator -avd $(emulator -list-avds)
如果在任何行中,它显示类似于
qemu-system-x86_64 : address resolution failed for ::1:46189: Name or service not known
您可以尝试禁用 IPv6
$ sysctl net.ipv6.conf.all.disable_ipv6=1
如果这解决了问题,并且虚拟设备在 Android Studio 中显示出来,您可以考虑永久更改
/etc/sysctl.d/99-sysctl.conf
net.ipv6.conf.all.disable_ipv6=1
Android 模拟器:模拟器终止,退出代码 134
如果在 Wayland 上运行,类似 AVD Pixel_4_API_33 的模拟器进程已终止
的图形错误可以通过使用 QT_QPA_PLATFORM=xcb
强制 X11 来解决。
adb: sideload connection failed: insufficient permissions for device
如果您收到以下错误
adb: sideload connection failed: insufficient permissions for device See [https://developer.android.com.cn/tools/device.html] for more information
或
adb: trying pre-KitKat sideload method... adb: pre-KitKat sideload connection failed: insufficient permissions for device See [https://developer.android.com.cn/tools/device.html] for more information
您或许可以通过重启 adb 服务器来解决此问题
$ adb kill-server # adb start-server
或者,请确保您已安装 Android udev 规则。请参阅 #Fastboot。