# Android Skills AGP 9：迁移内置 Kotlin 与新 DSL，核对编译产物

## 执行范围

输入工程已是AGP9.0.1且非KMP；已完成源码合同对照，未执行Gradle IDE sync、help、build dry-run或APK构建，不把静态检查当原生迁移成功。

## 输入与目标

已是AGP9但仍保留旧Kotlin插件、兼容flag和自定义BuildConfig的练习工程

交付：Gradle补丁、实际构建产物与兼容项清单

## 运行

在 reference 目录执行；先按文件 requirements.txt / package.json 或原生工具文档安装依赖。浏览器练习需 `npx playwright install chromium`；也可设置 `PLAYWRIGHT_EXECUTABLE_PATH` 为自己的 Chrome 路径。

```sh
node inspect.mjs
# 自有Android SDK环境，在after目录执行：
gradle help
gradle build --dry-run
```

## 目录

- fixtures：作者原创输入，不包含用户真实资料。
- starter：读者待完成任务。
- reference：作者完成参考。
- results：作者实际运行所得或明确标注的待运行输入/预期合同。

## 七步

1. **确认已在AGP9**

先读根插件版本9.0.1及官方兼容表，本题不从AGP8升级，也不处理KMP。准备Gradle9.1.0、JDK17和对应SDK。

2. **盘点注解插件**

检查是否存在KSP、Hilt或kapt。本题原始小工程均无，不为完成迁移而无端加插件；真实项目须按官方要求核版本。

3. **改用内置Kotlin**

删除模块和根中外加的org.jetbrains.kotlin.android声明。移除android.builtInKotlin=false兼容开关，避免双Kotlin插件同时生效。

4. **迁移编译选项**

把android.kotlinOptions移至kotlin.compilerOptions，并用JvmTarget.JVM_17。Java compileOptions同步17，不能靠忽略编译警告通过。

5. **检查新DSL**

移除android.newDsl=false，核对自己使用的Android扩展接口。项目无BuildConfig自定义项，真实项目有时需单独迁移。

6. **执行原生验证**

在你的SDK环境先IDE sync，再gradle help及gradle build --dry-run。本文未运行这些，不把Node字符串合同断言当Gradle验收。

7. **保留前后工程**

before/after都可单独检查，保留明确源码diff与未执行清单。不运行clean掩盖问题，不使用Skill禁止的Python修复器。

## 来源

- https://raw.githubusercontent.com/android/skills/main/build-system/agp/agp-9-upgrade/SKILL.md


## 原生工具与边界补充

需要自己的Android SDK、JDK17及Gradle9.1.0才能验证原生AGP9.0.1工程。作者只运行Node源码合同检查，没有Gradle/IDE sync/APK。before/after均为独立工程，无KMP、KSP、Hilt或kapt。
