android-build
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAndroid Build Systems
Android构建系统
This skill covers building Android apps via Gradle CLI and building custom ROMs via AOSP/LineageOS.
本技能涵盖通过Gradle CLI构建Android应用,以及通过AOSP/LineageOS构建自定义ROM的内容。
App Building (Gradle CLI)
应用构建(Gradle CLI)
Essential Commands
核心命令
bash
./gradlew tasks # List available tasks
./gradlew assembleDebug # Build debug APK
./gradlew assembleRelease # Build release APK
./gradlew installDebug # Build + install to device
./gradlew bundleRelease # Build AAB (App Bundle)bash
./gradlew tasks # 列出可用任务
./gradlew assembleDebug # 构建调试版APK
./gradlew assembleRelease # 构建正式版APK
./gradlew installDebug # 构建并安装到设备
./gradlew bundleRelease # 构建AAB(应用包)APK output location
APK输出位置
app/build/outputs/apk/debug/app-debug.apk
app/build/outputs/apk/debug/app-debug.apk
app/build/outputs/apk/release/app-release.apk
app/build/outputs/apk/release/app-release.apk
undefinedundefinedBuild Variants
构建变体
bash
./gradlew assembleFreeDebug # Flavor + build type
./gradlew assemblePaidRelease
./gradlew assembleDebug --info # Verbose output
./gradlew assembleRelease -x test # Skip testsbash
./gradlew assembleFreeDebug # 产品风味 + 构建类型
./gradlew assemblePaidRelease
./gradlew assembleDebug --info # 详细输出
./gradlew assembleRelease -x test # 跳过测试Testing
测试
bash
./gradlew test # Unit tests
./gradlew testDebugUnitTest # Debug unit tests only
./gradlew connectedAndroidTest # Instrumented tests
./gradlew connectedCheck # All connected testsbash
./gradlew test # 单元测试
./gradlew testDebugUnitTest # 仅运行调试版单元测试
./gradlew connectedAndroidTest # 仪器化测试
./gradlew connectedCheck # 所有连接设备测试Run specific test
运行特定测试
./gradlew test --tests "*.MyTestClass"
undefined./gradlew test --tests "*.MyTestClass"
undefinedLinting & Analysis
代码检查与分析
bash
./gradlew lint # Run lint
./gradlew lintDebug # Debug only (faster)
./gradlew ktlintCheck # Kotlin style (if configured)
./gradlew detekt # Detekt analysis (if configured)bash
./gradlew lint # 运行Lint检查
./gradlew lintDebug # 仅检查调试版(速度更快)
./gradlew ktlintCheck # Kotlin代码风格检查(需配置)
./gradlew detekt # Detekt代码分析(需配置)Clean & Refresh
清理与刷新
bash
./gradlew clean # Clean build
./gradlew clean assembleDebug # Clean + build
./gradlew --refresh-dependencies # Force dependency refresh
./gradlew --stop # Stop Gradle daemonbash
./gradlew clean # 清理构建产物
./gradlew clean assembleDebug # 清理后构建
./gradlew --refresh-dependencies # 强制刷新依赖
./gradlew --stop # 停止Gradle守护进程Dependencies
依赖管理
bash
./gradlew dependencies # All dependencies
./gradlew app:dependencies # Module dependencies
./gradlew dependencyInsight --dependency <name>bash
./gradlew dependencies # 查看所有依赖
./gradlew app:dependencies # 查看模块依赖
./gradlew dependencyInsight --dependency <name>Signing
签名配置
Debug keystore location:
- Linux:
~/.android/debug.keystore - macOS:
~/.android/debug.keystore - Windows:
C:\Users\<user>\.android\debug.keystore
Password: , Alias:
androidandroiddebugkeybash
undefined调试密钥库位置:
- Linux:
~/.android/debug.keystore - macOS:
~/.android/debug.keystore - Windows:
C:\Users\<user>\.android\debug.keystore
密码: , 别名:
androidandroiddebugkeybash
undefinedCreate release keystore
创建正式版密钥库
keytool -genkey -v -keystore release.keystore
-alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
-alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
undefinedkeytool -genkey -v -keystore release.keystore
-alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
-alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
undefinedPerformance
性能优化
bash
./gradlew assembleDebug --parallel # Parallel builds
./gradlew assembleDebug --build-cache # Use cache
./gradlew assembleDebug --offline # Offline mode
./gradlew --scan # Build scan (uploads data)
./gradlew --profile # Local profile reportbash
./gradlew assembleDebug --parallel # 并行构建
./gradlew assembleDebug --build-cache # 使用构建缓存
./gradlew assembleDebug --offline # 离线模式
./gradlew --scan # 构建扫描(上传数据)
./gradlew --profile # 本地性能分析报告gradle.properties Optimization
gradle.properties优化
properties
org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configuration-cache=true
android.useAndroidX=trueproperties
org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configuration-cache=true
android.useAndroidX=trueSDK Management
SDK管理
sdkmanager
sdkmanager
bash
sdkmanager --list # List available packages
sdkmanager --list | grep system # Filter system images
sdkmanager "platform-tools" # Install package
sdkmanager "platforms;android-34" # Install platform
sdkmanager "system-images;android-34;google_apis;x86_64"
sdkmanager --update # Update all
sdkmanager --licenses # Accept licensesbash
sdkmanager --list # 列出可用包
sdkmanager --list | grep system # 过滤系统镜像
sdkmanager "platform-tools" # 安装包
sdkmanager "platforms;android-34" # 安装平台
sdkmanager "system-images;android-34;google_apis;x86_64"
sdkmanager --update # 更新所有包
sdkmanager --licenses # 接受许可协议avdmanager
avdmanager
bash
avdmanager list device # List device profiles
avdmanager list avd # List created AVDsbash
avdmanager list device # 列出设备配置文件
avdmanager list avd # 列出已创建的AVDCreate AVD
创建AVD
avdmanager create avd -n my_avd
-k "system-images;android-34;google_apis;x86_64"
-d pixel_6
-k "system-images;android-34;google_apis;x86_64"
-d pixel_6
avdmanager delete avd -n my_avd
undefinedavdmanager create avd -n my_avd
-k "system-images;android-34;google_apis;x86_64"
-d pixel_6
-k "system-images;android-34;google_apis;x86_64"
-d pixel_6
avdmanager delete avd -n my_avd
undefinedEmulator CLI
模拟器CLI
bash
emulator -list-avds # List AVDs
emulator @my_avd # Start AVD
emulator @my_avd -no-snapshot # Fresh boot
emulator @my_avd -no-window # Headless
emulator @my_avd -wipe-data # Factory resetbash
emulator -list-avds # 列出AVD
emulator @my_avd # 启动AVD
emulator @my_avd -no-snapshot # 全新启动(不加载快照)
emulator @my_avd -no-window # 无头模式
emulator @my_avd -wipe-data # 恢复出厂设置ROM Building (AOSP/LineageOS)
ROM构建(AOSP/LineageOS)
Environment Setup
环境搭建
bash
undefinedbash
undefinedInstall repo tool
安装repo工具
mkdir -p ~/.bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
chmod a+x ~/.bin/repo
export PATH="$HOME/.bin:$PATH"
mkdir -p ~/.bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
chmod a+x ~/.bin/repo
export PATH="$HOME/.bin:$PATH"
Initialize repo
初始化repo
mkdir android && cd android
repo init -u https://github.com/LineageOS/android.git -b lineage-21.0
mkdir android && cd android
repo init -u https://github.com/LineageOS/android.git -b lineage-21.0
Or AOSP: repo init -u https://android.googlesource.com/platform/manifest
或AOSP:repo init -u https://android.googlesource.com/platform/manifest
Sync source
同步源码
repo sync -c -j$(nproc) --force-sync --no-tags --no-clone-bundle
undefinedrepo sync -c -j$(nproc) --force-sync --no-tags --no-clone-bundle
undefinedBuild Commands
构建命令
bash
undefinedbash
undefinedSetup environment
配置环境
source build/envsetup.sh
source build/envsetup.sh
Select device
选择设备
lunch <device>-userdebug # AOSP
breakfast <device> # LineageOS
lunch <device>-userdebug # AOSP
breakfast <device> # LineageOS
Build
构建
m # Full build
mka bacon # LineageOS (with flashable zip)
mka bootimage # Just boot.img
mka systemimage # Just system
m # 完整构建
mka bacon # LineageOS(生成可刷入zip包)
mka bootimage # 仅构建boot.img
mka systemimage # 仅构建系统镜像
Parallel build
并行构建
m -j$(nproc)
undefinedm -j$(nproc)
undefinedBuild Variants
构建变体
| Variant | Purpose |
|---|---|
| Production, no root, limited debugging |
| Like user + root + debugging |
| Development, all debug tools |
| 变体名称 | 用途 |
|---|---|
| 生产环境,无root权限,调试功能受限 |
| 类似user,增加root权限和调试功能 |
| 开发环境,包含所有调试工具 |
Common Targets
常见构建目标
bash
m bootimage # Kernel + ramdisk
m systemimage # System partition
m vendorimage # Vendor partition
m otapackage # OTA zip
mka bacon # LineageOS flashable zipbash
m bootimage # 内核 + 内存磁盘
m systemimage # 系统分区镜像
m vendorimage # 厂商分区镜像
m otapackage # OTA升级包
mka bacon # LineageOS可刷入zip包Module-specific
模块特定构建
m Settings # Just Settings app
mm # Build current directory
mmm packages/apps/Settings # Build specific path
undefinedm Settings # 仅构建设置应用
mm # 构建当前目录
mmm packages/apps/Settings # 构建指定路径
undefinedLineageOS Specifics
LineageOS专属操作
bash
breakfast <device> # Setup + sync device deps
brunch <device> # breakfast + mka baconbash
breakfast <device> # 配置环境并同步设备依赖
brunch <device> # breakfast + mka baconCherry-pick from Gerrit
从Gerrit挑选提交
repopick <change_number>
repopick -t <topic>
repopick <change_number>
repopick -t <topic>
Sync specific project
同步特定项目
repo sync packages/apps/Settings
undefinedrepo sync packages/apps/Settings
undefinedBuild Output
构建输出
out/target/product/<device>/
├── boot.img # Kernel + ramdisk
├── system.img # System partition
├── vendor.img # Vendor partition
├── lineage-*.zip # Flashable zip (LineageOS)
└── recovery.img # Recovery (non-A/B)out/target/product/<device>/
├── boot.img # 内核 + 内存磁盘
├── system.img # 系统分区镜像
├── vendor.img # 厂商分区镜像
├── lineage-*.zip # 可刷入zip包(LineageOS)
└── recovery.img # 恢复分区(非A/B分区设备)Device Trees
设备树
Structure
结构
device/<vendor>/<device>/
├── AndroidProducts.mk # Product makefiles list
├── BoardConfig.mk # Board configuration
├── device.mk # Device makefile
├── lineage_<device>.mk # LineageOS product
├── extract-files.sh # Vendor blob extraction
├── proprietary-files.txt # Blob list
├── sepolicy/ # SELinux policies
└── overlay/ # Resource overlaysdevice/<vendor>/<device>/
├── AndroidProducts.mk # 产品Makefile列表
├── BoardConfig.mk # 主板配置
├── device.mk # 设备Makefile
├── lineage_<device>.mk # LineageOS产品配置
├── extract-files.sh # 厂商二进制文件提取脚本
├── proprietary-files.txt # 二进制文件列表
├── sepolicy/ # SELinux策略
└── overlay/ # 资源覆盖Key Files
关键文件
BoardConfig.mk - Hardware configuration:
makefile
TARGET_ARCH := arm64
TARGET_BOARD_PLATFORM := <platform>
TARGET_BOOTLOADER_BOARD_NAME := <device>
BOARD_KERNEL_CMDLINE := ...
BOARD_BOOT_HEADER_VERSION := 4device.mk - Device packages:
makefile
PRODUCT_PACKAGES += \
android.hardware.audio@7.0-impl \
audio.primary.$(TARGET_BOARD_PLATFORM)
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/configs/audio_policy.conf:...BoardConfig.mk - 硬件配置:
makefile
TARGET_ARCH := arm64
TARGET_BOARD_PLATFORM := <platform>
TARGET_BOOTLOADER_BOARD_NAME := <device>
BOARD_KERNEL_CMDLINE := ...
BOARD_BOOT_HEADER_VERSION := 4device.mk - 设备包配置:
makefile
PRODUCT_PACKAGES += \
android.hardware.audio@7.0-impl \
audio.primary.$(TARGET_BOARD_PLATFORM)
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/configs/audio_policy.conf:...Kernel Building
内核构建
Standalone
独立构建
bash
undefinedbash
undefinedSetup
配置环境
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
Or for Clang:
或使用Clang:
export CC=clang
export CLANG_TRIPLE=aarch64-linux-gnu-
export CC=clang
export CLANG_TRIPLE=aarch64-linux-gnu-
Configure
配置内核
make <device>_defconfig
make <device>_defconfig
Build
构建
make -j$(nproc)
make -j$(nproc)
Output
输出文件
arch/arm64/boot/Image.gz
undefinedarch/arm64/boot/Image.gz
undefinedIn AOSP Tree
在AOSP源码树中构建
makefile
undefinedmakefile
undefinedIn BoardConfig.mk
在BoardConfig.mk中配置
TARGET_KERNEL_SOURCE := kernel/<vendor>/<device>
TARGET_KERNEL_CONFIG := <device>_defconfig
TARGET_KERNEL_CLANG_COMPILE := true
---TARGET_KERNEL_SOURCE := kernel/<vendor>/<device>
TARGET_KERNEL_CONFIG := <device>_defconfig
TARGET_KERNEL_CLANG_COMPILE := true
---Troubleshooting
故障排除
Common Gradle Issues
常见Gradle问题
bash
undefinedbash
undefinedOOM
内存不足
export GRADLE_OPTS="-Xmx4g"
export GRADLE_OPTS="-Xmx4g"
Daemon issues
守护进程问题
./gradlew --stop
rm -rf ~/.gradle/daemon
./gradlew --stop
rm -rf ~/.gradle/daemon
Cache issues
缓存问题
./gradlew clean --refresh-dependencies
undefined./gradlew clean --refresh-dependencies
undefinedCommon AOSP Issues
常见AOSP问题
bash
undefinedbash
undefinedNinja error - usually dependency issue
Ninja错误 - 通常是依赖问题
m clean && m
m clean && m
Jack server (old builds)
Jack服务器(旧版本构建)
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
SELinux issues
SELinux问题
audit2allow -i audit.log
undefinedaudit2allow -i audit.log
undefinedBuild Logs
构建日志
bash
undefinedbash
undefinedGradle
Gradle
./gradlew assembleDebug --stacktrace
./gradlew assembleDebug --info
./gradlew assembleDebug --stacktrace
./gradlew assembleDebug --info
AOSP
AOSP
m 2>&1 | tee build.log
---m 2>&1 | tee build.log
---Quick Reference
快速参考
Gradle
Gradle
| Task | Command |
|---|---|
| Build debug | |
| Build release | |
| Install | |
| Test | |
| Lint | |
| Clean | |
| Dependencies | |
| 任务 | 命令 |
|---|---|
| 构建调试版 | |
| 构建正式版 | |
| 安装应用 | |
| 运行测试 | |
| 代码检查 | |
| 清理构建 | |
| 查看依赖 | |
AOSP/LineageOS
AOSP/LineageOS
| Task | Command |
|---|---|
| Setup env | |
| Select device | |
| Full build | |
| LineageOS zip | |
| Just boot | |
| Sync | |
| 任务 | 命令 |
|---|---|
| 配置环境 | |
| 选择设备 | |
| 完整构建 | |
| 生成LineageOS包 | |
| 仅构建boot镜像 | |
| 同步源码 | |
undefined