Android (简体中文)
Contents
浏览安卓设备
有多种方法浏览安卓设备:
- MTP 协议可以用USB传输文件。
- 其他连接方法[broken link: invalid section] (比如 FTP, SSH)。
更高阶的用法,开发、刷机和恢复等:
- ADB 工具包 广泛用于开发。
- 恢复系统[broken link: invalid section] 用于刷机和恢复安卓固件(包括 fastboot)。
安卓开发
在Archlinux中开发安卓程序,需如下三步:
- 安装 Android SDK 核心组件,
- 安装一个或数个 Android SDK 特定平台软件包,
- 安装一个兼容 Android SDK 的 IDE
安卓 SDK 核心组件
在开发安卓程序之前,需要安装安卓 SDK。它由下列三组软件包组成,均可从 AUR 安装:
软件包会安装到/opt/android-sdk
。
这个目录需要 root 权限,所以你需要以 root 用户运行 sdk manager,否则你将无法安装/更新/修改 /opt/android-sdk 中的内容。
如果打算以一般用户权限来访问,需要创建一个 android sdk 用户组(名称任意):
# groupadd sdkusers
然后将用户添加到这个组中:
# gpasswd -a <user> sdkusers
修改目录所属的用户组:
# chown -R :sdkusers /opt/android-sdk/
修改目录的权限,使得刚加入组中的用户也能在目录中写入:
# chmod -R g+w /opt/android-sdk/
重新登录或者以 <user> 登录终端的用户组变为新建的组:
$ newgrp sdkusers
获取 Android SDK 特定平台 API
从AUR安装所需的 Android SDK 特定平台软件包:
- android-platformAUR (最新)
- android-platform-23AUR
- android-platform-22AUR
- 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[broken link: archived in aur-mirror]
- android-platform-12AUR[broken link: archived in aur-mirror]
- android-platform-11AUR[broken link: archived in aur-mirror]
- android-platform-10AUR[broken link: archived in aur-mirror]
- android-platform-9AUR[broken link: archived in aur-mirror]
- android-platform-8AUR[broken link: archived in aur-mirror]
- android-platform-7AUR[broken link: archived in aur-mirror]
- android-platform-7AUR[broken link: archived in aur-mirror]
- android-platform-6AUR[broken link: archived in aur-mirror]
- android-platform-5AUR[broken link: archived in aur-mirror]
- android-platform-4AUR[broken link: archived in aur-mirror]
- android-platform-3AUR[broken link: archived in aur-mirror]
- android-platform-2AUR[broken link: archived in aur-mirror]
开发环境
如下所述,基于 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。
一般会在 Android Studio 图形界面下编译应用,如果需要通过命令行编译应用 (使用诸如 ./gradlew assembleDebug
),需要在 ~/.bashrc
中添加:
export ANDROID_HOME=/opt/android-sdk
Eclipse
在 Eclipse 中开发 Android 所需的大部分软件在 AUR 已经有了:
谷歌官方插件 – Eclipse ADT:
依赖:
- eclipse-emfAUR
- eclipse-gefAUR
- eclipse-wtpAUR
在下面设置中设置 Android SDK 路径:
Windows -> Preferences -> Android
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)
要使用 安卓调试桥(ADB) 在 Arch 下连接真实设备,必须:
- 安装 android-tools。
- 在手机或设备上启用 USB 调试:
- Jelly Bean (4.2)或更新版本:访问
Settings(设置) --> About Phone(关于手机)
,不停点击 “Build Number(版本号)” (约10次),直到弹出消息提示开启了开发者选项。然后访问Settings(设置) --> Developer(开发者选项) --> USB debugging(USB 调式)
并启用它。 - 旧版本: 通常能通过
Settings(设置) --> Applications (应用程序)--> Development(开发者选项) --> USB debugging(USB调试)
。勾选后重启手机,确保 USB 调试已启用。
- Jelly Bean (4.2)或更新版本:访问
- 安装软件包 android-udev,为设备在
/dev/
中建立正确的节点。 - 将用户加入组 adbusers。 (
gpasswd -a username adbusers
)
如果 ADB 能识别你的设备[broken link: invalid section] (在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
配置 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 程序,可能是因为没有安装 平台工具[broken link: invalid section](通常位于/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 移动开发者 提供了两个工具:
- Tegra 安卓开发包 提供了与Eclipse ADT相关的工具(NVIDIA 调试管理器)及文档。
- 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
- AUR 软件包:libtinfoAUR
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 已经不再支持。
配置构建环境
按 Android Downloading the Source guide 下载 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。
$ 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。
开始构建
AOSP 中需执行下列命令:
$ source build/envsetup.sh $ lunch full-eng $ make -j4
如果不添加任何参数运行 lunch,则会被询问想要创建什么样的 build。使用 -j 参e数加一个数字进行并行构建,数值介于CPU核数或线程数的 1 至 2 倍。
编译很耗时。
测试镜像
完成之后,运行并测试最终的映像。
$ emulator
创建可烧录镜像
通过下列命令创建可烧录的镜像:
make -j8 updatepackage
它会在 out/target/product/hammerhead (其中的 hammerhead 是设备名)生成一个可烧录的文件.
恢复 Android
某些情况下,Android 设备刷了某些定制 ROM 后想刷回官方的 Android 固件,可以访问 XDA 论坛 获取刷机的帮助。
Fastboot
official repositories 中的 android-tools 软件包提供了 Fastboot(以及ADB[broken link: invalid section])。
Samsung
Samsung 不支持 fastboot。Odin 比 Heimdall 用起来更容易安全和容易.
Heimdall
Heimdall is a cross-platform open-source tool suite used to flash firmware (also known as ROMs) onto Samsung mobile devices and is also known as an alternative to Odin. It can be installed as heimdall or heimdall-gitAUR.
The flashing instructions can be found on Heimdall's GitHub page or on XDA forums.
Odin (Virtualbox)
It is also possible to restore stock Android on the Samsung devices using Odin, but inside the VirtualBox. For more information, see XDA thread.
Arch Linux related steps:
- Install VirtualBox together with its extension pack. Optionally, install guest additions.
- Install your preferred, but compatible with Odin, Windows operating system into a virtual hard drive using VirtualBox. Optionally, install guest additions to the Windows operating system.
- Open VirtualBox settings of your Windows operating system, navigate to USB, then tick (or make sure it is ticked) Enable USB 2.0 (EHCI) Controller.
- At VirtualBox running Windows operating system, click in the menu bar Devices, then USB Devices, then click on your Samsung mobile device connected to your computer via USB.
Windows related links:
- Samsung drivers can be downloaded from here.
- Odin can be downloaded from here.
- Samsung Android firmwares can be downloaded from here.
If you want to make sure that everything is working and ready, connect your Samsung device turned on into a Download mode, and open Odin. The white box (a big one at the bottom-left) named Message, should print a line similar to this:
<ID:0/003> Added!!
which means that your device is visible to Odin and is ready to be flashed.
其它连接方法
AirDroid
AirDroid 可以通过网页浏览器访问设备。
FTP
在 Arch 上建立 FTP 服务器并通过手机访问,或者在手机上运行 FTP 服务并在 Arch 上连接。 参阅 List of applications/Internet#FTP。Android 上有许多 FTP 客户端/服务端应用。
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 并存)的详细介绍。
疑难杂症
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`