Android (简体中文)
Contents |
Archlinux 环境下开发安卓
共有三个部分需要构建:
- Android SDK 核心组件,
- Android SDK 特定平台软件包,
- 开发环境
安装安卓开发平台核心组件
在开发安卓程序之前,至少需要一个安卓平台。可以从 AUR 安装核心 SDK 组件:
默认会安装到 /opt/android-sdk。
获取 Android SDK 特定平台软件包
在安装完核心组件后,还需要构建特定系统的平台,也就是安装特定组件,方法有三种:自动、从AUR安装、手工安装。
自动安装
通过 Android SDK Manager 自动安装,执行(假设环境变量$PATH中包含了 Android SDK tools 的目录):
$ android
或者:
$ <path_to_android-sdk>/tools/android
如果你碰到这个错误 'Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: peer not authenticated',你需要在选项中并勾选 'Force https:// sources to be fetched using http://'。
如果自动安装出错,那么你必须用以下的"一种"办法:
- 用更高的权限运行 android 工具:
# android
- 设置你的用户帐户为目录的所有者。要改变所有 SDK 目录的所有者 ID,以 root 权限运行以下命令:
# chown -R $USER /opt/android-sdk
- 改变目录的组ID(多个用户使用时推荐这个方法),首先创建一个组,可以称它为 android,把你添加到这个组中:
# groupadd android # gpasswd -a $USER android
接下来,改变目录的权限:
# chgrp -R android /opt/android-sdk
# chmod -R g+w /opt/android-sdk
# find /opt/android-sdk -type d -exec chmod g+s {} \;
最后一个命令在所有子目录上设置了 setgid 标志,这样所有这些目录中新创建的文件也会继承适当的组 ID。
然后重新运行
$ android
一步一步地自动安装参见: 安装 SDK 组件。
从 AUR 中安装
AUR 目前包含了多个安卓平台的包,不过有些互相重复且/或一些文件的权限设置得不正确。
手动安装
手动安装:
- 下载需要开发的平台版本。此网站提供了许多 Android SDK 组件的下载链接。
- 解压到
/<path_to_android-sdk>/platforms。
现在应该能够在 Android SDK Manager 里看到安装的平台了。
搭建开发平台
Android Studio 是一个全新的(实验性的!)基于 IntelliJ IDEA 的 Android 开发环境。更传统的一个集成开发环境是包含 ADT 插件及相关软件包的 Eclipse。另外,安装下述的插件之后,也可以使用 Netbeans 进行开发。
Android Studio
Android Studio 是一个全新的(实验性的!)基于 IntelliJ IDEA 的 Android 开发环境。类似于安装了 ADT 插件的 Eclipse,Android Studio 为开发和调试提供了集成的 Android 开发者工具。
你可以下载并安装 AUR 中的 android-studio 软件包。
Eclipse
在 Eclipse 中开发 Android 需要的大部分软件 AUR 已经有了:
谷歌官方插件 – Eclipse ADT:
依赖:
在下面设置中设置 Android SDK 路径:
Windows -> Preferences -> Android
Netbeans
如果想用 Netbeans 作为 Android 开发 IDE,需要下载 nbandroid:
Tools -> Plugins -> Settings
添加如下 URL: http://nbandroid.org/release72/updates/updates.xml
然后到 Available Plugins 安装 IDE 版本对应的 Android 和 Android Test Runner 插件
如果你在 Netbeans 7.2 中碰到了 "org.netbeans.modules.gsf.testrunner was needed and not found." 的问题,请移除 Android 和 Android Test Runner插件,然后更改 nbandroid 的 url 为: http://nbandroid.org/release72/updates/updates.xml,更新源之后,你只需要安装 Android。
安装后到:
Tools -> Options -> Miscellaneous -> Android
设置 SDK 安装路径。 这样就行了,现在你可以在 Netbeans 里面创建和开发新的 Android 项目。
连接一台真实设置 —— 安卓调试桥 (ADB)
要使用 安卓调试桥(ADB) 在 Arch下连接设备,必须为 /dev/ 添加udev规则。
使用现有规则
安装 AUR 软件包 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 程序(通常位于/opt/android-sdk/platform-tools/),可能是没有安装平台工具。
如果列表为空(设备没有找到),可能是因为设备上没有启用 USB 调试。可以到 设置 => 应用程序 => 开发 (Settings => Applications => Development) 或者 设置 => 开发者选项 (Settings => Developer options) 中启用 USB 调试。Android 4.2 (Jelly Bean) 隐藏了开发者选项菜单,到 设置 => 关于手机 (Settings => About phone),然后点击 Build 版本号 7 次来启用它。
注意:在 systemd 下不需要重新载入 udev 规则,这是由于它会自动处理任何规则变化。
配置 adb
与其使用 udev 规则,你也可以创建/编辑 ~/.android/adb_usb.ini,使它包含厂商 id 的列表。
$ cat ~/.android/adb_usb.ini 0x27e8
NVIDIA Tegra 平台专用工具
如果应用程序的目标平台是 NVIDIA Tegra 平台,可以安装 NVIDIA 提供的工具、文档和示例。NVIDIA 移动开发者 区提供了两个软件包 - Tegra Android 开发包,AUR 提供了 tegra-devpack 和 Tegra Toolkit,AUR 软件包是 tegra-toolkit。
tegra-toolkit 软件包提供了工具(大部分是 CPU 和 GPU 优化相关),示例和文档。tegra-devpack 软件包提供了 NVIDIA Debug Manager 及文档,主要和 Eclipse ADT 相关。
网络共享
构建 Android
构建 Android 时需要安装这些软件包:
- 所有系统:gcc git gnupg flex bison gperf sdl wxgtk squashfs-tools curl ncurses zlib schedtool perl-switch zip unzip libxslt
- 额外的软件包,仅于 64 位系统中需要:gcc-multilib lib32-zlib lib32-ncurses lib32-readline
For the JDK depending on the version of android you can use jdk7-openjdk, but to be safe either jdk6, if you don't develop on the jvm, or jdk6-compat, if you do have a prefered jvm for other tasks.
并且,你需要把默认的 python 从 3.X 版切换到 2.X 版:
# rm /usr/bin/python # ln -s /usr/bin/python2 /usr/bin/python
下载 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
与源同步:
$ repo init -u https://android.googlesource.com/platform/manifest (checkout the master) $ repo sync
等待很久。 同步完成之后,开始构建:
$ source build/envsetup.sh $ lunch full-eng $ make -j4
如果你不添加任何参数运行 lunch,它会询问你想要创建什么样的 build。 使用 -j 并添加一个数字,它介于你CPU的核数到2倍核数之间。
编译要花很长时间。
完成之后,运行最终的映像。
$ emulator
技巧和提示
调试时出现 "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 安装方法的详细介绍。
Arch 64 上的 Android SDK
在 64 位系统上使用 Android SDK 和 Eclipse 插件时,模拟器总是出现段错误而崩溃,请采取如下措施: 在 /usr/share/zoneinfo/localtime 中提供 localtime 文件:
# cp /usr/share/zoneinfo/Europe/Berlin /usr/share/zoneinfo/localtime
更好的 MTP 支持
如果不支持 UMS 的 Android 设备,mtpfs 会很慢,可以使用 AUR 中的 jmtpfs。参见 MTP 以获得更多选择。