安卓SE开发环境搭建与相关技术解析
1. 概述
在安卓开发中,为新设备开发SE(Security-Enhanced)策略是一项重要工作。同时,搭建合适的开发环境对于顺利开展安卓、Linux内核等开发至关重要。本文将详细介绍如何搭建适用于安卓开发的环境,以及相关的技术要点。
2. 开发环境准备
2.1 目标环境选择
为了构建UDOO提供的安卓4.3源码,需要使用带有Oracle Java 6的Ubuntu Linux系统。谷歌针对安卓4.3的标准目标开发平台是Ubuntu 12.04,因此我们选择该环境以确保开发的成功率。
2.2 环境搭建步骤
以下是搭建开发环境的具体步骤:
1. 使用虚拟机(VM)下载并安装Ubuntu 12.04。
2. 安装VirtualBox扩展包和Guest Additions以提升VM性能。
3. 搭建适合构建Linux内核和UDOO源码的开发环境。
4. 安装Oracle Java 6。
2.3 虚拟机选择
在众多用于运行Ubuntu Linux等客户操作系统的虚拟化产品中,我们选择VirtualBox。它是一个广泛使用的开源虚拟化系统,支持多种主机系统(如Mac、Linux、Solaris和Windows),并能利用许多现代处理器家族的硬件虚拟化功能,为每个虚拟机提供独立的私有地址空间,从而提高性能。其官方文档提供了针对各种平台的优秀安装说明,可参考 这里 获取主机操作系统的安装和运行信息。
2.4 Ubuntu Linux 12.04安装
2.4.1 下载镜像
首先,从 http://releases.ubuntu.com/12.04/ 下载合适的Ubuntu 12.04发行版镜像。在众多可选镜像中,我们选择64位桌面版,即 http://releases.ubuntu.com/12.04/ubuntu-12.04.5-desktop-amd64.iso 。
2.4.2 创建虚拟机
在主机上启动VirtualBox,等待VM管理器窗口出现,然后按以下步骤操作:
1. 点击“New”。
2. 在“Name and Operating System settings”中进行如下选择:
- Name: SE for Android Book
- Type: Linux
- Version: Ubuntu (64 bit)
3. 将内存大小设置为至少16 GB,否则构建可能失败。
4. 选择“Create a virtual hard drive now”,并将硬盘大小设置为至少80 GB。
5. 选择硬盘文件类型为VDI(VirtualBox Disk Image)。
6. 确保物理硬盘上的存储设置为动态分配。
7. 当提示输入文件位置和大小时,将新的虚拟硬盘命名为“SE for Android Book”,并将其大小设置为80 GB。
2.4.3 启动安装
确保在左窗格中选择了“SE for Android Book” VM,点击绿色的“Start”箭头进行初始启动。在弹出的对话框中,点击小文件夹图标,定位到之前下载的“ubuntu-12.04.5-desktop-amd64.iso” CD镜像,然后点击“Start”。当屏幕变黑并在VM窗口底部中心显示键盘图像时,按任意键开始Ubuntu安装。选择合适的语言(这里以英语为例),然后选择“Install Ubuntu”。
2.4.4 解决可能的错误
有时,VM窗口可能会显示类似“SMBus base address uninitialized”的错误信息。这是因为VirtualBox不支持Ubuntu 12.04默认加载的特定内核模块,但这不会造成实际问题,只是一个外观上的小困扰。稍等片刻,会出现一个漂亮的GUI安装屏幕,再次选择语言(这里仍选择英语)。
2.4.5 安装设置
在“Preparing to install Ubuntu”屏幕上,有三个检查项。由于虚拟驱动器远大于Ubuntu的最小要求,第一个检查项应已满足。为满足其他检查项,确保主机系统已连接电源并建立网络连接。通常,我们会勾选“Download updates while installing”和“Install this third - party software”选项。在“Installation type”屏幕上,选择“Erase disk and install Ubuntu”,这只会擦除VM虚拟硬盘上的磁盘,不会影响主机系统。在“Erase disk and install Ubuntu”屏幕上,虚拟硬盘应已被选中,只需点击“Install Now”。
2.4.6 系统配置
从这一步开始,Ubuntu安装将同时进行两项任务:在后台线程中,安装程序将为基础系统的安装准备虚拟驱动器;同时,需要配置新系统的一些基本方面。首先,通过在世界地图上点击相应点来确定时区,然后确定键盘布局。设置第一个用户账户,输入以下信息:
- Your Name: Book User
- Your computer’s name: SE - for - Android
- Pick a username: bookuser
- Password fields: (根据个人喜好设置)
为了方便,选择“Log in automatically”,但你也可以根据需要保护该账户。
2.4.7 完成安装
Ubuntu安装完成后,会出现一个对话框提示重启计算机。点击“Restart now”,片刻后,终端提示将要求移除所有安装介质并按Enter键。通过VirtualBox菜单栏的“Devices | CD/DVD Devices | Remove disk from virtual drive”移除虚拟安装CD,然后按Enter键重启VM。在重启过程中,关闭VM窗口以中断启动过程,在弹出的询问是否关闭机器的对话框中点击“OK”。
2.5 VirtualBox扩展包和Guest Additions安装
2.5.1 扩展包安装
从 VirtualBox网站 下载扩展包,该网站有适用于所有支持平台的下载链接。下载完成后,不同主机系统的安装方式不同:对于Linux和Mac OS X主机,只需双击下载的扩展包文件即可;对于Windows系统,需要运行下载的安装程序。
2.5.2 Guest Additions安装
安装扩展包后,从VirtualBox中选择Ubuntu Linux 12.04 VM并点击“Start”启动。Ubuntu桌面启动后,会发现VM屏幕无法适应VM窗口大小,且存在其他性能问题,这些问题可通过安装VirtualBox Guest Additions解决。可能会弹出一个窗口提示有新版本的Ubuntu可用,不要升级,直接关闭该窗口。通过VirtualBox菜单栏的“Devices | Insert Guest Additions CD Image…”插入Guest Additions CD镜像,随后会弹出一个对话框询问是否运行新插入介质上的软件,点击“Run”。输入用户密码进行身份验证,身份验证通过后,脚本将自动构建并更新几个内核模块。脚本完成后,点击屏幕右上角的齿轮图标,选择“Shutdown…”,然后在弹出的对话框中点击“Restart”重启VM。VM重启后,若VM屏幕能适应VM窗口大小,且调整VM窗口大小时VM屏幕也随之调整,则说明Guest Additions安装成功。
2.6 共享文件夹设置
为了在开发UDOO镜像时提高整体性能,可以在主机系统和Ubuntu Linux客户系统之间设置共享文件夹。这样,构建新的UDOO SD卡镜像后,可通过共享文件夹直接将镜像提供给主机,主机可以执行长时间运行的命令来刷新SD卡,而不会因虚拟化层减慢对主机读卡器的访问速度而增加时间。以本文所用系统为例,每次刷新镜像可节省约10分钟。设置共享文件夹的步骤如下:
1. 打开VirtualBox管理器,关闭Ubuntu VM。
2. 点击“Settings”工具栏图标,在打开的设置对话框中选择“Shared Folders”选项卡。
3. 点击右侧的“Add Shared Folder”图标,输入主机上要共享的文件夹路径(例如,创建一个名为“vbox_share”的新文件夹与VM客户共享)。VirtualBox会生成文件夹名称,确保在点击“OK”之前选择“Auto - mount”。
4. 从现在开始启动Ubuntu VM时,共享文件夹将在客户VM中以“/media/sf_
”的形式访问。但如果尝试从客户机列出该目录中的文件,可能会被拒绝。为了让“bookuser”获得对该文件夹的读写访问权限,需要将其UID添加到“vboxsf”组:
$ sudo usermod -a -G vboxsf bookuser
- 注销并重新登录客户机或重启客户VM以完成设置。
2.7 开发环境搭建
为了准备系统以构建Linux内核、安卓和安卓应用程序,需要安装和设置一些关键软件。点击屏幕左侧启动栏顶部的Ubuntu仪表盘图标,在出现的搜索栏中输入“term”并按Enter键,打开终端窗口,然后执行以下命令:
$ sudo apt-get update
$ sudo apt-get install apt-file git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev ia32-libs dialog liblzo2-dev libxml2-utils minicom
当提示是否继续时,输入“y”并按Enter键。
2.8 Oracle Java 6安装
从 Oracle Java存档网站 下载最新的Java 6 SE开发工具包(版本6u45),需要下载“jdk - 6u45 - linux - x64.bin”版本以满足谷歌的目标开发环境要求。下载完成后,执行以下命令安装Java 6 JDK:
$ chmod a+x jdk-6u45-linux-x64.bin
$ sudo mkdir -p /usr/lib/jvm
$ sudo mv jdk-6u45-linux-x64.bin /usr/lib/jvm/
$ cd /usr/lib/jvm/
$ sudo ./jdk-6u45-linux-x64.bin
$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.6.0_45/bin/java" 1
$ sudo update-alternatives --install "/usr/bin/jar" "jar" "/usr/lib/jvm/jdk1.6.0_45/bin/jar" 1
$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.6.0_45/bin/javac" 1
$ sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.6.0_45/bin/javaws" 1
$ sudo update-alternatives --install "/usr/bin/jar" "jar" "/usr/lib/jvm/jdk1.6.0_35/bin/jar" 1
$ sudo update-alternatives --install "/usr/bin/javadoc" "javadoc" "/usr/lib/jvm/jdk1.6.0_45/bin/javadoc" 1
$ sudo update-alternatives --install "/usr/bin/jarsigner" "jarsigner" "/usr/lib/jvm/jdk1.6.0_45/bin/jarsigner" 1
$ sudo update-alternatives --install "/usr/bin/javah" "javah" "/usr/lib/jvm/jdk1.6.0_45/bin/javah" 1
$ sudo rm jdk-6u45-linux-x64.bin
2.9 总结
通过以上步骤,我们搭建了一个与谷歌目标开发环境兼容的安卓开发环境,该环境可用于后续的开发工作,如在UDOO上进行安装等操作。你可以根据需要修改系统的其他元素,但安装上述环境元素将为后续开发提供必要的基础。
3. 相关技术要点
3.1 安卓安全模型
安卓的安全模型涉及多个方面,包括系统组件服务和应用程序。同时,安卓使用了自主访问控制(DAC)来管理资源访问。
3.2 安全相关技术
3.2.1 Binder
Binder是安卓中用于进程间通信(IPC)的机制,具有独特的架构和安全特性。其架构包括Android Interface Description Language(AIDL)等部分,并且有多种访问向量(如impersonate、call、set_context_mgr、transfer)与安全相关。
3.2.2 SELinux
SELinux是一种增强型安全机制,在安卓中具有重要作用。它可以实现多级安全,通过实施策略来控制进程和资源的访问。在Linux内核中启用SELinux是实现安全增强的重要步骤。SELinux的相关文件包括sepolicy、file_contexts、seapp_contexts等,这些文件的构建和管理对于安卓系统的安全至关重要。
3.3 安全审计
安卓的审计系统包括auditd守护进程和审计日志。auditd守护进程负责记录系统的安全事件,审计日志可用于查看和分析系统的安全状况。
3.4 设备策略
为了确保设备的安全性,需要编写设备策略。涉及的进程和服务包括adbd、bootanim、debuggerd等,每个进程都有其特定的安全策略需求。
3.5 权限管理
安卓系统中的权限管理包括对文件系统、属性等的权限控制。例如,通过修改权限位、更改所有者和组等方式来管理资源的访问权限。
3.6 动态转换
动态域转换和动态类型转换是安卓安全策略中的重要概念,可通过特定的命令和机制实现。
3.7 兼容性测试
兼容性测试套件(CTS)用于确保安卓设备和应用程序的兼容性。设置和运行CTS需要遵循一定的步骤,并可以通过审计日志等方式收集测试结果。
4. 总结
搭建合适的安卓开发环境是进行安卓开发和安全研究的基础。通过本文介绍的步骤,可以成功搭建一个兼容的开发环境,并了解安卓系统中的一些关键安全和开发技术。在实际开发中,需要根据具体需求进一步深入研究和应用这些技术,以确保系统的安全性和稳定性。
4.1 技术要点总结表格
| 技术要点 | 描述 |
|---|---|
| 开发环境 | Ubuntu 12.04 + Oracle Java 6,通过VirtualBox搭建VM |
| Binder | 进程间通信机制,有多种安全相关访问向量 |
| SELinux | 增强型安全机制,涉及多个策略文件的构建和管理 |
| 审计系统 | auditd守护进程和审计日志用于记录安全事件 |
| 设备策略 | 为不同进程和服务编写安全策略 |
| 权限管理 | 对文件系统和属性进行权限控制 |
| 动态转换 | 动态域转换和动态类型转换 |
| 兼容性测试 | 使用CTS确保设备和应用程序的兼容性 |
4.2 开发环境搭建流程图
graph LR
A[选择开发环境] --> B[下载Ubuntu 12.04镜像]
B --> C[创建VirtualBox VM]
C --> D[启动安装Ubuntu]
D --> E[解决可能的错误]
E --> F[安装设置]
F --> G[系统配置]
G --> H[完成安装]
H --> I[安装VirtualBox扩展包和Guest Additions]
I --> J[设置共享文件夹]
J --> K[搭建开发环境]
K --> L[安装Oracle Java 6]
通过以上内容,我们全面介绍了安卓开发环境的搭建和相关技术要点,希望能为安卓开发者和安全研究人员提供有价值的参考。
5. 深入解析关键技术
5.1 Binder 机制详细剖析
Binder 作为安卓进程间通信的核心机制,其架构和安全特性值得深入探讨。
- 架构组成 :Binder 的架构包含 Android Interface Description Language(AIDL),用于定义进程间通信的接口。AIDL 允许不同进程通过接口进行方法调用,实现数据交互。
- 安全特性 :Binder 具有多种访问向量,这些向量决定了进程之间的交互方式和权限。例如:
- impersonate :允许一个进程模拟另一个进程的身份,在某些情况下可以实现权限提升,但需要严格的安全控制。
- call :用于进程间的方法调用,确保调用的安全性和合法性。
- set_context_mgr :设置上下文管理器,控制进程的上下文环境。
- transfer :实现数据的传输,在传输过程中需要保证数据的完整性和保密性。
5.2 SELinux 策略文件详解
SELinux 的策略文件是实现安全增强的关键,以下是对几个重要策略文件的详细解析:
- sepolicy :sepolicy 是 SELinux 的核心策略文件,它定义了系统中各个进程和资源的访问规则。构建 sepolicy 需要执行一系列命令,例如:
# 探索 sepolicy 的 Android.mk
exploring sepolicy’s Android.mk
# 构建 sepolicy
Building sepolicy
# 控制策略构建
Controlling the policy build
# 定义 build_policy
Digging deeper into build_policy
- file_contexts :file_contexts 文件用于定义文件系统中各个文件和目录的安全上下文。构建 file_contexts 的过程如下:
# 构建 file_contexts
Building file_contexts
- seapp_contexts :seapp_contexts 文件用于为应用程序分配安全上下文,确保应用程序在运行时的安全性。构建 seapp_contexts 的命令为:
# 构建 seapp_contexts
Building seapp_contexts
5.3 审计系统的使用与分析
安卓的审计系统通过 auditd 守护进程记录系统的安全事件,审计日志则是分析系统安全状况的重要依据。
- auditd 守护进程 :auditd 守护进程在系统启动时自动运行,负责收集和记录系统的安全事件。可以通过配置 auditd 的规则来指定需要记录的事件类型。
- 审计日志分析 :审计日志记录了系统中各种安全相关的事件,如进程的创建、文件的访问等。通过分析审计日志,可以发现潜在的安全威胁和异常行为。例如,可以使用以下命令查看审计日志:
# 查看审计日志
cat /var/log/audit/audit.log
5.4 设备策略编写示例
为了确保设备的安全性,需要为不同的进程和服务编写设备策略。以下是一些常见进程的设备策略示例:
| 进程/服务 | 策略需求 |
| — | — |
| adbd | 限制 adbd 的访问权限,只允许特定的 IP 地址或用户进行连接。 |
| bootanim | 确保 bootanim 在启动过程中不会执行恶意代码。 |
| debuggerd | 控制 debuggerd 的调试权限,防止非法调试。 |
| drmserver | 保护数字版权管理服务的安全性,防止盗版和非法访问。 |
| dumpstate | 限制 dumpstate 输出的信息,避免敏感信息泄露。 |
| installd | 确保应用程序的安装过程安全,防止恶意应用的安装。 |
| keystore | 保护密钥库的安全性,防止密钥泄露。 |
| mediaserver | 控制媒体服务的访问权限,确保媒体文件的安全播放。 |
| netd | 管理网络连接,防止网络攻击和非法访问。 |
| rild | 保护无线电接口层守护进程的安全性,确保通信的正常进行。 |
| servicemanager | 控制服务管理器的访问权限,确保服务的正常注册和调用。 |
| surfaceflinger | 保护图形界面的安全性,防止界面被篡改。 |
| system_server | 作为系统的核心服务,需要严格的安全策略来保护系统的稳定性。 |
| toolbox | 限制工具盒的使用权限,防止恶意使用。 |
| untrusted_app | 对不可信应用进行严格的权限控制,防止其对系统造成危害。 |
| vold | 管理存储设备的挂载和卸载,确保存储设备的安全使用。 |
| watchdogd | 监控系统的运行状态,确保系统的稳定性。 |
| wpa | 保护无线连接的安全性,防止无线攻击。 |
6. 常见问题与解决方案
6.1 开发环境搭建问题
- 内存不足问题 :在创建虚拟机时,如果内存设置过小,可能会导致构建失败。解决方法是将内存大小设置为至少 16 GB。
- 虚拟硬盘空间不足 :如果虚拟硬盘空间不足,可能会影响系统的正常安装和运行。建议将虚拟硬盘大小设置为至少 80 GB。
- 网络连接问题 :在安装 Ubuntu 时,需要确保主机系统已连接网络。如果网络连接不稳定或无法连接,可能会导致更新和软件安装失败。
6.2 安全相关问题
- SELinux 策略错误 :如果 SELinux 策略配置错误,可能会导致进程无法正常运行或资源无法访问。解决方法是检查 sepolicy 文件的配置,确保策略规则正确。
- 审计日志过多 :审计日志可能会占用大量的磁盘空间,如果日志过多,可能会影响系统的性能。可以通过定期清理审计日志或调整 auditd 的规则来减少日志的生成。
- 设备策略冲突 :不同的设备策略可能会存在冲突,导致系统出现异常行为。在编写设备策略时,需要仔细考虑各个策略之间的兼容性。
6.3 兼容性问题
- CTS 测试失败 :如果 CTS 测试失败,可能是由于设备或应用程序与测试套件不兼容。需要检查设备的配置和应用程序的代码,确保符合 CTS 的要求。
- 版本不兼容 :不同版本的安卓系统和相关软件可能存在兼容性问题。在开发过程中,需要确保使用的软件版本与目标系统兼容。
7. 未来发展趋势
7.1 安卓安全技术的发展
随着移动设备的普及和应用的多样化,安卓安全技术将不断发展和完善。未来,SELinux 等安全机制可能会更加智能化和自动化,能够自动检测和防范各种安全威胁。
7.2 兼容性测试的重要性
随着安卓生态系统的不断扩大,兼容性测试将变得越来越重要。CTS 等测试套件将不断更新和完善,以确保设备和应用程序的兼容性。
7.3 开发环境的优化
未来的开发环境可能会更加集成化和便捷化,提供更多的工具和功能来提高开发效率和安全性。例如,可能会出现更加智能的代码编辑器和调试工具,帮助开发者更快地发现和解决问题。
8. 总结与展望
8.1 总结
本文全面介绍了安卓开发环境的搭建和相关技术要点,包括开发环境的准备、关键技术的解析、常见问题的解决等方面。通过搭建兼容的开发环境和深入了解安卓安全技术,开发者可以更好地进行安卓开发和安全研究。
8.2 展望
未来,安卓开发和安全领域将面临更多的挑战和机遇。开发者需要不断学习和掌握新的技术,以应对日益复杂的安全威胁。同时,也需要加强行业间的合作和交流,共同推动安卓生态系统的安全和发展。
8.3 技术要点回顾流程图
graph LR
A[开发环境搭建] --> B[关键技术解析]
B --> C[设备策略编写]
C --> D[安全审计与分析]
D --> E[常见问题解决]
E --> F[未来发展趋势]
通过以上内容,我们希望能够为安卓开发者和安全研究人员提供一个全面的参考,帮助他们更好地进行安卓开发和安全防护工作。
超级会员免费看
1232

被折叠的 条评论
为什么被折叠?



