
初识aosp开发
环境说明
- 操作系统:Ubuntu 20.04
- 内存:32GB
- CPU:12核心(推荐开启虚拟化 VT-x 支持)
- 存储空间:1TB(建议使用SSD)
- 编译时间:
- 首次完整编译约需 1小时+
- 增量编译(修改单个模块)只需 十几分钟
AOSP 源码拉取及编译
一、源码拉取
1. 安装所需工具
sudo apt update
sudo apt install openjdk-11-jdk git curl python3 python-is-python3 repo -y
repo
是 Google 提供的管理 AOSP 多仓库工具。
2. 配置 repo
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
建议将 export PATH=~/bin:$PATH
加入 .bashrc
或 .zshrc
中,便于长期使用。
3. 初始化源码
mkdir aosp
cd aosp
repo init -u https://android.googlesource.com/platform/manifest -b android-11.0.0_r48
说明:
-u
后跟 manifest 仓库地址-b
指定分支,android-11.0.0_r48
仅为示例,实际可根据需要选择版本
4. 拉取源码
repo sync -c -j$(nproc)
参数说明:
-c
只拉取当前分支-j$(nproc)
多线程同步,加快拉取速度
全部源码约 100GB+,需要耐心等待。
二、源码编译
1. 编译前准备
source build/envsetup.sh
lunch
执行 lunch
后会提示选择构建目标,如 aosp_x86_64-eng
。推荐使用 x86 模拟器环境调试,开发效率较高。
2. 开始编译
make -j$(nproc)
make
会构建整个系统镜像,包括 framework、系统服务、启动程序、内核镜像等。
3. 启动模拟器
emulator -verbose -cores 4 -show-kernel
参数说明:
-verbose
:显示详细模拟器日志-cores 4
:模拟使用4核心-show-kernel
:输出内核日志,便于调试 init 或系统服务问题
若提示
emulator not found
,可以在prebuilts/android-emulator/
路径下找到。
编写系统级 App
如果你的 App 需要访问隐藏或系统 API(如 LocationManagerService、PackageManagerService),必须以 系统身份运行,也就是打包成 system app。
一、Manifest 权限声明
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.systemapp"
android:sharedUserId="android.uid.system">
sharedUserId="android.uid.system"
表示此 App 与系统进程共享 uid,可以调用系统 API。
二、编译为系统 App
将你的应用放入源码路径下的 packages/apps/MySystemApp/
中,并加入 Android.mk
或 Android.bp
:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := MySystemApp
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := MySystemApp
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
或者使用 Android.bp:
android_app {
name: "MySystemApp",
srcs: ["src/**/*.java"],
platform_apis: true,
privileged: true,
certificate: "platform",
}
然后执行系统增量编译:
make MySystemApp -j$(nproc)
最终会生成在 out/target/product/<device>/system/priv-app/
目录下。
三、注意事项
- App 必须使用
platform
签名,才能生效 - 若使用
adb install
安装带sharedUserId
的系统 App,会 失败,需放入system
分区后随系统启动 - 可通过
adb root && adb remount
进行动态替换,但重启后会恢复原样,调试方便
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自糕菜菜