Android (简体中文)
浏览安卓设备
有多种方法浏览安卓设备:
更高阶的用法,开发、刷入固件和恢复固件等:
- ADB 工具包 广泛用于开发。
- 恢复 Android 用于刷入和恢复安卓固件(包括 fastboot)。
安卓开发
在Archlinux中开发安卓程序,需如下三步:
- 安装 Android SDK 核心组件,
- 安装一个或数个 Android SDK 特定平台软件包,
- 安装一个兼容 Android SDK 的 IDE
安卓 SDK 核心组件
在开发安卓程序之前,需要安装安卓 SDK。它由下列三组软件包组成,均可从 AUR 安装:
对于旧设备的支持, 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
获取 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。
~/.AndroidStudio1.2/studio64.vmoptions
文件中添加 -Dhidpi=true
能修复 HiDPI 缩放情况下文本超出控件边界的问题。一般会在 Android Studio 图形界面下编译应用,如果需要通过命令行编译应用 (使用诸如 ./gradlew assembleDebug
),需要在 ~/.bashrc
中添加:
export ANDROID_HOME=/opt/android-sdk
Eclipse
官方的但已经废弃的 Eclipse ADT 插件可以通过 eclipse-androidAUR[损坏的链接:package not found] 软件包安装。
在下面设置中设置 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 安装路径(默认是 /opt/android-sdk)。这样就行了,现在你可以在 Netbeans 里面创建和开发新的 Android 项目。
安卓调试桥 (ADB)
连接设备
要使用 安卓调试桥(ADB) 在 Arch 下连接真实设备,必须:
- 安装 android-tools。除此之外,如果希望为设备在
/dev/
中建立正确的节点,需安装 android-udev 软件包。 - 在手机或设备上启用 USB 调试:
- Jelly Bean (4.2)或更新版本:访问
Settings(设置) --> About Phone(关于手机)
,不停点击 “Build Number(版本号)” (7次),直到弹出消息提示开启了开发者选项。然后访问Settings(设置) --> Developer(开发者选项) --> USB debugging(USB 调式)
并启用它。 - 旧版本: 通常能通过
Settings(设置) --> Applications (应用程序)--> Development(开发者选项) --> USB debugging(USB调试)
。勾选后重启手机,确保 USB 调试已启用。 - 将用户加入组 adbusers。
- 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 移动开发者 提供了两个工具:
- Tegra 安卓开发包 提供了与Eclipse ADT相关的工具(NVIDIA 调试管理器)及文档。
- 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[损坏的链接:package not found] bc rsync ncurses5-compat-libsAUR lib32-zlib lib32-ncurses lib32-readline lib32-ncurses5-compat-libsAUR
在 aosp-develAUR 综合包提供了他们全部简易安装。
此外,LineageOS需要以下软件包:xml2AUR, lzop, pngcrush, imagemagick
它们可以与 lineageos-develAUR 元软件包一起安装。
Java Development Kit
所需的JDK版本取决于您正在构建的android版本:
- 对于Android 7和8(Nougat和 Oreo),OpenJDK 8是必需的,它与jdk8-openjdk软件包一起提供。
- 对于Android 5和6(Lollipop 和 Marshmallow),OpenJDK 7是必需的,它与jdk7-openjdk[损坏的链接:package not found]软件包一起提供。
旧版本需要 Oracle JDK 才能编译,不支持 OpenJDK。
- Gingerbread 到 KitKat (2.3 - 4.4) 需要 Java 6,可以通过 AUR 软件包 jdk6AUR 安装。
- Cupcake 到 Froyo (1.5 - 2.2) 需要 Java 5,可以通过 jdk7-openjdk[损坏的链接:package not found] 软件包安装。
/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 sync -j8 -c
-c
开关仅同步在 manifest 中指定的分支,它的内容由 -b
开关中指定的分支或者使用版本库维护者设置的默认分支来决定,。静候多时。未编译的源代码加上这些代码的 .repo
、.git
目录,大小会超过 10 GB。
$ repo sync
开始构建
AOSP 中需执行下列命令:
$ source build/envsetup.sh $ lunch full-eng $ make -j4
如果不添加任何参数运行 lunch,则会被询问想要创建什么样的 build。使用 -j 参e数加一个数字进行并行构建,数值介于CPU核数或线程数的 1 至 2 倍。
编译很耗时。
- 另外,你也可以不使用 fstab 里的 tmpfs 。
"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
某些情况下,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 相关步骤:
- 一同安装 VirtualBox 和它的 extension pack 和 guest additions.
- 使用 VirtualBox 在虚拟硬盘中安装你偏好的且与 Odin 适配的 Windows 操作系统(安装了 VirtualBox guest additions的)。
- 打开 VirtualBox 中 Windows 操作系统的设置,跳转至USB,然后勾选(或者确保它是被勾选的)Enable USB 2.0 (EHCI) Controller。
- 在 VirtualBox 中运行 Windows 操作系统,点击菜单栏中的Device ---> USB Devices,然后点击你已通过USB连接到电脑的 Samsung 移动设备。
Windows 相关链接:
如果你想确保一切都正常工作且准备就绪:
- 切换你的设备至下载模式,连接到你的 Linux 机器。
- 在虚拟机工具栏中, 选择
devices
-->USB
-->...Samsung...
设备。 - 打开 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`