# Android (简体中文)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

相关文章

- Android tethering

翻译状态：本文是 Android 的翻译。上次翻译日期：2016-09-26。如果英文版本有所更改，则您可以帮助同步翻译。

## 浏览安卓设备

有多种方法浏览安卓设备：

- MTP 协议可以用USB传输文件。
- 其它连接方法 (比如 FTP, SSH)。

更高阶的用法，开发、刷入固件和恢复固件等：

- ADB 工具包 广泛用于开发。
- 恢复 Android 用于刷入和恢复安卓固件（包括 fastboot）。

## 安卓开发

在Archlinux中开发安卓程序，需如下三步：

1. 安装 Android SDK 核心组件，
2. 安装一个或数个 Android SDK 特定平台软件包，
3. 安装一个兼容 Android SDK 的 IDE

### 安卓 SDK 核心组件

注意： 如果运行 64 位操作系统，你需要启用multilib软件源以避免安装时出现"error: target not found: lib32-zlib"报错信息。
注意： 如果你想要安装 #Android Studio 且使用其来管理你的SDK安装，你不需要安装以下软件包。

在开发安卓程序之前，需要安装安卓 SDK。它由下列三组软件包组成，均可从 AUR 安装：

1. android-sdkAUR
2. android-sdk-platform-toolsAUR
3. android-sdk-build-toolsAUR

对于旧设备的支持， android-supportAUR[断开的链接：package not found] 软件包是必需的。 软件包会安装到`/opt/android-sdk`。 这个目录需要 root 权限，所以你需要以 root 用户运行 sdk manager，否则你将无法修改这个目录中的内容。 如果打算以一般用户权限来访问，需要创建 android sdk 用户组（名称任意）：

    # groupadd sdkusers

然后将用户添加到这个组中：

    # gpasswd -a <user> sdkusers

修改目录所属的用户组：

    # chown -R :sdkusers /opt/android-sdk/

修改目录的权限，使得刚加入组中的用户也能在目录中写入：

    # chmod -R g+w /opt/android-sdk/

重新登录或者以 <user> 登录终端的用户组变为新建的组：

    $ newgrp sdkusers

注意： 除了上述 AUR 全局安装的方式，还可以参考上游说明将 SDK 安装到用户 home 目录。你也可以使用AUR中的 android-*-dummy 软件包来解决系统依赖。

### 获取 Android SDK 特定平台 API

从AUR安装所需的 Android SDK 特定平台软件包：

- android-platform-21AUR
- android-platform-20AUR
- android-platform-19AUR
- android-platform-18AUR
- android-platform-17AUR
- android-platform-16AUR
- android-platform-15AUR
- android-platform-14AUR

### 开发环境

如下所述，基于 IntelliJ IDEA 的 Android Studio 是新的官方开发环境，也可以使用 Eclipse + 官方不再支持的 ADT 插件，或者结合 NBAndroid 插件使用 Netbeans 进行开发。

#### Android Studio

Android Studio 是基于 IntelliJ Idea 的 Android 开发环境。它替代了原来的 Eclipse Android Developer Tools 插件，为开发和调试提供了集成环境。

你可以通过 AUR 中的 android-studioAUR 软件包下载并安装。若提示缺少 SDK，参考上节获取 Android SDK 特定平台 API。

注意： 如果使用了除i3wm之外的平铺窗口管理器，可能需要按 这里 描述的修复方法进行处理。
注意： 确保配置了 Java 环境 已正确配置，否则无法启动 android-studio。
注意： 如 这个 页面所述，安装 infinality-bundle[断开的链接：无效的部分] 并使用 AUR 中 infinality 打完补丁的 openJDK7 （jdk7-openjdk-infinalityAUR）或者 openJDK 8 （jdk8-openjdk-infinalityAUR）能修复 Android Studio 中糟糕的字体渲染问题，也可以使用 Infinality 非官方软件库[断开的链接：无效的部分] 中打完补丁的 OpenJDK8。
注意： 在 `~/.AndroidStudio1.2/studio64.vmoptions` 文件中添加 `-Dhidpi=true` 能修复 HiDPI 缩放情况下文本超出控件边界的问题。

一般会在 Android Studio 图形界面下编译应用，如果需要通过命令行编译应用 （使用诸如 `./gradlew assembleDebug`），需要在 `~/.bashrc` 中添加：

    export ANDROID_HOME=/opt/android-sdk

#### Eclipse

注意： 自 2014-12-08 起，官方已经不再建议使用 ADT 插件，官方的开发环境是 Android Studio。

官方的但已经废弃的 Eclipse ADT 插件可以通过 eclipse-androidAUR[断开的链接：package not found] 软件包安装。

注意：

- 如果你遇到了不可解析的依赖的错误信息，手动安装 Java 并重试。
- 另外，你也可以通过 eclipse 内置的 "add new software" 方法来安装 ADT（详见 ADT 网站的帮助）。
- 如果实在不行，你可以下载 Android SDK 并使用捆绑的 Eclipse，通常不再会有问题。
- 如果你需要安装不在 AUR 中的额外 SDK 组件，你必须先改变 /opt/android-sdk 中文件的所有者和权限，运行 `# chgrp -R users /opt/android-sdk ; chmod -R 0775 /opt/android-sdk` （详细信息可参见 文件权限）。

在下面设置中设置 Android SDK 路径：

    Windows -> Preferences -> Android

注意： 如果 AUR 软件包升级之后插件无法在 Eclipse 中显示出来，eclipse 可能使用了过期缓存。执行一次 `sudo eclipse -clean`。如果还是不行，就删除 Eclipse 及其所有插件，删除 `/usr/share/eclipse` 再重装。

#### Netbeans

如果想用 Netbeans 作为 Android 开发的 IDE，需要下载 NBAndroid[失效链接 2020-08-02 ⓘ]：

    Tools -> Plugins -> Settings

添加如下 URL：http://nbandroid.org/updates/updates.xml

然后到 Available Plugins 安装 IDE 版本对应的 Android 和 Junit 插件，安装后到：

    Tools -> Options -> Miscellaneous -> Android

设置 SDK 安装路径（默认是 /opt/android-sdk）。这样就行了，现在你可以在 Netbeans 里面创建和开发新的 Android 项目。

### 安卓调试桥 (ADB)

提示： 有些设备需要先启用 MTP 才能使用 ADB，而另一些设备需要启用 PTP。
提示： 许多设备的 udev 规则被包含在 libmtp，所以如果你已经安装此软件包，以下步骤是不必要的。

#### 连接设备

要使用 安卓调试桥(ADB) 在 Arch 下连接真实设备，必须：

1. 安装 android-tools。除此之外，如果希望为设备在 `/dev/` 中建立正确的节点,需安装 android-udev 软件包。
2. 在手机或设备上启用 USB 调试：
3. Jelly Bean （4.2）或更新版本：访问 `Settings（设置） --> About Phone（关于手机）`，不停点击 “Build Number（版本号）” （7次），直到弹出消息提示开启了开发者选项。然后访问 `Settings（设置） --> Developer（开发者选项） --> USB debugging（USB 调式）` 并启用它。
4. 旧版本： 通常能通过 `Settings（设置） --> Applications （应用程序）--> Development（开发者选项） --> USB debugging（USB调试）`。勾选后重启手机，确保 USB 调试已启用。
5. 将用户加入组 adbusers。
6. gpasswd -a username adbusers

如果 ADB 能识别你的设备 (在IDE中可以看见和访问）就行了，否则见下面的内容。

#### 手动查找设备 ID

每一个手机供应商都提供了 usb 厂商ID和产品ID，比如 HTC Evo 为：

    vendor id: 0bb4
    product id: 0c8d

连接设备并执行：

    $ lsusb

应该会出现类似的结果：

    Bus 002 Device 006: ID 0bb4:0c8d High Tech Computer Corp.

#### 添加 udev 规则

使用 Android developer 的规则，或者下面的模板，并用你的 [VENDOR ID] 和 [PRODUCT ID] 替换里面的值。 然后把这些规则复制到 `/etc/udev/rules.d/51-android.rules`：

    /etc/udev/rules.d/51-android.rules

    SUBSYSTEM=="usb", ATTR{idVendor}=="[VENDOR ID]", MODE="0666", GROUP="adbusers"
    SUBSYSTEM=="usb",ATTR{idVendor}=="[VENDOR ID]",ATTR{idProduct}=="[PRODUCT ID]",SYMLINK+="android_adb"
    SUBSYSTEM=="usb",ATTR{idVendor}=="[VENDOR ID]",ATTR{idProduct}=="[PRODUCT ID]",SYMLINK+="android_fastboot"

再加载刚定义的规则，运行：

    # udevadm control --reload-rules

确保你是 `adbusers` user group 的成员，以访问 `adb` 设备。

#### 配置 adb

除了使用 udev 规则外，也可以创建/编辑 `~/.android/adb_usb.ini`，里面包含了一个 vendor ID 的列表。

    $ cat ~/.android/adb_usb.ini
    0x27e8

#### 检测设备

配置了 udev 规则之后，拔掉设备然后重新连接，再运行：

    $ adb devices

可以看到类似的结果：

    List of devices attached
    HT07VHL00676    device

#### 使用方法

现在可以通过 adb 在设备和计算机间传输文件了。使用：

    $ adb push <what-to-copy> <where-to-place>

向设备传送文件，使用：

    $ adb pull <what-to-pull> <where-to-place>

从设备获取文件。

#### 注意事项和疑难杂症

- ADB 也可以通过 platform tools[断开的链接：无效的部分]（通常位于 `/opt/android-sdk/platform-tools/`）， 所以可能没有必要安装 android-tools（位于 `/usr/bin/`）

如果列表为空（设备没有找到），可能是因为设备上没有启用 USB 调试。可以到 设置 => 应用程序 => 开发 (Settings => Applications => Development) 来启用 USB 调试。Android 4.2 (Jelly Bean) 隐藏了开发者选项菜单，到 设置 => 关于手机 (Settings => About phone)，然后点击 Build number （版本号） 7 次来启用它。

若仍有问题，比如 adb 显示 `???????? no permissions`，尝试以 root 权限重启 adb 服务。

    # adb kill-server
    # adb start-server

### NVIDIA Tegra 平台专用工具

如果应用程序的目标平台是 NVIDIA Tegra 平台，可以安装 NVIDIA 提供的工具、文档和示例。NVIDIA 移动开发者 提供了两个工具：

1. Tegra 安卓开发包 提供了与Eclipse ADT相关的工具（NVIDIA 调试管理器）及文档。
2. Tegra Toolkit 提供了工具(大部分是 CPU 和 GPU 优化相关)，示例和文档。

因为 NVIDIA 现在需要先注册登录才能下载，所以两者均无法再从 AUR 获取。

## 构建 Android

请注意如下说明文档是基于官方 AOSP 构建说明的。其他基于 Android 的系统，如 LineageOS，通常需要额外的步骤。

### 需要的软件包

编译任意版本的安卓系统，都需要安装下列软件包：

- lib32-gcc-libs git gnupg flex bison gperf sdl wxgtk2 squashfs-tools curl ncurses zlib schedtool perl-switch zip unzip libxslt python2-virtualenv bc rsync ncurses5-compat-libsAUR lib32-zlib lib32-ncurses lib32-readline lib32-ncurses5-compat-libsAUR

在 aosp-develAUR 综合包提供了他们全部简易安装。

此外，LineageOS需要以下软件包：xml2AUR, lzop, pngcrush, imagemagick

它们可以与 lineageos-develAUR 元软件包一起安装。

The factual accuracy of this article or section is disputed.

Reason: The note below is not clear and probably incomplete. (Discuss in Talk:Android (简体中文)#)
注意： 安装 maven 和 gradle 去编译LineageOS可能会提高构建速度，因为构建过程优先使用系统的

### Java Development Kit

所需的JDK版本取决于您正在构建的android版本：

- 对于Android 7和8（Nougat和 Oreo），OpenJDK 8是必需的，它与jdk8-openjdk软件包一起提供。
- 对于Android 5和6（Lollipop 和 Marshmallow），OpenJDK 7是必需的，它与jdk7-openjdk软件包一起提供。

旧版本需要 Oracle JDK 才能编译，不支持 OpenJDK。

- Gingerbread 到 KitKat (2.3 - 4.4) 需要 Java 6，可以通过 AUR 软件包 jdk6AUR 安装。
- Cupcake 到 Froyo (1.5 - 2.2) 需要 Java 5，可以通过 jdk7-openjdk 软件包安装。

注意： Android希望Java在 `/usr/lib/jvm/java-version-openjdk-amd64`.

设置 JAVA_HOME 以避免此要求并匹配 Arch Linux 安装路径。 例:

    $ export JAVA_HOME=/usr/lib/jvm/java-version-openjdk

此更改仅对当前终端会话有效。

### 配置构建环境

安装 repo 软件包。

创建一个用于构建的目录：

    $ mkdir ~/android
    $ cd ~/android

需要把默认的 python 从 3.X 版切换到 2.X 版：

    $ virtualenv2 venv
    $ source venv/bin/activate

注意：

- 此激活仅对当前终端会话有效。虚拟环境将保存在 `venv` 文件夹中。
- 在构建期间，您可能会收到与缺少的python模块有关的错误。 一个快速而肮脏的修复方法是 symlink /usr/lib/python2.7/* 到 ~/android/venv/lib/python2.7/ (如果与上面不同，请更改 ~/android 以反映您的构建目录).

例:

    $ ln -s /usr/lib/python2.7/* ~/android/venv/lib/python2.7/

或 (假设构建 Data/Android_Build):

    $ ln -s /usr/lib/python2.7/* /Data/Android_Build/venv/lib/python2.7/

### 下载源代码

克隆整个代码库。你 仅 需在初次构建安卓或者切换分支时执行这一步。

- `repo` 有一个 `-j` 选项，用法与 `make` 的相似。它决定了下载的线程数，你可以根据下载带宽进行调整。

- 你需要通过 `-b` 选项指定要检出的分支（安卓版本）。若不指定，会检出所谓的master 分支。

    $ repo init -u https://android.googlesource.com/platform/manifest -b master
    $ repo sync -j4

注意： 为尽一步减少下载时间，可以像下面使用repo 命令的 -c 开关：

    $ repo sync -j8 -c

`-c` 开关仅同步在 manifest 中指定的分支，它的内容由 `-b` 开关中指定的分支或者使用版本库维护者设置的默认分支来决定，。

静候多时。未编译的源代码加上这些代码的 `.repo`、`.git` 目录，大小会超过 10 GB。

注意： 若之后要更新本地的安卓代码，只要进入编译目录，载入 Virtualenv，然后重新同步：

    $ repo sync

### 开始构建

AOSP 中需执行下列命令：

    $ source build/envsetup.sh
    $ lunch full-eng
    $ make -j4

如果不添加任何参数运行 lunch，则会被询问想要创建什么样的 build。使用 -j 参e数加一个数字进行并行构建，数值介于CPU核数或线程数的 1 至 2 倍。

编译很耗时。

注意： 确保你有足够的内存，推荐 4GB 以上的内存。Android 会大量使用 /tmp 目录。默认情况下，/tmp 目录所挂载的分区大小是内存的一半，分区满时编译会失败。

- 另外，你也可以不使用 fstab 里的 tmpfs 。

注意： 根据 Android Building and Running guide[失效链接 2020-08-02 ⓘ]：

"GNU make 使用 -jN 参数处理并行任务，编译时通常会使用界于 1 到 2 倍计算机硬件的线程数。例如，在 dual-E5520 机器上 （2 个 CPU, 每个 CPU 4核，每个核双线程），使用界于 make -j16 到 make -j32 的命令进行编译会最快。"

### 测试镜像

完成之后，运行并测试最终的映像。

    $ emulator

### 创建可烧录镜像

通过下列命令创建可烧录的镜像：

    make -j8 updatepackage

它会在 out/target/product/hammerhead （其中的 hammerhead 是设备名）生成一个可烧录的文件.

## 恢复 Android

This article or section needs expansion.

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:Android (简体中文)#)

某些情况下，Android 设备刷了某些定制 ROM 后想刷回官方的 Android 固件，可以访问 XDA 论坛 获取刷机的帮助。

### Fastboot

official repositories 中的 android-tools 软件包提供了 Fastboot（以及ADB[断开的链接：无效的部分]）。

注意： 通过 `fastboot` 重置固件是十分需要技巧的。你可以浏览 XDA developers forums 以获取官方固件,通常是一个 `*.zip` 文件，但其中包含着固件文件和 `flash-all.sh` 脚本。例如，Google Nexus 附件包括 `flash-all.sh` 脚本.另一个例子， OnePlus One - XDA thread，其中你可以找到包含着 `flash-all.sh` 脚本的固件。

### Samsung

Samsung 设备不支持通过 Fastboot' 工具烧录。可选择的工具只有 Heimdall 和 Odin （通过使用 Windows 和 VirtualBox）。

#### Heimdall

Heimdall 是一个跨平台用于在三星移动设备上烧录固件（也称作ROMS）的开源工具，它也是以Odina 的备选方案为人而知。 它可以通过 heimdall 或 heimdall-gitAUR 软件包被安装。

烧路说明位于 Heimdall 的 GitHub page 或 XDA forums。

#### Odin (Virtualbox)

Heimdall 是一个跨平台用于在三星移动设备上烧录固件（也称作ROMS）的开源工具，它也是以Odina 的备选方案为人而知。 它可以通过 heimdall 或 heimdall-gitAUR 软件包被安装。

烧路说明位于 Heimdall 的 GitHub page 或 XDA forums。

Arch Linux 相关步骤：

1. 一同安装 VirtualBox 和它的 extension pack 和 guest additions.
2. 使用 VirtualBox 在虚拟硬盘中安装你偏好的且与 Odin 适配的 Windows 操作系统（安装了 VirtualBox guest additions的）。
3. 打开 VirtualBox 中 Windows 操作系统的设置，跳转至USB，然后勾选（或者确保它是被勾选的）Enable USB 2.0 (EHCI) Controller。
4. 在 VirtualBox 中运行 Windows 操作系统，点击菜单栏中的Device ---> USB Devices，然后点击你已通过USB连接到电脑的 Samsung 移动设备。

Windows 相关链接：

- Samsung 驱动可以从 here 下载。
- Odin can 可以从 here 下载。
- Samsung 安卓固件可以从 here 下载。

如果你想确保一切都正常工作且准备就绪：

1. 切换你的设备至下载模式,连接到你的 Linux 机器。
2. 在虚拟机工具栏中， 选择 `devices` --> `USB` --> `...Samsung...` 设备。
3. 打开 Odin.名为Message的对话框，将打印类似于。

    <ID:0/003> Added!!

的信息 这意味着你的设备对于 Odin 是可见的，且是准备就绪烧录的。

{{注意|不存在关于重置 Samsung 移动设备固件的通用说明。你必须通过 Google 和 XDA developers forums 来找到特定设备的烧录说明。例如， 这个帖子 是关于Samsung Galaxy S4 设备的。

## 其它连接方法

### adb-sync

adb-sync （可通过 adb-sync-gitAUR 安装）是一个使用 ADB 协议，用于在 PC 和安卓设备间同步文件的工具。

### AirDroid

AirDroid 可以通过网页浏览器访问设备。

### AndroidScreencast

AndroidScreencast 是被开发用于从 PC 显示和控制你的安卓设备（使用ADB）。

### FTP

在 Arch 上建立 FTP 服务器并通过手机访问，或者在手机上运行 FTP 服务并在 Arch 上连接。 参阅 List of applications/Internet#FTP。Android 上有许多 FTP 客户端/服务端应用。

### KDE Connect

kdeconnect 集成了你的安卓设备和 KDE 桌面，它的功能包括同步通知，同步剪贴板，多媒体控制，和文件/URL共享。

### SSH 服务器

Android 上有很多 SSH 服务器（应用），可以通过 `scp` 命令传输文件，参见 SSH.

### Samba

See Samba.

## 技巧和提示

### 调试时出现 "Source not found"

一般这时调试器正在单步进入（Step into） Java 代码。而 Android SDK 并不提供 Java 源代码，所以导致了错误。最好的解决方法是设置单步过滤器，不要跳转到（jump into） Java 源代码。单步过滤器默认没有启动，通过如下方式设置：

    Window -> Preferences -> Java -> Debug -> Step Filtering

可以全选，此外还可以酌情添加 android.* 软件包。以下的论坛贴有更详细信息：

http://www.eclipsezone.com/eclipse/forums/t83338.rhtml

### 在 sd 卡上安装 Linux 发行版

可以参照这篇 贴子 安装 Debian，archlinuxarm.org上有在 chroot 环境下安装（与 Android 并存）的详细介绍。

## 疑难杂症

### Android Studio: Android Virtual Devices show 'failed to load'.

确保你已经设置了 #Android Studio 中说明的 `ANDROID_HOME` 环境变量。

### aapt: No such file or directory

安装工具包含 32 位程序，需要 32 位的库。如果是手动安装 SDK，还需要安装 multilib/lib32-libstdc++5AUR 和 multilib/lib32-zlib。

### ValueError: unsupported pickle protocol

一种修复方法：

    rm ~/.repopickle_.gitconfig

如果不起效，试试这样：

    rm `find /path/to/android-root -name .repopickle_config`

Categories:

- Android (简体中文)
- Development (简体中文)

Hidden categories:

- Pages with broken package links
- Pages with broken section links
- Pages with dead links
- Pages or sections flagged with Template:Accuracy
- Pages or sections flagged with Template:Expansion