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 在主目录中创建一个 .android
目录。要重置 Android Studio,可以删除此目录。
- 确保您正确设置 Java 环境,否则 android-studio 将无法启动。但是,在新版本中,Java 默认包含,因此无需这样做;请参阅#Java 开发工具包。
- 如果 Android Studio 显示为空白窗口,请尝试导出
_JAVA_AWT_WM_NONREPARENTING=1
,请参阅问题 #57675。
Android Studio 安装向导安装所需的 #SDK 软件包,并将 SDK 默认放置在 ~/Android/Sdk
中。
要从命令行构建应用程序(例如,使用 ./gradlew assembleDebug
),请将 ANDROID_HOME 环境变量设置为您的 SDK 位置。
Android Studio 自 2024.2 版本起具有实验性的 Wayland 支持,您可以通过转到 菜单 -> 帮助 -> 编辑自定义 VM 选项
并添加 -Dawt.toolkit.name=WLToolkit
作为参数来启用它。
SDK 软件包
Android SDK 软件包可以直接从上游使用 #Android Studio 的 SDK 管理器或 sdkmanager 命令行工具(Android SDK 工具的一部分)安装。一些 Android SDK 软件包也可以作为 AUR 软件包使用,它们通常安装到 /opt/android-sdk/
。
Android SDK 软件包 | SDK 风格路径 | AUR 软件包 | AUR 占位包 | CLI 工具 |
---|---|---|---|---|
命令行工具 | tools | android-sdk-cmdline-tools-latestAUR | android-sdk-cmdline-tools-latest-dummyAUR | apkanalyzer、avdmanager、lint、retrace、screenshot2、sdkmanager |
SDK 构建工具 | build-tools;version | 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-level | 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 占位包列的 AUR 软件包以拉取所需的依赖项。
- 如果您在尝试运行
sdkmanager
时收到java.lang.NoClassDefFoundError
异常,请临时使用 OpenJDK 8 的 JRE,方法是安装 jre8-openjdk 软件包并切换 Java 环境。请参阅使用 Java 9 运行 sdkmanager --list 失败
Android 模拟器
Android 模拟器作为 emulator
SDK 软件包、android-emulatorAUR 软件包提供,并且还有一个用于它的占位软件包:android-emulator-dummyAUR。
要运行 Android 模拟器,您需要 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
开关检出。如果您省略该开关,您将获得所谓的 master 分支。
$ 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 的可用磁盘空间。
$ repo sync
构建代码
这应该可以满足 AOSP 的需求
$ source build/envsetup.sh $ lunch full-eng $ make -j4
如果您在没有参数的情况下运行 lunch,它会询问您要创建哪个构建。将 -j 与一到两倍内核/线程数的数字一起使用。
构建需要很长时间。
- 确保您有足够的 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 移动设备后返回到 stock Android。有关您设备的刷写说明,请使用 XDA 论坛。
Fastboot
Fastboot(以及 ADB)包含在 android-tools 软件包中。
- 使用
fastboot
恢复固件可能非常棘手,但您可能需要浏览 XDA 开发者论坛以查找 stock 固件,这通常是一个*.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 在 VirtualBox 内恢复三星设备上的 固件 (Android)。
Arch Linux(主机)准备
- 安装 VirtualBox 及其 扩展包 和 增强功能。
- 使用 VirtualBox 将您首选的但与 Odin 兼容的 Windows 操作系统(带有 VirtualBox 增强功能)安装到虚拟硬盘驱动器中。
- 打开 Windows 操作系统的 VirtualBox 设置,导航到USB,然后勾选(或确保已勾选)启用 USB 2.0 (EHCI) 控制器。
- 在 VirtualBox 运行的 Windows 操作系统中,单击菜单栏中的设备 > USB 设备,然后从列表中单击通过 USB 连接到计算机的三星移动设备。
Windows(虚拟机)准备
- 安装 三星驱动程序。
- 安装 Odin。
- 为您的智能手机型号下载所需的 三星固件 (Android)。
检查配置是否正常工作
- 将您的设备置于下载模式并连接到您的 Linux 机器。
- 在虚拟机工具栏中,选择设备 > USB > ...Samsung... 设备。
- 打开 Odin。名为 Message 的白色框(左下角的一个大框)应打印类似于以下内容的一行
<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 扩展程序可以运行安卓应用
- Arc Welder 是 Google 的一个扩展程序,用于测试应用在 Chrome 操作系统上的运行情况,但现已停止维护。
- ARChon 是一个未维护的开源扩展程序,用于在基于 Chromium 的浏览器上运行安卓应用。截至 2023 年 7 月,示例应用无法工作,因为“旧版本的 Chrome 应用在 2022 年后将无法在 Linux 设备上打开”。
- 当然,也可以运行完整的安卓模拟器。这样做的一个优点是您可以在 x86 上运行 arm 应用。缺点是性能较差。例如:
- Android Studio 的内置模拟器,正如本文前面提到的。
- Genymotion 是一套付费的安卓模拟/测试套件。
- 还有一些基于 Android 的 x86_64 兼容操作系统镜像,可以在常见的虚拟机(包括带有 VirtIO GPU 的 KVM)或裸机上运行。
- Bliss OS 是一个基于 Android 的开源操作系统,集成了许多优化和功能,预装了 KernelSU root 权限。还包括 ARM 模拟。
- 对于旧版本的 Android,请参阅 Android-x86。
故障排除
Android Studio:Android 虚拟机设备显示“加载失败”。
请确保您已导出变量 ANDROID_HOME
,如 #Android Studio 中所述。
Android Studio:“创建 SD 卡失败”
如果您尝试在 x86_64 Arch 下运行 AVD(Android 虚拟机设备)并收到上述错误,请从 multilib 仓库安装 lib32-gcc-libs 软件包。
Eclipse:调试期间“找不到源文件”
很可能是调试器想要步入 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 无法加载且不显示错误消息
有时,开始加载 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 行 桌面条目#修改环境变量
env ANDROID_EMULATOR_USE_SYSTEM_LIBS=1
sh: glxinfo: command not found
以下是完整错误信息:
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,类似 The emulator process for AVD Pixel_4_API_33 has terminated
的图形错误可以通过使用 QT_QPA_PLATFORM=xcb
强制使用 X11 来解决。
adb:侧载连接失败:设备权限不足
如果您收到错误
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。