Sparround

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ğunluqNə vermək lazımdır
Kompilyasiya xətasıYüksəkDar compile əmri — dövr sürətli olsun
Dependency konfliktiYüksək`./gradlew :app:dependencies` çıxışına baxa bilsin
R8 / ProGuard problemiOrtaRelease build əmri + mapping faylı; düzəlişi insan təsdiqləsin
Gradle konfiqurasiya xətasıOrta`--stacktrace` çıxışı; versiya kataloqu
Yavaş build (performans)OrtaBuild scan və ya `--profile` hesabatı
Yalnız bir maşında baş verən problemAş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ə".

bash
# 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 clean

Bu ə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