关于 android-build
android-build 是面向 Android 应用和自定义 ROM 开发的构建技能,涵盖 Gradle CLI、AOSP 与 LineageOS 的常见操作,并提供设备、内核构建及故障排查参考。
主要功能
- 01Gradle 构建、测试与 Lint
- 02SDK 与模拟器管理
- 03AOSP 和 LineageOS ROM 构建
- 04设备树与内核构建参考
- 05构建问题排查
适用场景
- 01构建并测试 Android 应用
- 02配置 SDK 与虚拟设备
- 03生成 AOSP 或 LineageOS 镜像
- 04排查 Gradle 或 ROM 构建错误
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ hyperb1iss/ hyperdroid-skill --skill android-build安装后在 Claude Code 中输入/android-build确认已加载。
附带文件references/aosp.mdreferences/lineageos.md
详细介绍
Android 构建系统
本技能涵盖通过 Gradle CLI 构建 Android 应用,以及通过 AOSP/LineageOS 构建自定义 ROM。
应用构建(Gradle CLI)
基本命令
./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)
# APK output location
# app/build/outputs/apk/debug/app-debug.apk
# app/build/outputs/apk/release/app-release.apk
构建变体
./gradlew assembleFreeDebug # Flavor + build type
./gradlew assemblePaidRelease
./gradlew assembleDebug --info # Verbose output
./gradlew assembleRelease -x test # Skip tests
测试
./gradlew test # Unit tests
./gradlew testDebugUnitTest # Debug unit tests only
./gradlew connectedAndroidTest # Instrumented tests
./gradlew connectedCheck # All connected tests
# Run specific test
./gradlew test --tests "*.MyTestClass"
Lint 和分析
./gradlew lint # Run lint
./gradlew lintDebug # Debug only (faster)
./gradlew ktlintCheck # Kotlin style (if configured)
./gradlew detekt # Detekt analysis (if configured)
清理和刷新
./gradlew clean # Clean build
./gradlew clean assembleDebug # Clean + build
./gradlew --refresh-dependencies # Force dependency refresh
./gradlew --stop # Stop Gradle daemon
依赖项
./gradlew dependencies # All dependencies
./gradlew app:dependencies # Module dependencies
./gradlew dependencyInsight --dependency <name>
签名
调试密钥库位置:
- Linux:
~/.android/debug.keystore - macOS:
~/.android/debug.keystore - Windows:
C:\Users\<user>\.android\debug.keystore
密码:android,别名:androiddebugkey
# Create release keystore
keytool -genkey -v -keystore release.keystore \
-alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
性能
./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 report
gradle.properties 优化
org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configuration-cache=true
android.useAndroidX=true
SDK 管理
sdkmanager
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 licenses
avdmanager
avdmanager list device # List device profiles
avdmanager list avd # List created AVDs
# Create AVD
avdmanager create avd -n my_avd \
-k "system-images;android-34;google_apis;x86_64" \
-d pixel_6
avdmanager delete avd -n my_avd
Emulator CLI
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 reset
ROM 构建(AOSP/LineageOS)
环境设置
# Install repo tool
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
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
# Sync source
repo sync -c -j$(nproc) --force-sync --no-tags --no-clone-bundle
构建命令
# Setup environment
source build/envsetup.sh
# Select device
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
# Parallel build
m -j$(nproc)
构建变体
| 变体 | 用途 |
|---|---|
user | 用于生产环境,无 root,调试功能受限 |
userdebug | 类似 user + root + 调试功能 |
eng | 用于开发,提供所有调试工具 |
常用目标
m bootimage # Kernel + ramdisk
m systemimage # System partition
m vendorimage # Vendor partition
m otapackage # OTA zip
mka bacon # LineageOS flashable zip
# Module-specific
m Settings # Just Settings app
mm # Build current directory
mmm packages/apps/Settings # Build specific path
LineageOS 特性
breakfast <device> # Setup + sync device deps
brunch <device> # breakfast + mka bacon
# Cherry-pick from Gerrit
repopick <change_number>
repopick -t <topic>
# Sync specific project
repo sync packages/apps/Settings
构建输出
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)
设备树
结构
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 overlays
关键文件
BoardConfig.mk - 硬件配置:
TARGET_ARCH := arm64
TARGET_BOARD_PLATFORM := <platform>
TARGET_BOOTLOADER_BOARD_NAME := <device>
BOARD_KERNEL_CMDLINE := ...
BOARD_BOOT_HEADER_VERSION := 4
device.mk - 设备软件包:
PRODUCT_PACKAGES += \
[email protected] \
audio.primary.$(TARGET_BOARD_PLATFORM)
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/configs/audio_policy.conf:...
内核构建
独立构建
# Setup
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
# Or for Clang:
export CC=clang
export CLANG_TRIPLE=aarch64-linux-gnu-
# Configure
make <device>_defconfig
# Build
make -j$(nproc)
# Output
arch/arm64/boot/Image.gz
在 AOSP 树中构建
# In BoardConfig.mk
TARGET_KERNEL_SOURCE := kernel/<vendor>/<device>
TARGET_KERNEL_CONFIG := <device>_defconfig
TARGET_KERNEL_CLANG_COMPILE := true
故障排除
常见 Gradle 问题
# OOM
export GRADLE_OPTS="-Xmx4g"
# Daemon issues
./gradlew --stop
rm -rf ~/.gradle/daemon
# Cache issues
./gradlew clean --refresh-dependencies
常见 AOSP 问题
# Ninja error - usually dependency issue
m clean && m
# Jack server (old builds)
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
# SELinux issues
audit2allow -i audit.log
构建日志
# Gradle
./gradlew assembleDebug --stacktrace
./gradlew assembleDebug --info
# AOSP
m 2>&1 | tee build.log
快速参考
Gradle
| 任务 | 命令 |
|---|---|
| 构建调试版 | ./gradlew assembleDebug |
| 构建发布版 | ./gradlew assembleRelease |
| 安装 | ./gradlew installDebug |
| 测试 | ./gradlew test |
| Lint 检查 | ./gradlew lint |
| 清理 | ./gradlew clean |
| 依赖项 | ./gradlew dependencies |
AOSP/LineageOS
| 任务 | 命令 |
|---|---|
| 设置环境 | source build/envsetup.sh |
| 选择设备 | lunch <device>-userdebug |
| 完整构建 | m |
| LineageOS zip | mka bacon |
| 仅构建 boot | mka bootimage |
| 同步 | repo sync -c -j$(nproc) |
评论
支持 Markdown