종속성 분석 Gradle 플러그인(DAGP, née 종속성 분석 Android Gradle 플러그인)은 다음을 감지합니다.
사용되지 않은 종속성.
사용된 전이적 종속성(직접 선언할 수 있음)
잘못된 구성에서 종속성이 선언되었습니다( api
대 implementation
대 compileOnly
등).
부작용으로 플러그인은 프로젝트의 ABI를 알려주고 무엇보다도 종속성 그래프의 다양한 보기를 나타내는 graphviz 파일을 생성할 수 있습니다. 이러한 부작용은 현재 대부분 문서화되지 않은 내부 동작이지만 일부 고급 사용자에게는 흥미로울 수 있습니다.
종속성 관련 조언(위 참조) 외에도 DAGP는 "빌드 상태"를 유지하는 데 도움이 되는 다른 조언을 제공합니다. 여기에는 다음 항목이 포함됩니다.
불필요한 플러그인(현재는 kapt
만).
불필요하게 Android 플러그인을 사용하고 대신 "일반" JVM 라이브러리를 사용할 수 있는 하위 프로젝트("모듈")입니다.
이 플러그인과 호환되는 Gradle 버전, Android Gradle 플러그인 등에 대한 정보는 Wiki를 참조하세요.
자세한 지침은 위키를 참조하세요.
가장 간단한 방법은 다음을 추가하는 것입니다.
plugins {
id( " com.autonomousapps.build-health " ) version " <<latest_version>> "
}
중요한 | 프로젝트에서 Kotlin이나 Android(또는 둘 다)를 사용하는 경우 해당 플러그인도 설정 스크립트 클래스 로더(또는 상위)에 로드되어야 합니다. 자세한 내용은 위키를 참조하세요. |
빠른 시작을 위해 다음을 실행하세요.
./gradlew buildHealth
아마도 다음과 같은 출력이 표시될 것입니다.
> 작업 :buildHealth 실패 실패: 예외로 인해 빌드가 실패했습니다. * 무엇이 잘못되었는지: ':buildHealth' 작업 실행에 실패했습니다. > 종속성 위반이 발생했습니다. file:///path/to/project/build/reports/dependent-analytic/build-health-report.txt에서 보고서를 참조하세요.
이(매우 긴) 보고서를 콘솔에 인쇄하려면 다음을 gradle.properties
파일에 추가하세요.
dependency.analysis.print.build.health=true
설정 스크립트를 통해 이 플러그인을 모든 프로젝트에 적용할 필요는 없습니다. 특정 하위 프로젝트에만 적용할 수도 있습니다. 이 경우 루트 빌드 스크립트에도 적용해야 합니다.
plugins {
id( " com.autonomousapps.dependency-analysis " ) version " <<latest_version>> "
}
plugins {
id( " com.autonomousapps.dependency-analysis " )
}
중요한 | 프로젝트에서 Kotlin이나 Android(또는 둘 다)를 사용하는 경우 해당 플러그인도 루트 빌드 스크립트 클래스 로더(또는 상위)에 로드되어야 합니다. 자세한 내용은 위키를 참조하세요. |
projectHealth
작업을 사용하여 개별 모듈에 대해 분석을 실행할 수 있습니다. 예를 들어:
./gradlew 앱:projectHealth
플러그인이 프로젝트의 종속성 선언과 관련된 많은 문제를 보고하는 것이 일반적입니다. 수동으로 수정하는 것은 지루할 수 있으므로 플러그인은 모든 문제를 자동으로 해결하는 작업도 제공합니다.
./gradlew fix종속성
fixDependencies
작업은 플러그인이 적용되는 각 프로젝트에 등록됩니다. 위와 같이 실행하면 각 하위 프로젝트의 작업이 실행됩니다. 원클릭 종속성 수정 을 참조하세요.
어떤 상황에서는 모든 문제를 한 번에 해결하는 것이 불가능하다고 간주될 수도 있습니다. 매우 큰 프로젝트가 있거나 라이브러리를 게시하고 종속성 선언을 변경하면 라이브러리의 메타데이터도 변경되어 소비자를 손상시킬 수 있다는 것을 알고 있을 수 있습니다. 이 사용 사례를 지원하기 위해 fixDependencies
작업은 기본적으로 "안전한" 변경만 수행하도록 지시하는 선택적 플래그를 사용합니다.
./gradlew fixDependency --upgrade
이 플래그를 사용하면 fixDependencies
작업이 종속성 선언을 제거하거나 "다운그레이드"하지 않습니다. 선언만 추가하거나 "업그레이드"합니다(예: implementation
에서 api
로).
증분 롤아웃 시나리오에서는 --upgrade
플래그를 사용한 다음 모든 소비자를 업데이트하고 마지막으로 플래그를 제거하고 사용되지 않는 모든 종속성을 제거하는 것을 상상할 수 있습니다.
분석에 버그가 있는 경우 종속성 선언을 수정하면 빌드가 중단됩니다(그러나 이는 수동 수정의 경우에도 마찬가지입니다). 이 문제가 발생하면 문제를 제기해 주세요.
또한 재작성 기능은 단순화된 Gradle Groovy/Kotlin DSL 문법을 기반으로 하며 복잡한 빌드 스크립트가 있으면 실패합니다. Gradle Kotlin DSL 문법은 기본 빌드 스크립트 언어이므로 곧 향상할 계획이지만 현재 Gradle Groovy DSL에 대해 동일한 작업을 수행할 계획은 없습니다.
플러그인이 일부 종속성에 관한 조언을 내보내는(또는 내보내지 않는) 이유가 궁금할 수 있습니다. 이유를 물어볼 수 있습니다.
./gradlew lib:reason --id com.squareup.okio:okio:2.2.2 (1) > 작업 :lib:이유 --------------------------- 'com.squareup.okio:okio:2.2.2' 종속성에 대해 질문하셨습니다. 이 종속성에 관한 조언은 없습니다. --------------------------- :lib에서 com.squareup.okio:okio:2.2.2까지의 최단 경로: :lib --- com.squareup.okio:okio:2.2.2 출처 : 메인 ------------ * okio.BufferedSource 클래스를 노출합니다(api 암시).
버전 문자열은 선택 사항입니다.
플러그인 구성 방법에 대한 자세한 내용은 위키를 참조하세요.
플러그인을 구성하려면 dependencyAnalysis
확장을 사용하세요.
dependencyAnalysis {
// configuration goes here
}
다음은 이 플러그인에 관해 게시된 기사/블로그 게시물 목록입니다.
Gradle 빌드의 적절한 관리 및 공급
종속성 분석 Gradle 플러그인: 바이트코드 분석을 사용하여 사용되지 않는 종속성 찾기
종속성 분석 Gradle 플러그인: ABI란 무엇입니까?
Gradle 플러그인이 구성 시간에 미치는 영향 줄이기: 여정
원클릭 종속성 수정
…앞으로 더 많은 내용이 추가될 예정입니다 :)
이 플러그인은 다음 뉴스레터에도 소개되었습니다.
Gradle, 2024년 10월
2022년 5월 그래들
Gradle, 2020년 9월
Gradle, 2020년 8월
Android 주간지, 이슈 #423
Gradle, 2020년 7월
Gradle, 2020년 6월
이 플러그인에 대한 팟캐스트 에피소드는 여기에서 찾을 수 있습니다:
개발자의 빵집, 에피소드 #31
이 플러그인에 대한 YouTube 동영상:
Gradle #28 이해 – 종속성 분석 플러그인을 사용하여 컴파일 클래스 경로 정리