Gradle və build problemlərinin diaqnostikası
Build xətaları agent üçün əlverişli sahədir, çünki geribildirim döngəsi qapalıdır: əmri işə salır, xətanı oxuyur, düzəldir, yenidən işə salır. İnsan üçün darıxdırıcı olan bu dövr agent üçün təbiidir.
Amma Android build-inin bir neçə xüsusiyyəti var:
- Xəta mesajları uzun və çoxqatlıdır. Əsl səbəb 200 sətirlik stack trace-in ortasında ola bilər.
- Səbəb başqa yerdədir. "Duplicate class" xətasının səbəbi tranzitiv dependency-dir; xəta mesajı bunu birbaşa demir.
- Bəzi xətalar yalnız müəyyən konfiqurasiyada görünür — release build, R8, müəyyən API level.
- Kəşləmə çaşdırır. Bəzən problem kodda deyil, köhnəlmiş build kəşindədir.
| Problem növü | Agentə uyğunluq | Nə vermək lazımdır |
|---|---|---|
| Kompilyasiya xətası | Yüksək | Dar compile əmri — dövr sürətli olsun |
| Dependency konflikti | Yüksək | `./gradlew :app:dependencies` çıxışına baxa bilsin |
| R8 / ProGuard problemi | Orta | Release build əmri + mapping faylı; düzəlişi insan təsdiqləsin |
| Gradle konfiqurasiya xətası | Orta | `--stacktrace` çıxışı; versiya kataloqu |
| Yavaş build (performans) | Orta | Build scan və ya `--profile` hesabatı |
| Yalnız bir maşında baş verən problem | Aşağı | Mühit fərqidir — agentin kontekstindən kənardadır |
Ən çox rast gəlinən tələ: agent build xətasını versiyanı dəyişməklə həll etməyə çalışır. Bu, çox vaxt işləyir — və çox vaxt yanlışdır, çünki versiya dəyişikliyi bütün layihəyə təsir edir və başqa yerdə problem yaradır. CLAUDE.md-də açıq yazın: "libs.versions.toml-u soruşmadan dəyişmə".
# Diagnostic commands worth giving the agent
# The dependency tree — to find the source of a conflict
./gradlew :app:dependencies --configuration debugRuntimeClasspath
# Where a specific library is pulled in from
./gradlew :app:dependencyInsight \
--configuration debugRuntimeClasspath \
--dependency okhttp
# List the modules
./gradlew projects
# Full stack trace for a configuration error
./gradlew :app:assembleDebug --stacktrace
# When you suspect a stale cache (slow — last resort)
./gradlew cleanBu əmrləri icazə siyahısına salmaq (`allow`) agentin diaqnostikanı özü aparmasına imkan verir — hər əmr üçün soruşmadan.
Build problemi ilə işləyərkən agentə vermək lazım olanlar:
1. Tam xəta çıxışı — kəsilmiş fraqment yox. Əsl səbəb çox vaxt kəsilən hissədədir.
2. Nə dəyişdirdiyiniz — "dünən işləyirdi, bu gün yox" halında son dəyişiklik ən güclü ipucudur.
3. Yoxlama əmri — düzəlişi təsdiqləmək üçün.
4. Məhdudiyyət — "versiyaları dəyişmə", "yeni dependency əlavə etmə".
Dördüncü bənd olmadan agent ən sadə "həll"i seçir: versiyanı aşağı salmaq və ya exclude əlavə etmək. Bu, problemi gizlədir, həll etmir.
📚 Mənbələr və sənədlər
- Build-in konfiqurasiyasırəsmideveloper.android.com
- Tətbiqin optimallaşdırılması (R8)rəsmideveloper.android.com
`-keep` qaydaları və release build problemləri üçün rəsmi mənbə.
- Build sürətinin optimallaşdırılmasırəsmideveloper.android.com