# Android (简体中文)

相关文章

- Android notifier
- Android tethering

翻译状态： 本文是英文页面 Android 的翻译，最后翻译时间：2015-06-20，点击这里可以查看翻译后英文页面的改动。

## 浏览安卓设备

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

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

更高阶的用法，开发、刷机等：

- ADB 工具包 广泛用于开发。
- 恢复系统 用于刷机和恢复安卓固件（包括 Fastboot）。

## Archlinux 环境下开发安卓

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

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

### 安卓开发平台核心组件

注意: 如果运行 64 位操作系统，你需要启用multilib软件源，才能用 pacman 安装需要的依赖软件包。否则安装时出现的"error: target not found: lib32-zlib"报错信息会烦死你。

在开发安卓程序之前，需要安装安卓平台，由下方三组软件包组成，均可从 AUR 安装:

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

软件包会安装到`/opt/android-sdk`. 这个目录是 root 权限，所以需要以 root 执行 sdk. 否则无法安装和更新 /opt/android-sdk 中的内容。如果要一般用户访问，需要给用户读写权限。

Note: 除了上述 AUR 全局安装的方式，还可以参考上游说明将 SDK 安装到用户家目录。

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

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

- android-platformAUR (最新)
- android-platform-21AUR
- android-platform-20AUR
- android-platform-19AUR
- android-platform-18AUR
- android-platform-17AUR
- android-platform-16AUR
- android-platform-15AUR
- android-platform-14AUR
- android-platform-13AUR
- android-platform-12AUR
- android-platform-11AUR
- android-platform-10AUR
- android-platform-9AUR
- android-platform-8AUR
- android-platform-7AUR
- android-platform-7AUR
- android-platform-6AUR
- android-platform-5AUR
- android-platform-4AUR
- android-platform-3AUR
- android-platform-2AUR

### 开发环境

Android Studio 是新的开发环境，基于 IntelliJ IDEA。更传统的一个集成开发环境是不再支持的 ADT 插件 + Eclipse。另外，安装下述的插件之后，也可以使用 Netbeans 进行开发。

#### Android Studio

Android Studio 是基于 IntelliJ IDEA 的 Android 开发环境。类似于安装了 ADT 插件的 Eclipse，Android Studio 为开发和调试提供了集成的 Android 开发者工具。

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

如果使用平铺窗口管理器，需要按 这里 进行处理。

#### Eclipse

Note: 从 2014-12-08 开始，官方已经不再建议使用 ADT 插件，官方的开发环境是 Android Studio.

在 Eclipse 中开发 Android 需要的大部分软件 AUR 已经有了:

谷歌官方插件 – Eclipse ADT:

1. eclipse-androidAUR

依赖:

1. eclipse-emfAUR
2. eclipse-gefAUR
3. eclipse-wtp-wstAUR

注意:

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

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

    Windows -> Preferences -> Android

如果插件未显示出来，可能是缓存过时。执行命令 `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 安装路径。 这样就行了，现在你可以在 Netbeans 里面创建和开发新的 Android 项目。

### 连接一台真实设备 —— 安卓调试桥 (ADB)

Tip: 有些设备需要先启用 MTP 才能使用 ADB。

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

- 在手机或设备上启用 USB 调试。 通常在 `设置 --> 应用程序 --> 开发者 --> USB 调试`。勾选后重启手机，确保 USB 调试已启用 (若无此选项，此步可能不适用于你的安卓版本)
- 安装软件包l android-udev，为设备在 `/dev/` 建立正确的节点。
- 将用户加入组 adbusers. (`gpasswd -a username adbusers`)

#### 使用现有规则

从 官方软件仓库 安装 android-udev 可以获得常见 vendor ID 列表。如果 ADB 可以找到设备（在IDE中可以看见和访问），这项就完成了；否则，见下面的内容。

#### 手动查找设备 ID

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

    vendor id: 0bb4
    product id: 0c8d

使用usb连接ArchLinux（使用充电模式），在终端上运行：

    $ 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"
    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

#### 它有效吗？

配置了 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 程序(通常位于`/opt/android-sdk/platform-tools/`)，可能是没有安装平台工具。

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

若仍有问题，比如 adb 显示 `???????? no permissions`，尝试使用 root 重启 adb 服务器。

    # adb kill-server
    # adb start-server

#### 配置 adb

除了使用 udev 规则之外，你也可以创建/编辑 ~/.android/adb_usb.ini，使它包含厂商 id 的列表。

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

### NVIDIA Tegra 平台专用工具

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

1. Tegra 安卓开发包 提供了 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

### Java Development Kit

Android 5 (Lollipop) 可以使用 jdk7-openjdk 编译.

老的版本 需要 Oracle JDK 才能编译，不支持OpenJDK.

- Gingerbread 到 KitKat (2.3 - 4.4), 需要 Java 6，可以通过 AUR软件包 jdk6AUR 安装。详情参阅 Java。

- Cupcake 到 Froyo (1.5 - 2.2), 需要 Java 5， Arch Linux 已经不再支持。

### 配置构建环境

下载 `repo` 工具。

    $ mkdir ~/bin
    $ export PATH=~/bin:$PATH
    $ curl http://commondatastorage.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`、`.git` 目录，大小已经超过 10 GB。

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

    $ repo sync

### 开始构建

AOSP中需执行如下命令：

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

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

编译很耗时。

注意: 确保你有足够的内存。

Android 会大量使用 /tmp。默认情况下，/tmp 目录所挂载的分区大小是内存的一半。如果它满了，那么编译会失败。推荐 4GB 以上的内存。

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

### 测试镜像

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

    $ emulator

### 创建可烧录镜像

    make -j8 updatepackage

这个命令会在 out/target/product/hammerhead (hammerhead being the device name) 生成一个可烧录文件.

## 其它连接方法

### AirDroid

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

### FTP

可以在 Arch 上建立 FTP 并通过手机访问参阅 List of applications/Internet#FTP.

### SSH 服务器

Android 上有很多 SSH 服务器，可以通过 `scp` 命令操作，参见 SSH.

### Samba

See Samba.

## 技巧和提示

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

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

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

可以全选，此外还可以添加 android.* 软件包。下面贴子有更详细信息: http://www.eclipsezone.com/eclipse/forums/t83338.rhtml

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

可以参照这篇贴子安装 Debian，archlinuxarm.org上有 Arch linux 安装方法的详细介绍。

## 文件处理

### aapt: No such file or directory

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

Categories:

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