# Android (简体中文)

相关文章

- Android notifier
- 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 软件包是必需的。 软件包会安装到`/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 软件包安装。

注意:

- 如果你遇到了不可解析的依赖的错误信息，手动安装 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：

    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` 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 的系统，如 CyanogenMod，通常需要额外的步骤。

### OS 位数

只有安卓 2.2.x (Froyo) 和更早的版本需要在 32 位系统中构建。而2.3.x (Gingerbread) 之后，则需要 64 位系统。

### 需要的软件包

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

- 32位和64位系统：gcc git gnupg flex bison gperf sdl wxgtk squashfs-tools curl ncurses zlib schedtool perl-switch zip unzip libxslt python2-virtualenv bc

- 仅64位系统：gcc-multilib lib32-zlib lib32-ncurses lib32-readline

- AUR 软件包 32位和64位系统： ncurses5-compat-libsAUR

- AUR 软件包 仅64位系统： lib32-ncurses5-compat-libsAUR

注意: ncurses5-compat-libsAUR 和 lib32-ncurses5-compat-libsAUR 的 PGP 签名可能会引起错误，可以通过手动导入以下签名解决：

$ gpg --recv-keys 702353E0F7E48EDB

要编译 Android 6+，你需要安装以下额外的软件包：

- 32位和64位系统： rsync

Note: CyanogenMod 从13.0版本起使用了Maven构建工具，要编译 CyanogenMod，需要安装 maven软件包

### Java Development Kit

Android 7 (Nougat) 可以使用 jdk8-openjdk 编译。[1]

- Android 5 和 6 （Lollipop 和 Marshmallow）需要OpenJDK 7，可以通过 jdk7-openjdk 软件包安装。

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

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

。

### 配置构建环境

安装 repo 软件包，然后：

    $ mkdir ~/bin
    $ export PATH=~/bin:$PATH
    $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    $ chmod a+x ~/bin/repo

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

    $ mkdir ~/android
    $ cd ~/android

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

    $ virtualenv2 venv # 创建一个包含 Virtualenv 的目录 venv

{{注意|编译时可能报缺少 python 模块，可以通过链接 /usr/lib/python2.7/* 到 ~/android/venv/python2.7/ 来解决，实际路径按照虚拟环境的路径确定。

激活 Virtualenv，使得 $PATH 指向 Python 2。

Note: 虚拟环境仅在当前终端有效。

    $ source venv/bin/activate

### 下载源代码

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

- `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：

"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[broken link: invalid section]）。

注意: 通过 `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++5 和 multilib/lib32-zlib。

### ValueError: unsupported pickle protocol

一种修复方法：

    rm ~/.repopickle_.gitconfig

如果不起效，试试这样：

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

Categories:

- 简体中文
- Development (简体中文)
- Mobile devices (简体中文)

Hidden categories:

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