탐색
최근 업데이트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
2024년 11월 13일 | 2.8.4 | - | - | 2.9.0-alpha03 |
종속 항목 선언
Navigation의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.
다음과 같이 앱 또는 모듈의 build.gradle
파일에 필요한 아티팩트의 종속 항목을 추가합니다.
Groovy
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21' } dependencies { def nav_version = "2.8.5" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // JSON serialization library, works with the Kotlin serialization plugin. implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" }
Kotlin
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.8.5" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") // JSON serialization library, works with the Kotlin serialization plugin implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") }
Safe Args
To add Safe Args
to your project, include the following classpath
in your top level build.gradle
file:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.5" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.5" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
You must also apply one of two available plugins.
To generate Java language code suitable for Java or mixed Java and Kotlin modules, add
this line to your app or module's build.gradle
file:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Alternatively, to generate Kotlin code suitable for Kotlin-only modules add:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
You must have android.useAndroidX=true
in your
gradle.properties
file as per
Migrating to AndroidX.
Kotlin 확장 프로그램 사용에 관한 정보는 ktx 문서를 참고하세요.
종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.
의견
제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.
자세한 내용은 Issue Tracker 문서를 참고하세요.
버전 2.9
버전 2.9.0-alpha03
2024년 11월 13일
androidx.navigation:navigation-*:2.9.0-alpha03
이 출시되었습니다. 버전 2.9.0-alpha03에는 이러한 커밋이 포함되어 있습니다.
새로운 기능
- 이제 탐색 유형 안전성이 값 클래스를 경로 또는 경로의 인수 유형으로 지원합니다. (I9344a, b/374347483)
버그 수정
- 포함된 활동 또는 프래그먼트와 같은 호스트
LifecycleOwner
가 수명 주기 상태를 변경할 때NavBackStackEntry
에 연결된LifecycleObserver
가 백 스택 변경을 트리거할 때 발생할 수 있는ConcurrentModificationException
를 수정했습니다. (Ia9494)
버전 2.9.0-alpha02
2024년 10월 30일
androidx.navigation:navigation-*:2.9.0-alpha02
이 출시되었습니다. 버전 2.9.0-alpha02에는 이러한 커밋이 포함되어 있습니다.
외부 기여
- 새로운 공통
NavController.handleDeepLink(request: NavDeepLinkRequest)
메서드 콘스탄틴 치크호베로프님, 감사합니다. (I3e228)
버전 2.9.0-alpha01
2024년 10월 16일
androidx.navigation:navigation-*:2.9.0-alpha01
이 출시되었습니다. 버전 2.9.0-alpha01에는 이 커밋이 포함되어 있습니다.
새로운 기능
- 이제 맞춤 탐색기가 대상을
SupportingPane
인터페이스를 구현하는 것으로 표시할 수 있으며, 이는NavController
에 이러한 대상이 다른 대상과 함께 표시됨을 나타냅니다. 예를 들어 이 인터페이스를 사용하면 여러 대상이 동시에RESUMED
일 수 있습니다. (Id5559) - Navigation
2.8.3
:@Serializable
로 올바르게 주석 처리되지 않은 유형 안전 경로를 식별하는 데 도움이 되는navigation-common
,navigation-runtime
,navigation-compose
모듈에 관한 새로운 린트 검사가 추가되었습니다. 이 검사는 모든NavGraphBuilder
및NavDeepLinkBuilder
확장 함수에 적용됩니다. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - Navigation
2.8.3
:@Keep
로 올바르게 주석 처리되지 않은 Enum 인수가 있는 유형 안전 라우트를 식별하는 데 도움이 되는navigation-common
,navigation-runtime
,navigation-compose
모듈의 새로운 린트 검사가 추가되었습니다. 이 검사는 모든NavGraphBuilder
및NavDeepLinkBuilder
확장 함수에 적용됩니다. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
동작 변경사항
- 이전에
DESTROYED
된NavController
를 사용하려고 하면 이제IllegalStateException
이 발생합니다. (I520da, b/369616172)
버그 수정
- 축소된 빌드에서 Enum 클래스가 삭제되는 경우
@Keep
주석을 사용하도록 제안하는 Enum 클래스 없음 예외를 업데이트합니다. (I90e79, b/358137294)
알려진 문제
Navigation 2.8.*
에 추가된 새 린트 규칙에 문제가 있어 Android Gradle 플러그인 8.4 이상으로 린트를 실행하려고 하면Obsolete custom lint check
오류가 발생합니다. (b/368070326, b/371463741)
버전 2.8
버전 2.8.4
2024년 11월 13일
androidx.navigation:navigation-*:2.8.4
이 출시되었습니다. 버전 2.8.4에는 이 커밋이 포함되어 있습니다.
새로운 기능
- Navigation
2.9.0-alpha03
부터: 이제 Navigation 유형 안전성이 값 클래스를 경로 또는 경로의 인수 유형으로 지원합니다. (I9344a, b/374347483)
버그 수정
- Navigation
2.9.0-alpha01
부터: 이전에DESTROYED
된NavController
를 사용하려고 하면 이제IllegalStateException
이 발생합니다. (I520da, b/369616172)
버전 2.8.3
2024년 10월 16일
androidx.navigation:navigation-*:2.8.3
이 출시되었습니다. 버전 2.8.3에는 이 커밋이 포함되어 있습니다.
새로운 기능
@Serializable
로 올바르게 주석 처리되지 않은 유형 안전 라우트를 식별하는 데 도움이 되는navigation-common
,navigation-runtime
,navigation-compose
모듈의 새로운 린트 검사를 추가했습니다. 이 검사는 모든NavGraphBuilder
및NavDeepLinkBuilder
확장 함수에 적용됩니다. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)@Keep
로 올바르게 주석 처리되지 않은 Enum 인수가 있는 유형 안전 라우트를 식별하는 데 도움이 되는navigation-common
,navigation-runtime
,navigation-compose
모듈의 새로운 린트 검사를 추가했습니다. 이 검사는 모든NavGraphBuilder
및NavDeepLinkBuilder
확장 함수에 적용됩니다. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
버그 수정
Navigation 2.8.*
에 추가된 새 린트 규칙으로 인해 Android Gradle 플러그인 8.4 이상에서 린트를 실행하려고 하면Obsolete custom lint check
오류가 발생하는 문제를 수정했습니다. (I1be3d, b/368070326, b/371463741)
알려진 문제
- Lint 16 (AGP 8.7) 이상으로 린트를 실행하려고 하면 탐색 린트에서 Obsolete custom lint check 오류가 발생합니다. (b/371926651)
버전 2.8.2
2024년 10월 2일
androidx.navigation:navigation-*:2.8.2
이 출시되었습니다. 버전 2.8.2에는 이 커밋이 포함되어 있습니다.
새로운 기능
- 이제 탐색 유형 안전이 맞춤
NavType
없이Double
,Double?
,DoubleArray
,DoubleArray?
,List<Double>
,List<Double>?
를 포함하는 직렬화 가능한 클래스를 지원합니다. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)
버그 수정
- 탐색에서 경로의 인수를
NavType
에 매핑하지 못할 때의 오류 메시지를 개선했습니다. 새 오류 메시지에는 인수 이름, 인수 정규화된 이름, 경로의 정규화된 이름이 포함됩니다. (Id8416, b/346264232)
버전 2.8.1
2024년 9월 18일
androidx.navigation:navigation-*:2.8.1
이 출시되었습니다. 버전 2.8.1에는 이 커밋이 포함되어 있습니다.
새로운 기능
- 유형 안전 API를 사용하여
popBackStack
하려고 할 때 재형성된 클래스 유형을 사용하는popBackStack
함수를 사용하도록 하는 새로운 린트 규칙이 추가되었습니다. (Ief161, b/358095343)
버그 수정
- 이제
NavGraph
의startDestination
에 전달된 경로에 모든 필수 인수의 값이 포함되어야 합니다. 여기에는 null이 허용되지 않고 기본값이 없는 인수가 포함됩니다. (I18e74, b/362594265) - 'null' 값이 그대로 파싱되어 번들에 저장되도록 탐색 안전한 인수가 null을 허용하지 않는 문자열을 지원하도록 추가되었습니다. 이는 'null' 값이 null 객체로 파싱되는 기존 동작과 다릅니다. 이 변경사항은 null이 허용되지 않는 String 유형에만 적용됩니다. null 허용 문자열은 변경되지 않습니다. (I08b4a, b/348936238)
- 대상에 명시적으로 추가된 딥 링크를 통해서만
NavDestination
에 더 이상 딥 링크할 수 없습니다. 또한 문자열 경로를 사용하는 navigate 함수 오버로드를 통해서만 목적지의 경로로 이동할 수 있습니다. 이렇게 하면 잠재적으로 보호된 대상에 딥 링크할 수 있는 취약점이 수정됩니다. (Ie30e6)
종속 항목 업데이트
- 이제 Navigation Safe Args는 Kotlin 2.X가 아닌 Kotlin 1.9.24에 종속되므로 개발자가 업데이트하지 않아도 됩니다. (a4129a)
- 이제 Navigation Compose가 Compose
1.7.2
에 종속됩니다.
버전 2.8.0
2024년 9월 4일
androidx.navigation:navigation-*:2.8.0
이 출시되었습니다. 버전 2.8.0에는 이 커밋이 포함되어 있습니다.
2.7.0 이후 중요 변경사항
탐색 Kotlin DSL 유형 안전성
- 이제 탐색은 Kotlin 직렬화를 사용하여 (Navigation Compose에서 사용하는) Kotlin DSL에 유형 안전성을 제공하므로 유형 안전 객체와 데이터 클래스를 통해 탐색 그래프에서 대상을 정의할 수 있습니다.
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
자세한 내용은 Navigation Compose와 유형 안전성 블로그 게시물을 참고하세요.
Navigation Compose 뒤로 탐색 예측
- 이제 Navigation Compose는 compose-animation의 새
SeekableTransitionState
API를 통해 인앱 뒤로 탐색 예측을 지원합니다. 이렇게 하면 뒤로 동작을 사용하여 완료된 동작을 통해 트랜잭션을 커밋할지 아니면 취소할지 결정하기 전에 맞춤 전환으로 이전 대상을 볼 수 있습니다.
탐색 프래그먼트 컴포저블
- 탐색 XML 파일에 컴포저블 대상을 추가할 수 있는
NavHostFragment
의 대안인ComposableNavHostFragment
가 포함된 새navigation-fragment-compose
아티팩트가 추가되었습니다. 각composable
대상은 정규화된 이름이 각 대상의android:name
속성으로 사용되는 최상위 인수 없는@Composable
메서드로 표현되어야 합니다. 이러한 대상 중 하나로 이동하면 컴포저블 콘텐츠를 표시하기 위해 포함 프래그먼트가 생성됩니다.
// In HomeScreen.kt
@Composable
fun HomeScreen() {
// Your Composable content here
}
// In your navigation.xml
<composable
android:id="@+id/home_screen"
android:name="com.example.HomeScreenKt\$HomeScreen" />
기타 변경사항
- Navigation Compose가 이제 Compose 1.7.0에 종속됩니다.
- 이제 Navigation은 목록, 배열, 맵과 같은 컬렉션 기반 인수의
NavType<T>
서브클래스인 새CollectionNavType<T>
클래스를 제공합니다. 이제 모든 기본NavType
배열 (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
,StringArrayType
)이 이 새 클래스에서 상속됩니다. - 이제
NavType
에서 Int, String, Boolean, Float, Long의 목록을 기본적으로 지원합니다.
버전 2.8.0-rc01
2024년 8월 21일
androidx.navigation:navigation-*:2.8.0-rc01
이 출시되었습니다. 버전 2.8.0-rc01에는 이 커밋이 포함되어 있습니다.
버그 수정
- 최상위 Enum 클래스를 유형 안전 인수로 전달할 때 탐색 비정상 종료를 수정합니다. (I0ba76, b/358137294)
- 이제 Navigation 2.8이 SDK 34와 올바르게 작동하며 나머지 AndroidX 라이브러리와 함께 2.9가 출시될 때까지 SDK 35로 전환되지 않습니다. (b/358798728)
버전 2.8.0-beta07
2024년 8월 7일
androidx.navigation:navigation-*:2.8.0-beta07
이 출시되었습니다. 버전 2.8.0-beta07에는 이러한 커밋이 포함되어 있습니다.
알려진 문제
- b/358137294로 인해 다른 클래스에 중첩된 enum만 즉시 지원됩니다. 최상위 Enums는 다음 출시에서 지원됩니다.
버그 수정
- 중복 또는 공유된 대상으로 이동할 때 내비게이션은 그래프의 현재 위치에서 가장 근접한 대상을 우선적으로 이동합니다. (Ic89a4, b/352006850)
- 이제 safe args의 탐색에 새
NavType.EnumType
가 추가되었습니다. 즉,Enum
유형에 더 이상 맞춤NavType
가 필요하지 않습니다.Enum
의SerialName
는 기본 정규화된 이름이어야 합니다. (I66d22, b/346475493) - 안전한 인수의 탐색에
Int?
,Long?
,Float?
,Boolean?
,Enum<*>?
를 비롯한 null 허용 인수 유형에 대한 기본 지원이 추가되었습니다. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237) - 이제
NavGraph
에 전달된startDestination
경로가startDestination.route
와 정확히 일치하는 경우NavGraph
의startDestination
는 기본 인수 값을 사용합니다. (I13762, b/354046047)
버전 2.8.0-beta06
2024년 7월 24일
androidx.navigation:navigation-*:2.8.0-beta06
이 출시되었습니다. 버전 2.8.0-beta06에는 이 커밋이 포함되어 있습니다.
버그 수정
WrongStartDestinationType
린트 검사가 전달된 클래스 유형에서 컴패니언 객체를 확인하지 않아 린트가 오류를 감지하지 못하는 문제를 수정했습니다. (I92b09)
버전 2.8.0-beta05
2024년 7월 10일
androidx.navigation:navigation-*:2.8.0-beta05
이 출시되었습니다. 버전 2.8.0-beta05에는 이 커밋이 포함되어 있습니다.
버그 수정
- 중첩된
NavGraphs
가 동일한startDestination
경로를 공유할 때singleTop
탐색 비정상 종료 문제를 수정했습니다. (I17b94, b/294408596)
버전 2.8.0-beta04
2024년 6월 26일
androidx.navigation:navigation-*:2.8.0-beta04
이 출시되었습니다. 버전 2.8.0-beta04에는 이 커밋이 포함되어 있습니다.
버그 수정
- 이제 탐색에서 경로 인수에 빈 문자열을 사용하여 탐색을 지원합니다. (Ic5dbd, b/339481310)
@Serializable(with =...)
를 통해 클래스 필드에 직접 선언된 맞춤 직렬화 도구의 오류 메시지를 개선하여 현재 지원되지 않는 기능임을 명확히 합니다. (I052b0, b/341319151)- 이제
SavedStateHandleFactory
테스트 API를 Android 이외의 테스트에서 사용할 수 있지만, Robolectric에서 Bundle을 사용한 인수 파싱을 지원해야 합니다. (I76cdc, b/340966212) - Compose에서 유형 안전 탐색을 사용하여 프로세스 종료 후 앱을 재개할 때 상태를 복원하는 과정에서 발생하는 비정상 종료 문제를 수정했습니다. (Ia8f38, b/341801005)
- 뒤로 탐색 예측 동작을 취소한 후 사용자가 돌아가는
NavBackStackEntry
가RESUMED
수명 주기 상태로 다시 돌아가지 않는 Navigation Compose의 문제가 수정되었습니다. 이렇게 하면 플링 후 제자리로 돌아가는 대상이 제자리로 갑자기 이동하는 대신 올바르게 애니메이션으로 다시 돌아옵니다. (I97a0c, b/346608857) - Navigation Compose에서 뒤로 탐색 예측을 사용할 때 이제 표시되는 대상에 적절한 z 순서가 적용되어 수신되는 대상 위에 올바르게 애니메이션됩니다. (I2077b, b/345993681)
버전 2.8.0-beta03
2024년 6월 12일
androidx.navigation:navigation-*:2.8.0-beta03
이 출시되었습니다. 버전 2.8.0-beta03에는 이러한 커밋이 포함되어 있습니다.
API 변경사항
CollectionNavType
에 새로운 추상emptyCollection()
메서드가 있습니다. 인수로 전달된 빈 컬렉션을 처리하려면 이를 재정의합니다. (Ie4d84, b/341723133)
버그 수정
- 최종 출력은 Uri 인코딩되어야 함을 강조하기 위해
NavType.serializeAsValue
및serializeAsValues
에 관한 문서를 추가했습니다. (Ida6bd, b/344943214) - null
CollectionNavType
인수로toRoute<T>
를 호출할 때 발생하는 비정상 종료 문제를 수정했습니다. nullCollectionNavType
로 이동하면 출력 인수가 Serializable 클래스에 선언된 기본값이거나 기본값이 없는 경우emptyCollection()
의 반환 값이 됩니다. (I84158, Id630f, b/342672856)
버전 2.8.0-beta02
2024년 5월 29일
androidx.navigation:navigation-*:2.8.0-beta02
이 출시되었습니다. 버전 2.8.0-beta02에는 이 커밋이 포함되어 있습니다.
버그 수정
- nullable 맞춤
NavType
와 함께NavBackStackEntry.toRoute
를 사용할 때 발생하는ClassCastException
비정상 종료가 수정되었습니다. (I1c29b, b/342239473) - 현재 대상에서 ID를 통해 연결할 수 없는 백 스택 항목을 복원하려고 할 때 발생하는 탐색 백 스택 상태 복원 문제가 수정되었습니다. 경로는 ID로 지원되므로 경로로 빌드된 대상도 영향을 받았습니다. 또한 동일한 근본 문제가 있는
clearBackStack()
를 호출하여 발생하는 비정상 종료도 수정됩니다. (I423c3, b/339908057)
버전 2.8.0-beta01
2024년 5월 14일
androidx.navigation:navigation-*:2.8.0-beta01
이 출시되었습니다. 버전 2.8.0-beta01에는 이러한 커밋이 포함되어 있습니다.
API 변경사항
- 이제
SavedStateHandle.toRoute()
는 맞춤 인수 유형의typeMap
매개변수를 사용합니다. (Ie39fb, b/339026523) - Kotlin Serializable 객체에서
SavedStateHandle
를 만들기 위한 테스트 API를navigation-testing
에 추가했습니다. (Id4867, b/339080702)
버그 수정
- 탐색 Kotlin DSL 함수의 누락된 매개변수 문서가 추가되었습니다. (I26a36)
버전 2.8.0-alpha08
2024년 5월 1일
androidx.navigation:navigation-*:2.8.0-alpha08
이 출시되었습니다. 버전 2.8.0-alpha08에는 이 커밋이 포함되어 있습니다.
Navigation Compose의 Safe Args
- Kotlin 직렬화를 기반으로 하는 Navigation Compose 및 Navigation Kotlin DSL 사용자를 위한 컴파일 시간 유형 안전성을 지원하기 위한 작업이 완료되었으며 이전의 실험용 API가 이제 안정적입니다. (Iea94d, I0eb0d, I873b7, I3a64b, I6c3a2, I11f0b, Ic3032, I8d394, I95710, Ice060, Id0e55, I45f8b, Idcdaf, If5380, I08b23, Ia5c59, b/188693139)
이 기능은 Kotlin 직렬화를 사용하여 유형 안전 객체와 데이터 클래스를 통해 탐색 그래프에서 대상을 정의할 수 있도록 합니다.
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
자세한 내용은 Navigation Compose와 유형 안전성 블로그 게시물을 참고하세요.
새로운 기능
- 이제
navigation-fragment-compose
아티팩트는ComposableFragment
내의 컴포저블 메서드에 로컬LocalFragment
컴포지션을 제공합니다. (If35e5) - 이제
NavType
에서 Int, String, Boolean, Float, Long의 목록을 기본적으로 지원합니다. (I4b6dd, Ia914c, b/188693139)
버전 2.8.0-alpha07
2024년 4월 17일
androidx.navigation:navigation-*:2.8.0-alpha07
이 출시되었습니다. 버전 2.8.0-alpha07에는 이러한 커밋이 포함되어 있습니다.
새로운 기능
탐색 XML 파일에
composable
대상을 추가할 수 있는NavHostFragment
의 대안인ComposableNavHostFragment
가 포함된 새navigation-fragment-compose
아티팩트를 추가합니다. 각composable
대상은 정규화된 이름이 각 대상의android:name
속성으로 사용되는 최상위 인수 없는@Composable
메서드로 표현되어야 합니다. 이러한 대상 중 하나로 이동하면 컴포저블 콘텐츠를 표시하기 위해 포함 프래그먼트가 생성됩니다. (I0ef2e, b/265480755)// In HomeScreen.kt @Composable fun HomeScreen() { // Your Composable content here }
// In your navigation.xml <composable android:id="@+id/home_screen" android:name="com.example.HomeScreenKt\$HomeScreen" />
API 변경사항
- Kotlin 직렬화를 기반으로 하는 접근 방식을 사용하여 Navigation Compose에서 Safe Args를 지원하는 작업이 계속되었습니다. 이러한 API는 완료되지 않았으며
ExperimentalSafeArgsApi
주석으로 표시됩니다. 이 주석은 향후 출시에서 전체 API 노출 영역이 완료되면 삭제됩니다. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)
버전 2.8.0-alpha06
2024년 4월 3일
androidx.navigation:navigation-*:2.8.0-alpha06
이 출시되었습니다. 버전 2.8.0-alpha06에는 이 커밋이 포함되어 있습니다.
API 변경사항
- Kotlin 직렬화를 기반으로 하는 접근 방식을 사용하여 Navigation Compose에서 Safe Args를 지원하기 시작했습니다. 이러한 API는 완료되지 않았으며
ExperimentalSafeArgsApi
주석으로 표시됩니다. 이 주석은 향후 출시에서 전체 API 노출 영역이 완료되면 삭제됩니다. (I644e7, I98896, I2a1c5, I43a51, I836a1, Ic5eec, I39407, I24e41, If9e14, Ibb13e, If44d3, Icb70f, I8972f, I1d432, Icf32b, I20a14, I262aa, I7de99, I35990, I1033d, b/188693139)
버그 수정
- 이제
NavHost
에서Alignment.TopStart
을 기본 contentAlignment 인수로 사용합니다. 이렇게 하면AnimatedContent
의 기본값과 일치하고 중앙 전환에서 예기치 않은 크기의 일부 인스턴스가 수정됩니다. (I09e72, b/330111602) - Navigation Compose를 사용하는 동안 뒤로 탐색 예측 동작을 탭하면
NavHost
가 즉시 종료되지 않고 맞춤 전환을 올바르게 완료합니다. (I99017, b/327292110)
버전 2.8.0-alpha05
2024년 3월 20일
androidx.navigation:navigation-*:2.8.0-alpha05
이 출시되었습니다. 버전 2.8.0-alpha05에는 이 커밋이 포함되어 있습니다.
새로운 기능
- 이제
defaultValue
를 사용하지 않고도startDestination
경로에서NavGraph
의startDestination
에 인수를 직접 전달할 수 있습니다. 이는 중첩된NavGraph
startDestinations
에도 적용됩니다. (I0e0b5, b/109505019, b/188693139)
API 변경사항
- 목록, 배열, 맵과 같은 컬렉션 기반 인수의
NavType<T>
서브클래스인 새로운 추상CollectionNavType<T>
클래스를 추가했습니다. (Ic6d63, b/188693139) - 모든 기본
NavType
배열 (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
,StringArrayType
)이 이제CollectionNavType
유형입니다. (Idcf79, b/188693139) - 이제
NavType
에서 동일한 유형의 두 값이 서로 같은지 확인하는 새로운 개방형valueEquals
API를 제공합니다. (I6cb97, b/327229511)
버그 수정
- 이제 딥 링크의 쿼리 매개변수가 인수 이름 (예:
{argName}
)을 중괄호로 묶은 값을 문자열 기반NavTypes
의 유효한 값으로 허용합니다. 이렇게 하면 이러한 값이 모든 유형에 대해 유효하지 않은 값 (또는 값 없음)으로 간주되는 문제가 해결됩니다. (I18302, b/327274038) - 이제
navigate
또는popBackStack
와 같은 경로를 지원하는NavController
함수가 배열NavTypes
의 인수로 채워진 경로를 올바르게 일치시킬 수 있습니다. (Iea805, b/327229511)
버전 2.8.0-alpha04
2024년 3월 6일
androidx.navigation:navigation-*:2.8.0-alpha04
이 출시되었습니다. 버전 2.8.0-alpha04에는 이 커밋이 포함되어 있습니다.
새로운 기능
- 이제
composable
또는navigation
함수의 초기화의 일부로 정의하여 Navigation Compose에서 전환의SizeTranform
를 지정할 수 있습니다. (I91062, b/296912651)
버그 수정
- 동작 없이 시스템 뒤로를 사용할 때 Compose 탐색의
NavHost
가 전환을 제대로 표시하지 못하는 문제가 수정되었습니다. (Iceeae, b/325998468)
버전 2.8.0-alpha03
2024년 2월 21일
androidx.navigation:navigation-*:2.8.0-alpha03
이 출시되었습니다. 버전 2.8.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
NavBackStackEntry.savedStateHandle
는 기본 스레드에 있어야 하는 코드를 사용하기 때문에 이제@MainThread
로 표시됩니다. (Ibb988, b/299523245)
버그 수정
- 연결된 항목의
ViewModel
가 저장된 상태의 일부가 아니기 때문에NavGraph
ViewModel이 너무 빨리DESTROYED
가 되는 Navigation의 문제를 수정했습니다. (Ib6bb7, b/317581849)
종속 항목 업데이트
- 이제 Navigation Compose는 Compose 1.7.0-alpha03에 종속됩니다.
버전 2.8.0-alpha02
2024년 2월 7일
androidx.navigation:navigation-*:2.8.0-alpha02
이 출시되었습니다. 버전 2.8.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 Navigation Compose는 compose-animation의 새
SeekableTransitionState
API를 통해 인앱 뒤로 탐색 예측을 지원합니다. 이렇게 하면 뒤로 동작을 사용하여 완료된 동작을 통해 트랜잭션을 커밋할지 아니면 취소할지 결정하기 전에 맞춤 전환으로 이전 대상을 볼 수 있습니다. (I8b8e9)
버전 2.8.0-alpha01
2024년 1월 24일
androidx.navigation:navigation-*:2.8.0-alpha01
이 출시되었습니다. 버전 2.8.0-alpha01에 포함된 커밋을 확인하세요.
버그 수정
- 대상에 대한 여러 개의
saveState
호출로 인해 여러 상태가 저장되지만 첫 번째 상태만 복원될 수 있는BackStackState
누수가 수정되었습니다. (I598b0, b/309559751) NavigationUI
도우미를 사용하여 앱 바의 제목을 채울 때 문자열이 아닌 인수가 올바르게 표시되지 않는 문제를 수정했습니다. (#636, b/316676794)
종속 항목 업데이트
- 이제 Navigation Compose가 Compose
1.7.0-alpha01
에 종속되며 예기치 않은 크기 조정 애니메이션을 일으킬 수 있는 문제를 수정했습니다. (b/297258205)
외부 기여
NavigationUI
도우미를 사용하여 앱 바의 제목을 채울 때 문자열이 아닌 인수의 표시 문제를 수정해 주신 SimonMarquis님, 감사합니다.
버전 2.7.7
버전 2.7.7
2024년 2월 7일
androidx.navigation:navigation-*:2.7.7
이 출시되었습니다. 버전 2.7.7에 포함된 커밋을 확인하세요.
버그 수정
- 탐색
2.8.0-alpha01
에서 백포팅됨: 단일NavBackStackEntry
에서 여러 개의saveState()
를 호출하면 여러 상태가 저장되지만 첫 번째로 저장된 상태만 복원할 수 있는BackStackState
누수가 수정되었습니다. (I598b0, b/309559751) - Navigation
2.8.0-alpha01
에서 백포팅됨:NavigationUI
도우미를 사용하여 앱 바의 제목을 채울 때 문자열이 아닌 인수가 제대로 표시되지 않는 문제를 수정했습니다. (#636, b/316676794)
외부 기여
NavigationUI
도우미를 사용하여 앱 바의 제목을 채울 때 문자열이 아닌 인수의 표시 문제를 수정해 주신 SimonMarquis님, 감사합니다.
버전 2.7.6
버전 2.7.6
2023년 12월 13일
androidx.navigation:navigation-*:2.7.6
이 출시되었습니다. 버전 2.7.6에 포함된 커밋을 확인하세요.
버그 수정
- 이제
NavGraph
equals()
함수가 호출하는 그래프뿐만 아니라 다른 그래프의 노드를 올바르게 고려합니다. 이렇게 하면 ID가 다른 노드가 있는 그래프가 더 이상 동일한 것으로 간주되지 않습니다. (I401cb, b/311414915)
버전 2.7.5
버전 2.7.5
2023년 11월 1일
androidx.navigation:navigation-*:2.7.5
이 출시되었습니다. 버전 2.7.5에 포함된 커밋을 확인하세요.
성능 개선
- 두 그래프를 비교할 때의 성능 (시간 및 할당 횟수 측면 모두)이 크게 개선되었습니다. 즉, 새 그래프를 기존 그래프와 내부적으로 비교하는
setGraph
와 같은 호출이 훨씬 더 빠르고 프레임이 건너뛰어지는 횟수가 줄어듭니다. 이번 개선에 기여한 미하엘 Z님, 감사합니다. (I6ad62) - 이제
NavHost
는 업데이트된 상태를 읽기 위해 두 번째 패스가 완료될 때까지 기다리지 않고 첫 번째 구성 패스에서 시작 대상을 렌더링합니다. (I439a7, b/304852206)
버그 수정
- 그래프에 두 대상을 연결하는 작업이 포함된 대상이 있는 경우에만 정확히 동일한 그래프로
setGraph
를 두 번 이상 호출하면 백 스택이 팝되는 문제가 수정되었습니다. (Ieaed7) - 빠르게 탐색했다가 닫은 대화상자는 더 이상
NavController.visibleEntries
목록에 누수되지 않습니다. (I67586, b/287969970) - 항목이 팝된 후 구성이 변경되면 이제
saveState
가 false이면 항목의ViewModel
가 올바르게 지워집니다. (Idf242, b/298164648) - 구성 변경 또는
setGraph
호출 전에 백 스택이 완전히 비어 있고 수신 인텐트에FLAG_ACTIVITY_NEW_TASK
플래그가 설정된 경우에만NavController
가 동일한 딥 링크를 두 번 이상 처리할 수 있는 문제를 수정했습니다. (I73c7f)
종속 항목 업데이트
- 이제 Fragment를 사용한 탐색이 Fragment 1.6.2에 종속되므로
clearBackStack
를 호출할 때 중첩된 프래그먼트의ViewModel
인스턴스가 삭제되지 않는 문제가 수정되었습니다.
버전 2.7.4
버전 2.7.4
2023년 10월 4일
androidx.navigation:navigation-*:2.7.4
이 출시되었습니다. 버전 2.7.4에 포함된 커밋을 확인하세요.
새로운 기능
popUpTo
가 인수가 있는 경로를 사용하여 이러한 정확한 인수를 사용하는 특정 항목으로 다시 돌아갈 수 있도록 지원을 추가했습니다. 이는popBackStack
에 있는 지원과 일치합니다. (I731f4, b/299255572)
버그 수정
popUpTo
를 사용하여 다른 탐색으로 탐색을 중단하면FragmentNavigator
이 비정상 종료되는 문제를 수정했습니다. (I3c848, b/301887045)- 시스템 뒤로 눌렀을 때 표시된 프래그먼트와 일치하도록
currentDestination
가 올바르게 업데이트되지 않는 문제를 수정했습니다. (Id0d6c, b/289877514) - 이제 위의 대화상자가 닫히면
DialogFragment
수명 주기가RESUMED
상태로 올바르게 이동합니다. (I88f0d, b/301811387)
버전 2.7.3
버전 2.7.3
2023년 9월 20일
androidx.navigation:navigation-*:2.7.3
이 출시되었습니다. 버전 2.7.3에 포함된 커밋을 확인하세요.
버그 수정
- 프래그먼트가 포함된 탐색에서
visibleEntries
목록에 잘못된 항목이 포함되는 문제를 수정했습니다. (I5caa9, b/288520638) - 플로팅 창 대상 (예:
Dialogs
,Bottomsheets
등)이RESUMED
수명 주기 콜백을 받지 못하는 문제를 수정했습니다. (I3b866, b/287505132)
버전 2.7.2
버전 2.7.2
2023년 9월 6일
androidx.navigation:navigation-*:2.7.2
이 출시되었습니다. 버전 2.7.2에 포함된 커밋을 확인하세요.
버그 수정
- 이제 Navigation이 Lifecycle
2.6.2
에 종속되므로 프로세스 종료 및 재생성 후 대상의rememberSaveable
상태와ViewModel
소유SavedStateHandle
인스턴스가 제대로 복원되지 않는rememberSaveable
와 Navigation Compose의NavHost
간의 상호작용이 수정되었습니다. (b/298059596, b/289436035) - Navigation Compose에서 여러 대화상자를 동시에 표시할 때 부분적으로 가려진 대화상자 (예: 최상위 대화상자가 아님)가
STARTED
상태가 아닌CREATED
수명 주기 상태가 되는 문제를 수정했습니다. (aosp/2728520, b/289257213) - 탐색 Compose에 여러 대화상자를 동시에 표시할 때 최상위 대화상자를 닫으면 새 최상위 대화상자가
RESUMED
로 올바르게 이동하지 않고STARTED
수명 주기 상태에 멈추는 문제를 수정했습니다. (aosp/2629401, b/286371387) - 탐색 Safe Args가 더 이상 실제로 실행되지 않는 경우 작업을 더 이상 조기 인스턴스화하지 않습니다. (I0e385, b/260322841)
종속 항목 업데이트
- 이제 Navigation Compose가 Compose 1.5.1에 종속됩니다.
버전 2.7.1
버전 2.7.1
2023년 8월 23일
androidx.navigation:navigation-*:2.7.1
이 출시되었습니다. 버전 2.7.1에 포함된 커밋을 확인하세요.
버그 수정
Scaffold
를 사용할 때Lifecycle.State.DESTROYED
ViewModel
에 액세스하려고 하면 오류가 발생할 수 있는 Navigation with Compose의 문제를 수정했습니다. (I1dc11, b/268422136)
버전 2.7.0
버전 2.7.0
2023년 8월 9일
androidx.navigation:navigation-*:2.7.0
이 출시되었습니다. 버전 2.7.0에 포함된 커밋을 확인하세요.
2.6.0 이후 중요 변경사항
Accompanist의 애니메이션
이제 AnimatedContent
가 안정적이므로 코드를 Accompanist 탐색 애니메이션에서 Navigation Compose 자체로 다시 이동할 수 있었습니다.
즉, AnimatedNavHost
에 있던 맞춤 전환 설정에 대한 모든 지원이 NavHost
에서 직접 지원됩니다.
Accompanist Navigation Animation은 더 이상 변경되지 않으며 곧 Navigation Compose 자체로 다시 이전하는 방법에 관한 안내와 함께 공식적으로 지원 중단될 예정입니다. 하지만 이미 최신 Accompanist 알파 (0.31.2-alpha
)를 사용하고 있다면 이전 가이드의 역순으로 진행하면 되며 다른 API 변경사항은 필요하지 않습니다. (b/197140101)
버그 수정
- 이제 Navigation Compose의 NavHost가 Activity가 중지되고 재개된 후에도 시스템 뒤로 호출을 올바르게 가로챕니다. (Icb6de, b/279118447)
종속 항목 업데이트
- 이제 Navigation이
1.1.0
에서 Compose1.5.0
에 종속됩니다.
버전 2.7.0-rc01
2023년 7월 26일
androidx.navigation:navigation-*:2.7.0-rc01
이 출시되었습니다. 버전 2.7.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
NavHost
의 일부로 생성된EnterTransition
및ExitTransition
람다가NavHost
가 컴포지션에서 삭제된 후에도 메모리에 남아 있을 수 있는 문제를 수정했습니다. (I893d0)
알려진 문제
- Navigation 2.6.x에서 popUpTo로 탐색할 때
IllegalArgumentException
이 발생할 수 있는 문제가 있습니다. 여기에 제안된 조언과 마찬가지로 그래프를 재구성하여 이 예외를 방지할 수 있습니다. (b/287133013)
버전 2.7.0-beta02
2023년 6월 28일
androidx.navigation:navigation-*:2.7.0-beta02
이 출시되었습니다. 버전 2.7.0-beta02에 포함된 커밋을 확인하세요.
버그 수정
- 이제 Navigation Compose에
popUpTo
옵션으로 navigate를 사용하는 맞춤 전환에 적절한 z 순서가 있습니다.(/Ib1c3a, b/285153947)
버전 2.7.0-beta01
2023년 6월 7일
androidx.navigation:navigation-*:2.7.0-beta01
이 출시되었습니다. 버전 2.7.0-beta01에 포함된 커밋을 확인하세요.
버그 수정
- 이제 Navigation Compose의
NavHost
가Activity
가STOPPED
및RESUMED
된 후에도 시스템 뒤로 호출을 올바르게 가로챕니다. (Icb6de, b/279118447)
버전 2.7.0-alpha01
2023년 5월 24일
androidx.navigation:navigation-*:2.7.0-alpha01
이 출시되었습니다. 버전 2.7.0-alpha01에 포함된 커밋을 확인하세요.
Accompanist의 애니메이션
이제 AnimatedContent
가 안정적이므로 코드를 Accompanist 탐색 애니메이션에서 Navigation Compose 자체로 다시 이동할 수 있었습니다.
즉, AnimatedNavHost
에 있던 맞춤 전환 설정에 대한 모든 지원이 NavHost
에서 직접 지원됩니다.
Accompanist Navigation Animation은 더 이상 변경되지 않으며 곧 Navigation Compose 자체로 다시 이전하는 방법에 관한 안내와 함께 공식적으로 지원 중단될 예정입니다. 하지만 이미 최신 Accompanist 알파 (0.31.2-alpha
)를 사용하고 있다면 이전 가이드의 역순으로 진행하면 되며 다른 API 변경사항은 필요하지 않습니다. (b/197140101)
버그 수정
- Navigation
2.6.0-rc02
부터:popUpTo
로 이동하고 뷰를 다시 만들지 않고 백 스택에서 프래그먼트를 팝하면 시스템 뒤로가 작동하지 않는 프래그먼트의 탐색 관련 문제가 수정되었습니다. (Ieb8d4, b/281726455)
종속 항목 업데이트
- 이제 Navigation이 Compose
1.5.0-beta01
에 종속됩니다.
버전 2.6.0
버전 2.6.0
2023년 6월 7일
androidx.navigation:navigation-*:2.6.0
이 출시되었습니다. 버전 2.6.0에 포함된 커밋을 확인하세요.
2.5.0 이후 탐색의 중요 변경사항
NavBackStackEntry
의arguments
및OnDestinationChangedListener
에 전달된arguments
는 이제 대상으로 이동할 때 생성된 변경 불가능한 인수의 사본일 뿐입니다. 즉, 이러한 번들의 변경사항은arguments
또는 다른OnDestinationChangedListener
인스턴스에 대한 후속 액세스에 반영되지 않습니다.- 이제
NavDeepLink
가 배열의 기본값을 지원합니다. 따라서 인수의 배열 유형에 매핑되는 반복 쿼리 매개변수를 지원할 수 있습니다. 이제NavType
에는 파싱된 두 값을 결합하도록 재정의할 수 있는 기본 메서드도 포함됩니다. - 이제
NavType
의 맞춤 서브클래스가serializeAsValue
를 재정의하여 값을 문자열로 직렬화할 수 있습니다. 이로써parseValue
를 통해 직렬화와 역직렬화를 모두NavType
클래스에 완전히 캡슐화할 수 있습니다. 이제StringType
이 지정된String
에서Uri.encode
를 호출하도록 이 메서드를 재정의합니다.
2.5.0 이후 Navigation Compose의 중요 변경사항
NavHost
를 사용하여 컴포저블을 미리 볼 때 이제 NavGraph의startDestination
이 기본적으로 표시됩니다.- 이제
NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
,NavController.clearBackStack(route)
은 인수가 부분적으로 또는 완전히 채워진 경로를 지원합니다. 인수는 항목의 인수와 정확히 일치해야 합니다. - 이제
navDeepLink
Kotlin DSL을 사용하여 빈NavDeepLink
를 만들려고 하면, 딥 링크가 유효하려면 URI, 작업 또는 MIME 유형이 필요함을 나타내는 린트 경고가 표시됩니다.
2.5.0 이후 Fragment를 사용한 Navigation의 중요 변경사항
NavHostFragment
가 더 이상 시스템 뒤로 버튼 자체를 가로채지 않습니다. 이렇게 하면 기본FragmentManager
가 시스템 백을 처리할 수 있습니다. 이렇게 하면 Fragment1.7.0-alpha01
이상이 Android U 기기에서 인앱 뒤로 탐색 예측 애니메이션을 제공할 수 있습니다.- Navigation with Fragments를 사용할 때
FragmentManager
의 백 스택에 프래그먼트를 추가하는FragmentTransaction
를 수동으로 실행하려고 하면 이제IllegalArgumentException
이 발생합니다. 항상navigate()
API를 통해 프래그먼트를 추가해야 합니다. - 탐색 XML 파일의 활동 요소에서
app:data
및app:dataPattern
속성의 자리표시자로 정확한 문자열${applicationId}
를 사용하면 자리표시자는 인플레이션 시 자동으로 컨텍스트의packageName
으로 채워집니다. - 이제
FragmentNavigator
는NavBackStackEntries
를 탐색하고 표시할 때 전환 API를 사용합니다. 즉,NavBackStackEntry
Lifecycle
은 이제 진입 및 종료 프래그먼트 특수 효과가 완료될 때까지 기다린 후에 최종Lifecycle.State
를 이동합니다. - 이제
DialogFragmentNavigator
는NavBackStackEntries
를 탐색하고 표시할 때 전환 API를 사용합니다. 즉,NavBackStackEntry
Lifecycle
은DialogFragment
Lifecycle
이DESTROYED
로 이동할 때까지 기다린 후에 자신이DESTROYED
로 이동합니다. - 이제
NavHostFragment
를 사용하면onCreate()
후에만이 아니라NavHostFragment
가FragmentManager
에 연결되는 즉시NavController
를 검색할 수 있습니다. - Navigation의 동적 기능 모듈 지원이 이제 세분화된 Play Feature Delivery 라이브러리에 종속됩니다.
- Navigation Safe Args가 이제 Android Gradle 플러그인 버전 7.3.0에 종속됩니다. 즉, 버전 7.3.0 이상에서만 호환됩니다.
2.5.0 이후 NavigationUI의 중요 변경사항
- 탐색 그래프의 ID를
AppBarConfiguration
에 전달할 때(예:Menu
를 통해) 이제NavigationUI
는 그래프 내부의 모든 대상을 최상위 대상으로 잘못 표시하는 것이 아니라 해당 탐색 그래프의 시작 대상만 최상위 대상으로 간주합니다. 개별 대상의 ID를 전달하는 동작은 변경하지 않았습니다.AppBarConfiguration
의 새로운 함수인isTopLevelDestination
을 통해 자체 코드에 동일한 기능을 사용할 수 있습니다. - 이제 상단 앱 바 사용을 위한
NavigationUI
의setupWithNavController
통합은 자동 생성된 리소스 정수를 출력하지 않고android:label
에 있는ReferenceType
인수의R.string
값을 문자열 값으로 파싱합니다. NavigationUI
가 이제 선택된MenuItem
을 통한 탐색에 실패할 때 로그를 제공합니다.
버전 2.6.0-rc02
2023년 5월 24일
androidx.navigation:navigation-*:2.6.0-rc02
이 출시되었습니다. 버전 2.6.0-rc02에 포함된 커밋을 확인하세요.
버그 수정
popUpTo
로 이동하고 뷰를 다시 만들지 않고 백 스택에서 프래그먼트를 표시하면 시스템 뒤로가 작동하지 않는 프래그먼트의 탐색과 관련된 문제가 수정되었습니다. (Ieb8d4, b/281726455)
버전 2.6.0-rc01
2023년 5월 10일
androidx.navigation:navigation-*:2.6.0-rc01
이 출시되었습니다. 버전 2.6.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 프래그먼트가 있는 탐색에서
onResume()
수명 주기 콜백에서popUpTo
를 사용하여 탐색을 통해 프래그먼트를 삭제하면IllegalStateException
이 발생하는 문제를 수정했습니다. (I21884, b/279644470)
버전 2.6.0-beta01
2023년 4월 19일
androidx.navigation:navigation-*:2.6.0-beta01
이 출시되었습니다. 버전 2.6.0-beta01에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavBackStackEntry
에서 맞춤toString
구현을 제공합니다. (Iff00b)
버그 수정
- Navigation with Fragments를 사용할 때
FragmentManager
의 백 스택에 프래그먼트를 추가하는FragmentTransaction
를 수동으로 실행하려고 하면 이제IllegalArgumentException
이 발생합니다. 항상navigate()
API를 통해 프래그먼트를 추가해야 합니다. (I6d38e) - 동일한 프레임에 항목을 추가하는
navigate
와 항목을 삭제하는popBackStack
가 있는 경우 백 스택의 결과 상위 항목이 이제 일관되게RESUMED
Lifecycle.State
로 돌아갑니다. (Id8067, b/276495952)
버전 2.6.0-alpha09
2023년 4월 5일
androidx.navigation:navigation-*:2.6.0-alpha09
이 출시되었습니다. 버전 2.6.0-alpha09에 포함된 커밋을 확인하세요.
버그 수정
NavDestination
에 nullable이 아닌NavArgument
가 포함된 경우 이 대상의 경로에 nullable이 아닌NavArgument
와 동일한 이름의 args 자리표시자가 포함되어야 하는 등 잘못된 경로에 대한 검사를 수정했습니다. (Ic62bf, b/274697949)- 이제
Action/MimeType
를 기반으로 하는 딥 링크 탐색은Action/MimeType
가 일치하는NavDestination
에 필요한 null이 아닌NavArgument
가 탐색 작업에서 누락되면 실패합니다. (Ibfa17, b/271777424) NavController
가 이전 그래프와 동일한 경로와 대상이 있는 그래프를 설정하면 이제 현재 그래프 노드와 백 스택 대상을 새 인스턴스로 올바르게 대체합니다. 이렇게 하면 Navigation Compose에서 상태를 저장하지 않고onLaunchSingleTop
를 사용할 때 발생하는 비정상 종료 문제가 수정됩니다. 또한 루트 그래프 빌드와 연결된 대상 및 잘못된 백 스택으로 이동할 때 발생하는 오류도 수정되었습니다. (I5bc58, b/275258161, b/275407804)
버전 2.6.0-alpha08
2023년 3월 22일
androidx.navigation:navigation-*:2.6.0-alpha08
이 출시되었습니다. 버전 2.6.0-alpha08에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavHostFragment
를 사용하면onCreate()
후에만이 아니라NavHostFragment
가FragmentManager
에 연결되는 즉시NavController
를 검색할 수 있습니다. (Ic6382, b/220186282)
버그 수정
- null이 아닌 인수가 포함된 중첩 그래프를 팝할 때 발생하는
NullPointerException
를 수정했습니다. (6b3581, b/249988437) popUpTo
로 이동한 후 시스템 뒤로를 사용하면NavController
의 상태가 올바른 항목으로 팝됩니다. (I3a8ec, b/270447657)- 이제
FragmentNavigator
는 시스템 뒤로 또는popBackStack()
를 통해 백 스택이 팝될 때, 그리고 트랜잭션에서 프래그먼트에 효과를 사용하는지 여부에 관계없이 항목을 올바르게 팝합니다. (I81bdf) - 탐색을 사용하지 않고
FragmentNavigator
의FragmentManager
에 프래그먼트를 추가해도 더 이상 비정상 종료가 발생하지 않습니다. (b17204, b/274167493)
종속 항목 업데이트
- 이제 Navigation이 Lifecycle
2.6.1
에 종속됩니다. (586fe7) - 이제 Navigation이 SavedState
1.2.1
에 종속됩니다. (078e4e) - 이제 Navigation이 ProfileInstaller
1.3.0
에 종속됩니다. (512f0c)
버전 2.6.0-alpha07
2023년 3월 8일
androidx.navigation:navigation-*:2.6.0-alpha07
이 출시되었습니다. 버전 2.6.0-alpha07에 포함된 커밋을 확인하세요.
버그 수정
- 경로를 사용하는
getBackStackEntry
,popBackStack
,clearBackStack
API 변형이 이제 nullable 인수와 nullable 쿼리 매개변수가 있는 경로 패턴을 사용합니다. (I22294, b/269302500) NavController
에서clearBackStack()
를 호출해도 삭제된 백 스택과 연결된 프래그먼트 관리자의 저장된 상태가 삭제되지 않는 문제를 수정했습니다. (Ic1cce, b/271190202)- 탭 간에 시스템 뒤로를 사용할 때
BottomNavigationView
에서 잘못된MenuItem
가 강조 표시되는 2.6.0-alpha06의 회귀 문제가 수정되었습니다. (I634f6, b/270447657) Animation
를 사용할 때NavBackStackEntry
가 RESUMED 상태로 이동하지 않는 2.6.0-alpha06의 회귀 문제를 수정했습니다. (Ib3589, b/269646882)
버전 2.6.0-alpha06
2023년 2월 22일
androidx.navigation:navigation-*:2.6.0-alpha06
이 출시되었습니다. 버전 2.6.0-alpha06에 포함된 커밋을 확인하세요.
새로운 기능
NavHost
를 사용하여 컴포저블을 미리 볼 때 이제 NavGraph의startDestination
이 기본적으로 표시됩니다. (I2b89f)
API 변경사항
- 이제 모든
NavController
navigate
오버로드가@MainThread
로 주석 처리되어 기본 스레드에서 호출됩니다. (I2c0b0, b/263427111)
버그 수정
- 동적 프래그먼트 탐색을 사용하는 동안 탐색을 시도할 때 발생하는 비정상 종료 문제를 수정했습니다. (I3ee29, b/268360479)
- 시스템 뒤로 버튼을 통해 다른 프래그먼트로 이동할 때 하단 탐색 메뉴가 올바른 선택 항목으로 업데이트되지 않는 버그를 수정했습니다. (If559f, b/269044426)
알려진 문제
- 프래그먼트와 함께 탐색을 사용하는 경우
Animation
API를 사용할 때NavBackStackEntry
의 수명 주기가RESUMED
에 도달하지 못합니다. (b/269646882) - Navigation with Fragments를 사용하고
BottomNavigation
로 탐색할 때 여러 항목이 있는 백 스택을 복원하려고 하면BottomMenuItem
가 올바르게 업데이트되지 않습니다. (b/270447657) - Navigation with Fragments를 사용할 때 상태를 복원한 후 프래그먼트가
DESTROYED
인 경우NavBackStackEntry
Lifecycle
가DESTROYED
을 가져오지 않습니다 . (b/270610768)
버전 2.6.0-alpha05
2023년 2월 8일
androidx.navigation:navigation-*:2.6.0-alpha05
가 출시되었습니다. 버전 2.6.0-alpha05에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
,NavController.clearBackStack(route)
은 인수가 부분적으로 또는 완전히 채워진 경로를 지원합니다. 인수는 항목의 인수와 정확히 일치해야 합니다. (Iebd28, Ic678c, I3b37b, b/257514373) - 이제
FragmentNavigator
는NavBackStackEntries
를 탐색하고 표시할 때 전환 API를 사용합니다. 즉,NavBackStackEntry
Lifecycle
은 이제 진입 및 종료 프래그먼트 특수 효과가 완료될 때까지 기다린 후에 최종Lifecycle.State
를 이동합니다. (I3cb19, b/238686802) - 이제
DialogFragmentNavigator
는NavBackStackEntries
를 탐색하고 표시할 때 전환 API를 사용합니다. 즉,NavBackStackEntry
Lifecycle
은DialogFragment
Lifecycle
이DESTROYED
로 이동할 때까지 기다린 후에 자신이DESTROYED
로 이동합니다. (I53ee5, b/261213893)
API 변경사항
- 이제
Navigator
가NavBackStackEntries
를 중간Lifecycle.State
로 이동할 수 있도록NavigatorState
가prepareForTransition
API를 제공합니다. (I42c21, b/238686802) - 이제
backstack
속성을 통해NavGraphNavigator
또는ComposeNavigator
에 연결된 백 스택에 액세스할 수 있습니다.ComposeNavigator
는onTransitionComplete()
콜백을 노출하여 탐색 또는popBackStack
작업을 실행한NavBackStackEntry
를 완료로 표시합니다. (I02062, I718db, b/257519195)
버그 수정
- 이제
push/popWithTransition
API를 사용하고 있고 항목이 이미 처리되고 있을 때 Navigator가 무작동 상태가 됩니다. (Iadbfa, b/261213893) launchSingleTop
을 중첩된NavGraph
와 함께 사용하면startDestination
의 원래 대상에서 시작하는 모든 대상이 백 스택 상단에만 올바르게 추가됩니다. (Id4bea, b/253256629)- 이제
launchSingleTop
플래그를 true로 설정하여 동일한 대상으로 이동하면 Navigation이DialogFragment
인스턴스를 올바르게 대체합니다. (I45b5a, b/149572817) - 정확히 19자인 인수를 사용하면 Navigation SafeArgs에서 더 이상 컴파일 오류가 발생하지 않습니다. (Id60bc, b/257110095)
버전 2.6.0-alpha04
2022년 11월 9일
androidx.navigation:navigation-*:2.6.0-alpha04
가 출시되었습니다. 버전 2.6.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavType
의 맞춤 서브클래스가serializeAsValue
를 재정의하여 값을 문자열로 직렬화할 수 있습니다. 이로써parseValue
를 통해 직렬화와 역직렬화를 모두NavType
클래스에 완전히 캡슐화할 수 있습니다. 이제StringType
이 지정된String
에서Uri.encode
를 호출하도록 이 메서드를 재정의합니다. (Ie5213, b/247637434) NavigationUI
가 이제 선택된MenuItem
을 통한 탐색에 실패할 때 로그를 제공합니다. (I2af5a, b/247730357)
버그 수정
- 이제 Navigation 딥 링크가 그래프 초기화 대신 지연 파싱되어 시작 시 앱 성능이 개선될 수 있습니다. (Iab0ab)
- null 기본 인수가 있는 대상에 딥 링크로 연결한 후 위로 이동할 때 발생하는 비정상 종료 문제를 수정했습니다. (I51c24, b/243183636)
종속 항목 업데이트
- Navigation의 동적 기능 모듈 지원이 이제 세분화된 Play Feature Delivery 라이브러리에 종속됩니다. (Ib4ddc)
- Navigation Safe Args가 이제 Android Gradle 플러그인 버전 7.3.0에 종속됩니다. 즉, 버전 7.3.0 이상에서만 호환됩니다. (I47e49)
버전 2.6.0-alpha03
2022년 10월 24일
androidx.navigation:navigation-*:2.6.0-alpha03
이 출시되었습니다. 버전 2.6.0-alpha03에 포함된 커밋을 확인하세요.
버그 수정
- Navigation
2.5.3
부터:Crossfade
에서 구성할 수 있는 대상이 없으면NavHost
에서 더 이상NoSuchElementException
이 발생하지 않습니다. 이제 컴포지션을 건너뜁니다. (Ieb46e, b/253299416) - Navigation
2.5.3
부터: 대상이 백 스택에서 사라질 때 저장된 Compose 상태(예:rememberSaveable
사용)가 삭제되지 않는 문제가 수정되었습니다. (I64949)
종속 항목 업데이트
- Navigation은 이제 Fragment
1.5.4
에 종속됩니다. (Icd424)
버전 2.6.0-alpha02
2022년 10월 5일
androidx.navigation:navigation-*:2.6.0-alpha02
가 출시되었습니다. 버전 2.6.0-alpha02에 포함된 커밋을 확인하세요.
동작 변경사항
- 탐색 그래프의 ID를
AppBarConfiguration
에 전달할 때(예:Menu
를 통해) 이제NavigationUI
는 그래프 내부의 모든 대상을 최상위 대상으로 잘못 표시하는 것이 아니라 해당 탐색 그래프의 시작 대상만 최상위 대상으로 간주합니다. 개별 대상의 ID를 전달하는 동작은 변경하지 않았습니다.AppBarConfiguration
의 새로운 함수인isTopLevelDestination
을 통해 자체 코드에 동일한 기능을 사용할 수 있습니다. (Ie936e, b/238496771)
버그 수정
- 이제
navigation:navigation-fragment
구성요소가 Fragment 버전1.5.2
에 종속됩니다. (I00ba4) FloatingWindow
대상(예: 대화상자)으로 이동할 때 선택한 메뉴 항목이 더 이상 업데이트되지 않습니다. (I4cde8, b/240308330)
버전 2.6.0-alpha01
2022년 9월 7일
androidx.navigation:navigation-*:2.6.0-alpha01
이 출시되었습니다. 버전 2.6.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 상단 앱 바 사용을 위한
NavigationUI
의setupWithNavController
통합은 자동 생성된 리소스 정수를 출력하지 않고android:label
에 있는ReferenceType
인수의R.string
값을 문자열 값으로 파싱합니다. (I5f803, b/167959935) - 이제
NavDeepLink
가 배열의 기본값을 지원합니다. 따라서 인수의 배열 유형에 매핑되는 반복 쿼리 매개변수를 지원할 수 있습니다. 이제NavType
에는 파싱된 두 값을 결합하도록 재정의할 수 있는 기본 메서드도 포함됩니다. (Id68c3, b/209977108) - 탐색 XML 파일의 활동 요소에서
app:data
및app:dataPattern
속성의 자리표시자로 정확한 문자열${applicationId}
를 사용하면 자리표시자는 인플레이션 시 자동으로 컨텍스트의packageName
으로 채워집니다. (Iaabde, b/234223561) - 이제
navDeepLink
Kotlin DSL을 사용하여 빈NavDeepLink
를 만들려고 하면, 딥 링크가 유효하려면 URI, 작업 또는 MIME 유형이 필요함을 나타내는 린트 경고가 표시됩니다. (I08d2f, b/154038883)
API 변경사항
android:label="{arg}"
형식의 인수가 있는 동적 라벨을 문자열로 파싱하는 새NavDestination
확장 함수를 추가했습니다.R.string
값을 문자열 값으로 파싱하여ReferenceType
인수를 지원합니다. (I07d89, b/236269380)
동작 변경사항
- NavBackStackEntry의
arguments
및OnDestinationChangedListener
에 전달된arguments
는 이제 대상으로 이동할 때 생성된 변경 불가능한 인수의 사본일 뿐입니다. 즉, 이러한 번들의 변경사항은arguments
또는 다른OnDestinationChangedListener
인스턴스에 대한 후속 액세스에 반영되지 않습니다. (I676f5)
버그 수정
- Navigation
2.5.2
부터: 이제 동적 Navigation은 다른 모듈로 이동하기 전에 먼저 다른 모듈에서 Activity 대상을 올바르게 설치하려고 시도합니다. (Ia2c16, b/240292838) - Navigation
2.5.2
부터: 이제 동일한 대상으로 이동하고launchSingleTop
플래그를 true로 설정하면 Navigation이 Fragment 인스턴스를 올바르게 대체합니다. (I5a2f1, b/237374580) - Navigation
2.5.2
부터: 새로 표시된 시작 대상과 상위 요소를 공유하는 이중 중첩 그래프로 이동할 때 발생하는IllegalStateException
이 수정되었습니다. (I9f7cb, b/243778589)
버전 2.5
버전 2.5.3
2022년 10월 24일
androidx.navigation:navigation-*:2.5.3
이 출시되었습니다. 버전 2.5.3에 포함된 커밋을 확인하세요.
버그 수정
Crossfade
에서 구성할 수 있는 대상이 없을 때NavHost
에서 더 이상NoSuchElementException
이 발생하지 않습니다. 이제 컴포지션을 건너뜁니다. (Ieb46e, b/253299416)- 대상이 백 스택에서 사라질 때 저장된 Compose 상태(예:
rememberSaveable
사용)가 삭제되지 않는 문제가 수정되었습니다. (I64949)
버전 2.5.2
2022년 9월 7일
androidx.navigation:navigation-*:2.5.2
가 출시되었습니다. 버전 2.5.2에 포함된 커밋을 확인하세요.
버그 수정
- 이제 동적 Navigation은 다른 모듈로 이동하기 전에 먼저 다른 모듈에서 Activity 대상을 올바르게 설치하려고 시도합니다. (Ia2c16, b/240292838)
- 이제 동일한 대상으로 이동하고
launchSingleTop
플래그를 true로 설정하면 Navigation이 Fragment 인스턴스를 올바르게 대체합니다. (I5a2f1, b/237374580) - 새로 표시된 시작 대상과 상위 요소를 공유하는 이중 중첩 그래프로 이동할 때 발생하는
IllegalStateException
문제를 해결했습니다. (I9f7cb, b/243778589)
종속 항목 업데이트
- Navigation
2.5.2
는 이제 Fragment1.5.2
에 종속됩니다. (aosp/2178734)
버전 2.5.1
2022년 7월 27일
androidx.navigation:navigation-*:2.5.1
이 출시되었습니다. 버전 2.5.1에 포함된 커밋을 확인하세요.
버그 수정
Bundle
에 저장된 맞춤 인수 유형을 사용할 때Navigation Safe Args
가 더 이상 생성된 클래스에서 지원 중단 경고를 유발하지 않습니다. (Id86ed, b/237725966)
종속 항목 업데이트
- 이제 탐색 라이브러리가 Lifecycle
2.5.1
에 종속됩니다. (Ib4451) - 이제 탐색 라이브러리가 Activity
1.5.1
에 종속됩니다. (I3efe8) - 이제 탐색 라이브러리가 Fragment
1.5.1
에 종속됩니다. (I56177)
버전 2.5.0
2022년 6월 29일
androidx.navigation:navigation-*:2.5.0
이 출시되었습니다. 버전 2.5.0에 포함된 커밋을 확인하세요.
2.4.0 이후 중요 변경사항
- CreationExtras 통합 - 이제
Navigation
이 Lifecycle2.5.0
의CreationExtras
를 통해 스테이트리스(Stateless)ViewModelProvider.Factory
를 제공할 수 있습니다.
Navigation SafeArgs
Navigation Safe Args
가7.0.4
를 사용하도록Android Gradle Plugin
종속 항목을 업그레이드했으며7.0
이전의 AGP 버전을 위한 호환성을 삭제했습니다.- applicationId 대신 사용되는 네임스페이스 build.gradle 속성 지원이 추가되었습니다.
기타 변경사항
visibleEntries
API는 더 이상 실험용이 아니며, 대상이 현재NavController
에 따라 표시되는 모든 항목을 검색하는 함수를 제공합니다.
버전 2.5.0-rc02
2022년 6월 15일
androidx.navigation:navigation-*:2.5.0-rc02
가 출시되었습니다. 버전 2.5.0-rc02에 포함된 커밋을 확인하세요.
버그 수정
- Navigation Compose
NavHost
사용 시, 하단 대상 간에 빠르게 전환하는 경우 발생하는 비정상 종료 문제를 수정했습니다. (I3979a, b/234054916) applicationId
가 없는applicationIdSuffix
와 네임스페이스를 사용하거나applicationId
와 네임스페이스가 다른 경우Navigation SafeArgs
가 더 이상 다운되지 않습니다. (I754b1, b/233119646)- 이제
NavArgument
에 있는 맞춤toString()
함수로 인수의 내부 값을 표시할 수 있습니다. (I900a8)
버전 2.5.0-rc01
2022년 5월 11일
androidx.navigation:navigation-*:2.5.0-rc01
이 출시되었습니다. 버전 2.5.0-rc01에 포함된 커밋을 확인하세요.
새로운 기능
navigation.xml
파일의<activity>
요소 내에<deeplink>
요소를 배치한 경우 이와 관련된 경고를 표시하는 새로운 린트 규칙이 추가되었습니다. (Ic15a5, b/178403185)
버그 수정
- 이제
NavHost
및DialogHost
의 컴포저블 범위가 올바른 순서로 삭제됩니다. 즉, 내부 컴포저블은 외부 컴포저블보다 먼저 삭제됩니다. (I157e6) - 이제 Navigation SafeArgs는
ArgumentsGenerationTask
의PathSensitivity.RELATIVE
를 사용하여 캐시를 재배치할 수 있습니다. 즉, 이제 캐시 항목이 CI 빌드에서 로컬 빌드까지 재사용될 수 있습니다. (I5f67c, b/173420454) getBackStackEntry()
호출을 감싸는remember
호출도NavBackStackEntry
객체를 키로 전달하도록UnrememberedGetBackStackEntryDetector
린트 규칙이 업데이트되었습니다. (Ib7081, b/227382831)
버전 2.5.0-beta01
2022년 4월 20일
androidx.navigation:navigation-*:2.5.0-beta01
이 출시되었습니다. 버전 2.5.0-beta01에 포함된 커밋을 확인하세요.
버그 수정
- 이제
dismiss()
호출을 실행할 때DialogNavigator
가popWithTransition
을 사용합니다. 이로써 시스템 뒤로를 사용하거나 대화상자 외부를 탭하여 대화상자를 닫을 때IllegalStateException
을 일으키는dialog
대상 내ViewModel
사용으로 발생하는 경합 상태가 해결됩니다. (Id7376, b/226552301)
종속 항목 업데이트
- 탐색이 이제 Lifecycle
2.5.0-beta01
에 종속되므로 여러 백 스택을 사용할 때 기본이 아닌 하단 탐색 탭의NavHost
내에 다른NavHost
를 중첩할 때IllegalStateException
이 수정되었습니다.
버전 2.5.0-alpha04
2022년 4월 6일
androidx.navigation:navigation-*:2.5.0-alpha04
가 출시되었습니다. 버전 2.5.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
visibleEntries
가 더 이상 실험용이 아닙니다. (I4829f, b/225394514)
버그 수정
- 이제 NavHost가
NavController
의visibleEntries
를 사용하여 조합할 항목을 결정합니다. 즉, 중첩된 NavHost를 사용할 때 이제 내부NavHost
가 적절하게 애니메이션 처리됩니다. (I4ba2b, b/225394514) - 이제
NavController
에서 제공하는visibleEntries
StateFlow
가 현재 수명 주기 상태가 아닌 항목 최대 수명 주기 상태를 기반으로 합니다. 즉,navController
의 호스트 수명 주기가 STARTED보다 낮아져도 표시되는 전체 목록이 동일하게 유지됩니다. (I9e2a8, b/225394514) - 이제
SavedStateViewFactory
가SavedStateRegistryOwner
로 초기화된 경우에도CreationExtras
사용을 지원합니다. 추가 인수가 제공되면 초기화된 인수는 무시됩니다. (I6c43b, b/224844583) - 이제
NavDeepLink
에서 값이 없는 단일 쿼리 매개변수로 URI를 파싱할 수 있습니다. (I0efe8, b/148905489) - 이제 빈 문자열도 딥 링크에서 유효한 인수로 간주됩니다. (I70a0d, b/217399862)
- 네임스페이스를 사용할 때
AndroidManifest.xml
가 없어도Navigation Safe Args
이 더 이상 다운되지 않습니다. (I17ccf, b/227229815)
버전 2.5.0-alpha03
2022년 2월 23일
androidx.navigation:navigation-*:2.5.0-alpha03
이 출시되었습니다. 버전 2.5.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
CreationExtras
를by navGraphViewModels
에 전달하여ViewModel
을 만들 수 있습니다. (I29217, b/217618359)
버그 수정
NavDeepLinks
는 이제 경로/딥 링크 URI에 삽입되어 인코딩된 새 행 문자를 올바르게 지원합니다. (I513d1, b/217815060)- 이제
CreationExtras
는NavBackStackEntries
와 함께 사용되어 ViewModels를 만들 때 올바르게 작동합니다. (I69161, b/217617710) - Navigation Safe Args는 이제 AndroidManifest의 패키지 대신
build.gradle
에 정의된 네임스페이스 사용을 지원합니다. (I659ef, b/217414933)
버전 2.5.0-alpha02
2022년 2월 9일
androidx.navigation:navigation-*:2.5.0-alpha02
가 출시되었습니다. 버전 2.5.0-alpha02에 포함된 커밋을 확인하세요.
버그 수정
- Navigation
2.4.1
에서: 이제 중첩된 그래프와 함께 viewbinding을 사용할 때NavHostFragment
가OnBackPressedDispatcher
를 올바르게 설정합니다. (Ifbb51, b/214577959) - Navigation
2.4.1
에서: 여러 개의 중첩된NavGraph
를 통한 딥 링크 시 백 스택에 이제 중간 시작 대상이 올바르게 포함됩니다. (I504c0, b/214383060)
버전 2.5.0-alpha01
2022년 1월 26일
androidx.navigation:navigation-*:2.5.0-alpha01
이 출시되었습니다. 버전 2.5.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
NavBackStackEntry
는 이제 Lifecycle2.5.0-alpha01
의 일부로 도입된 ViewModel CreationExtras와 통합됩니다. (Ib9fe2, b/207012490)
버그 수정
- 프래그먼트의
onCreate()
에서by navGraphViewModels()
를 통해 생성된ViewModel
에 액세스할 때IllegalStateException
이 발생하는 문제를 수정했습니다. (I8a14d) NavDeepLink
는 더 이상 인수를 불필요하게 두 번 디코딩하지 않습니다. 즉, 이제 적절한 인수가 최종 대상에 전달됩니다. (I31b0a, b/210711399)
Safe Args
- 이제 Safe Args는 Android Gradle 플러그인 버전 7.0.4에 종속됩니다. 즉, Navigation Safe Args는 버전 7.0 이전의 Android 스튜디오와 더 이상 호환되지 않으며 이제 Android Gradle 플러그인 7.1.0 이상과 호환됩니다. (I41c88, b/213086135, b/207670704)
버전 2.4.2
버전 2.4.2
2022년 4월 6일
androidx.navigation:navigation-*:2.4.2
가 출시되었습니다. 버전 2.4.2에 포함된 커밋을 확인하세요.
버그 수정
- Navigation
2.5.0-alpha03
에서 백포트됨: 이제NavDeepLinks
가 이제 경로/딥 링크 URI에 삽입되는 인코딩된 새로운 행 문자를 알맞게 지원합니다. (I513d1, b/217815060) - Navigation
2.5.0-alpha03
에서 백포트됨: 이제 Navigation SafeArgs가 AndroidManifest의 패키지 대신build.gradle
에 정의된 네임스페이스 사용을 지원합니다. (I659ef, b/217414933) - Navigation
2.5.0-alpha04
에서 백포트됨: 네임스페이스를 사용할 때AndroidManifest.xml
이 없더라도Navigation Safe Args
이 더 이상 다운되지 않습니다. (I17ccf, b/227229815) - Navigation
2.5.0-alpha04
에서 백포트됨: 이제 빈 문자열도 딥 링크에서 유효한 인수로 간주됩니다. (I70a0d, b/217399862)
버전 2.4.1
버전 2.4.1
2022년 2월 9일
androidx.navigation:navigation-*:2.4.1
이 출시되었습니다. 버전 2.4.1에 포함된 커밋을 확인하세요.
버그 수정
- 이제 중첩된 그래프와 함께 viewbinding을 사용할 때
NavHostFragment
가OnBackPressedDispatcher
를 올바르게 설정합니다. (Ifbb51, b/214577959) - 여러 개의 중첩된
NavGraph
를 통한 딥 링크 시 이제 백 스택에 중간 시작 대상이 올바르게 포함됩니다. (I504c0, b/214383060) - Navigation
2.5.0-alpha01
에서 백포팅됨: 프래그먼트의onCreate()
에서by navGraphViewModels()
를 통해 만들어진 ViewModel에 액세스할 때IllegalStateException
과 함께 실패하는 문제를 수정했습니다. (I8a14d) - Navigation
2.5.0-alpha01
에서 백포팅됨:NavDeepLink
가 더 이상 인수를 불필요하게 두 번 디코딩하지 않습니다. 즉, 제대로 디코딩된 인수가 이제 최종 대상에 전달됩니다. (I31b0a, b/210711399) - Navigation
2.5.0-alpha01
에서 백포팅됨: 이제 Safe Args가 Android Gradle 플러그인 버전 7.0.4에 종속됩니다. 즉, Navigation Safe Args는 버전 7.0 이전의 Android 스튜디오와 더 이상 호환되지 않으며 이제 Android Gradle 플러그인 7.1.0 이상과 호환됩니다. (I41c88, b/213086135, b/207670704)
버전 2.4.0
버전 2.4.0
2022년 1월 26일
androidx.navigation:navigation-*:2.4.0
이 출시되었습니다. 버전 2.4.0에 포함된 커밋을 확인하세요.
2.3.0 이후 중요 변경사항
- 모든 Navigation 아티팩트가 Kotlin으로 다시 작성되었습니다. 이로 인해 제네릭을 사용하는 클래스(예:
NavType
서브클래스)의 null 허용 여부가 개선되었습니다.-ktx
아티팩트의 일부로 사용된 모든 Kotlin 확장 함수가 각각의 주요 아티팩트로 이동되었습니다.-ktx
아티팩트는 계속 게시되지만 현재 완전히 비어 있습니다. - 이제
navigation-fragment
아티팩트에는 새AbstractListDetailFragment
를 통해 사전 빌드된 두 창 레이아웃 구현이 포함되어 있습니다. 이 프래그먼트는 구현 예에 나와 있는 것처럼,SlidingPaneLayout
을 사용하여 목록 창(서브클래스에서 제공됨)과NavHostFragment
를 구현으로 사용하는 세부정보 창을 관리합니다. NavController
의currentBackStackEntryAsFlow()
메서드는 현재NavBackStackEntry
가 변경될 때마다 내보내는Flow
를 제공합니다. 이 흐름은OnDestinationChangedListener
를 수동으로 관리하기 위한 대안으로 사용할 수 있습니다.- NavController는 이제 실험용
visibleEntries
속성을 통해 표시되는 모든NavBackStackEntry
인스턴스 목록을StateFlow
로 가져오는 기능을 제공합니다. - 이제
NavType
클래스를 확장하여 맞춤 NavTypes를 만들 수 있습니다. 맞춤 유형은 탐색 그래프 Kotlin DSL을 통하는 등 프로그래매틱 방식으로 탐색 그래프를 빌드할 때만 지원됩니다. Navigation에서 이제 맞춤 NavigationUI를 구현하는 데 사용할 수 있는
findStartDestination()
및getHierarchy()
API를 제공합니다.findStartDestination()
은startDestination
자체가 중첩된NavGraph
인 경우에도 그래프로 이동할 때 표시되는 실제 시작 대상을 찾는NavGraph
의 확장 함수입니다.getHierarchy()
는 지정된 대상이 다른 그래프의 계층 내에 있는지 확인하는 데 사용할 수 있는NavDestination
의 함수입니다.val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
BottomNavigationView
를 사용하는NavigationUI
메서드가 대신 Material1.4.0
,NavigationBarView
에 도입된 슈퍼클래스를 사용하도록 업데이트되었습니다. 이렇게 하면 이러한 메서드를NavigationRailView
와 함께 사용할 수 있습니다.XML을 통해
<action>
요소를 확장할 때 애니메이션 속성은app:enterAnim="?attr/transitionEnter"
구문을 사용하여 테마에서 가져온 속성을 사용할 수 있습니다.이제 Safe Args는 각
NavArgs
클래스의fromSavedStateHandle()
메서드를 생성합니다. (#122, b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
탐색 경로 및 Kotlin DSL
Navigation의 이전 버전은 동위 대상에서 대상을 고유하게 식별할 수 있는 정수형의 상수 ID를 사용하는 각 대상에 의존했습니다. 이 ID를 사용하면 작업을 통해 또는 직접 대상으로 navigate()
할 수 있었습니다. 이는 여전히 유효하고 유용하지만, 특별히 XML로 탐색 그래프를 정의하고 자동 생성된 R.id
상수 또는 Safe Args(빌드 시간에 이러한 상수를 사용하여 코드를 생성함)를 사용할 수 있는 경우, 고유한 정수를 사용하는 시스템에서 Navigation Kotlin DSL을 통해 런타임 시 프로그래매틱 방식으로 빌드된 전체 동적 그래프를 지원하는 데 필요한 구문의 의미와 표현성을 포착하지 못했습니다.
이 버전에서는 경로를 사용하여 탐색 그래프의 대상을 고유하게 식별하는 새 옵션을 도입했습니다. 경로는 대상의 고유 경로를 정의하는 String
입니다. 이제 대상 ID를 사용하던 모든 Kotlin DSL 메서드가 지원 중단되고 경로를 사용하는 동등한 API로 대체됩니다.
각 경로는 대상을 정의하는 Uri
의 '경로' 부분으로 취급되어야 합니다. 예를 들면, home
, profile/{userId}
, profile/{userId}/friends
등입니다. 대상의 ID가 특정 콘텐츠와 연결된 경우 이러한 동적 인수는 암시적 딥 링크와 동일한 규칙에 따라 경로의 일부여야 합니다.
이전에는 ID만 사용하던 모든 NavController
API에는 이제 경로 String
을 취하는 오버로드가 있습니다. 여기에는 navigate()
, popBackStack()
, popUpTo()
및 getBackStackEntry()
가 포함됩니다.
이로 인해 API에 몇 가지 영향이 있었습니다.
- Kotlin DSL에서
popUpTo
Kotlin 속성이 지원 중단되고popUpToId
로 대체되었습니다. getStartDestination()
API가 지원 중단되고getStartDestinationId()
로 대체되었습니다.
ID로 탐색할 때와 달리 경로를 통한 탐색은 중첩된 그래프에서 모든 대상으로 직접 이동할 수 있다는 점에서 암시적 딥 링크와 동일한 규칙을 따르므로 이러한 경로는 각 대상에 외부적으로 표시할 수 있는 딥 링크를 명시적으로 추가하지 않아도 다중 모듈 프로젝트에 사용할 수 있습니다.
Navigation Compose
navigation-compose
아티팩트는 Navigation 구성요소와 Jetpack Compose 간 통합을 제공합니다. @Composable
함수를 애플리케이션의 대상으로 사용합니다.
이번 버전에서는 다음을 제공합니다.
NavHost
컴포저블을 사용하면 Kotlin DSL을 통해composable
과dialog
대상을 사용하는 탐색 그래프를 구성할 수 있습니다. 또한, Accompanist Navigation Material의 Navigator와 같은 선택적 Navigator를 지원할 수 있습니다.- 대상 간 크로스 페이딩을 의무적으로 지원합니다. 실험용 Compose API를 통해 들어가기와 나가기 전환을 제어하는 데 Accompanist Navigation Animation을 사용할 수 있습니다.
- 구성 가능한 각 대상으로
Lifecycle
의 범위를 지정. 각 대상은 들어가기 전환이 종료될 때만RESUMED
상태에 도달하고 나가기 전환이 시작되면 즉시STARTED
가 됩니다. 따라서,Lifecycle
이RESUMED
일 때navigate
호출을 트리거하는 방식으로만 모든IllegalStateException
과 멀티 터치 문제를 피할 수 있습니다. - 대상 수준에서 Lifecycle ViewModel Compose
2.4.0
의viewModel()
API 또는 Hilt Navigation Compose1.0.0
의hiltViewModel()
을 통해ViewModel
의 범위를 지정. 이 ViewModel은 구성 변경사항을 유지하는 범위를 제공하고 백 스택(컴포저블 콘텐츠가 달리 배치된 경우)과 영구 폐기를 나타내는 ViewModelonCleared()
의 신호에 있으며NavBackStackEntry
와 연결된 상태를 정리합니다. - 대상 수준에서
rememberSaveable
상태 범위를 지정. 대상으로 돌아갈 때 모든 컴포저블 상태가 자동으로 저장되고 복원됩니다. - 프로세스가 중단되어 재생성된 후
NavController
의 상태와 대상의 상태를 저장하고 복원할 수 있도록 완벽하게 지원합니다. - 시스템 뒤로 버튼을 사용하여 자동으로 통합
인수 전달, 대상에 딥 링크 연결, 이전 대상에 결과 반환 지원
rememberNavController()
및currentBackStackEntryAsState()
에 특정 도우미를 작성하여 호이스팅 상태를 허용하고NavController
를NavHost
(예: 하단 탐색 메뉴) 외부의 컴포저블에 연결
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
자세한 내용은 Compose Navigation 가이드를 참고하세요.
여러 백 스택
NavController는 대상의 백 스택을 관리하고, 개발자가 백 스택으로 navigate()
하면 백 스택에 대상을 추가하고, 개발자가 popBackStack()
을 호출하거나 시스템 뒤로 버튼을 트리거하면 백 스택을 삭제하는 일을 담당합니다. 기존 NavOptions
클래스 및 탐색 그래프 XML에서 <action>
요소로의 통합이 확장되어 백 스택 저장 및 복원을 지원합니다.
이러한 변경의 일환으로 이제 onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
및 NavigationView.setupWithNavController()
의 NavigationUI
메서드는 표시된 대상의 상태를 자동으로 저장하고 복원하기 때문에 코드를 변경하지 않아도 여러 백 스택을 지원할 수 있습니다. 이는 Navigation with Fragments를 사용할 때 여러 백 스택과 통합하는 데 권장되는 방법입니다.
상태를 저장하고 복원하기 위한 기본 API는 여러 표면을 통해 노출됩니다.
Navigation XML에서
<action>
요소는 이제app:popUpToSaveState
및app:restoreState
의 부울 속성을 사용하여app:popUpTo
를 통해 표시된 모든 대상의 상태를 저장하고app:destination
으로 전달된 대상에 연결된 상태를 복원할 수 있습니다.<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
navOptions
Kotlin DSL에서popUpTo
빌더에restoreState
부울 속성과saveState
부울 속성을 추가할 수 있습니다.// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
NavOptions.Builder
를 통해NavOptions
객체를 수동으로 빌드할 때setRestoreState()
를 사용하고 추가saveState
매개변수를 취하는setPopUpTo()
에 새 오버로드를 사용할 수 있습니다.NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
이제
popBackStack()
에 대한 프로그래매틱 방식의 호출에는 추가로saveState
매개변수를 포함할 수 있습니다.clearBackStack()
메서드를 사용하여popBackStack()
또는popUpToSaveState
로 저장된 상태를 삭제할 수 있습니다.
어떤 경우든 NavController
는 탐색 대상 범위의 ViewModel
인스턴스를 포함하여 각 NavBackStackEntry
의 상태를 저장하고 복원합니다. 각 Navigator
가 자체 상태를 저장하고 복원할 수 있도록 Navigator
API가 업데이트되었습니다.
동작 변경사항
- 이제
NavDeepLinkBuilder
는createPendingIntent()
에서 반환된PendingIntent
에PendingIntent.FLAG_IMMUTABLE
을 추가하는 방식으로, Android 12를 타겟팅할 때 이 API가 제대로 작동하도록 합니다. - 이제 Navigation은 Lifecycle
2.3.1
에 종속되며NavBackStackEntry
Lifecycle
을 업데이트하는 메서드인setGraph()
,popBackStack()
,navigateUp()
및navigate()
를@MainThread
로 표시합니다. 이로 인해 Lifecycle2.3.0
에 도입된 기본 스레드 시행에 맞춰 Navigation이 정렬됩니다. - 이제 딥 링크가 모든 필수 인수(기본값이 없는 인수)가
Uri
에 있는지 확인합니다. - 이제
NavDeepLink
로 파싱된 인수가 물음표와 같은 방식으로 파운드 기호를 경로 세그먼트 간 구분자로 간주하여 인수가 파운드 기호를 포함하지 않도록 합니다. - 작업을 생성할 때 이제 Safe Args에서 생성된 Kotlin 코드가 기본값이 없는 인수를 기본값이 매개변수로 있는 인수 앞에 배치합니다.
- 인수를 생성할 때 Safe Args가 이제 기본값이 없는 매개변수를 기본값이 있는 매개변수 앞에 배치합니다.
- 이제 Safe-Args가 Android Gradle 플러그인 4.2.0에 종속됩니다. 즉, 더 이상
applicationIdTextResource
사용 경고가 표시되지 않습니다.
알려진 문제
- Navigation
2.5.0-alpha01
에서 수정됨: 프래그먼트의onCreate()
에서by navGraphViewModels()
를 통해 생성된ViewModel
에 액세스할 때IllegalStateException
이 발생하며 실패합니다. (b/213504272) - Navigation
2.5.0-alpha01
에서 수정됨: Safe Args 2.4.0은 Android Gradle 플러그인 7.1.0 이상과 호환되지 않습니다. (b/213086135) - 여러 개의 중첩된 탐색 그래프가 포함된 딥 링크를 사용해도 전체 백 스택이 제대로 생성되지 않습니다. (b/214383060)
버전 2.4.0-rc01
2021년 12월 15일
androidx.navigation:navigation-*:2.4.0-rc01
이 출시되었습니다. 버전 2.4.0-rc01에 포함된 커밋을 확인하세요.
동작 변경사항
- 이제
NavDeepLink
파싱된 인수가 인수 사이의 구분 기호로 물음표와 파운드 기호를 동일하게 간주합니다. (I21309, b/180042703)
버그 수정
- 딥 링크는 자리표시자 이름과 동일한 값을 가진 인수를 더 이상 무시하지 않습니다. (If8017, b/207389470)
NavController
가 복원된 후 전환을 사용하여 중첩된 대상을 표시할 때NavController
가 더 이상 비정상 종료되지 않습니다. (I0f7c9, b/205021623)- 유효하지 않은
startDestination
을 사용할 때 오류 메시지가 있는 경우 시작 대상 경로 기본값으로 설정됩니다. (I86b9d, b/208041894)
Navigation Compose 버그 수정
- 하단 탐색 메뉴 항목을 사용하여 시작 대상과 다른 대상 간의 빠른 전환으로 인해 발생할 수 있는 비정상 종료 문제를 해결했습니다. (Ic8976, b/208887901)
- 이제 구성 변경 또는 프로세스 중단 후 대화상자 대상이 화면 상단에 올바르게 복원됩니다. (I4c0dc, b/207386169)
- 대화상자를 닫을 때 대화상자의
NavBackStackEntry
에서ViewModel
을 검색하려는 시도가 실패하는 문제를 해결했습니다. (I6b96d, b/206465487) - Navigation Compose의
NavHost
와 함께activity
대상을 사용할 때 무한 재구성이 발생하는 문제를 해결했습니다. (I8f64c) - 구성 변경 또는 프로세스 종료 후 이전 활동의 참조를 보류하던 Navigation Compose의 누수 문제를 해결했습니다. (I4efcb, b/204905432)
Safe Args 버그 수정
- 프로세스 종료 후 맞춤 Parcelable 배열을 복원하려고 할 때
SafeArgs
가 더 이상 비정상 종료되지 않습니다. (I618e8, b/207315994) - 불리언 배열에서
null
값을 갖도록 허용하지 않는 Safe Args의 버그가 수정되었습니다. (I8c396, b/174787525)
버전 2.4.0-beta02
2021년 11월 3일
androidx.navigation:navigation-*:2.4.0-beta02
가 출시되었습니다. 버전 2.4.0-beta02에 포함된 커밋을 확인하세요.
API 변경사항
- 이제 명시적 딥 링크와 암시적 딥 링크를 모두 처리하면 다른 그래프로 이동할 때 자동으로
saveState
플래그가 추가되어NavigationUI.setupWithNavController
같은 코드와 여러 백 스택을 사용하는 코드가 예상대로 작동되도록 합니다. (Ic8807)
동작 변경사항
- 이제 딥 링크 패턴이 확장 중에 컴파일되지 않고 NavDeepLink에서 느리게 컴파일됩니다. 이렇게 하면 딥 링크가 포함된 탐색 그래프의 확장 시간이 개선됩니다. (b8d257, b/184149935)
버그 수정
NavHost
가 활동의setContent()
에 직접 추가될 때 NavBackStackEntries가Lifecycle.State.STARTED
로 이동한 후Lifecycle.State.CREATED
로 푸시다운되던 문제를 수정했습니다. (Ia5ac1, b/203536683)- 대화상자가 실제로 표시되기 전에 백 스택에서
DialogFragment
대상을 삭제하면 실제로는 대화상자가 닫히지 않아 사용자가 오류가 있는 대화상자를 수동으로 닫을 때 비정상 종료가 발생하는 경합 상태 문제를 수정했습니다. (I687e5) - 실제로 탐색 그래프로
navigate()
하지 않았더라도NavigationUI
의onNavDestinationSelected
API가true
를 반환하는 문제를 수정했습니다. 이제setupWithNavController
에서 내부적으로 사용하는 것과 동일한 로직을 사용하여 대상의hierarchy
를 통해 현재 대상과 연결된MenuItem
만 선택합니다. (I2b053)
버전 2.4.0-beta01
2021년 10월 27일
androidx.navigation:navigation-*:2.4.0-beta01
이 출시되었습니다. 버전 2.4.0-beta01에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 Fragment와 함께 Navigation Kotlin DSL을 사용하는 것을 더 잘 지원하도록 ID를 사용하는 대신 경로와 함께
by navGraphViewModel
을 사용할 수 있습니다. (I901e3, b/201446416)
API 변경사항
visibleEntries
API가 이제 실험용입니다. (I93f6f)
버그 수정
- 같은 화면 간에 이리저리 이동하여 전환이 중단될 때 ViewModel이 더 이상 소멸되지 않습니다. (Id52d8, b/200817333)
NavDestination
에 딥 링크를 추가할 때 null을 허용하는NavDeepLink
인수에 더 이상 기본값이 필요하지 않습니다. (I5aad4, b/201320030)- 이제 여러 수명 주기가 있는 NavBackStackEntries가 더 이상 동일한 것으로 간주되지 않습니다. 즉, NavHost는 singleTop으로 탐색을 실행하고 하단 메뉴 항목을 다시 선택할 때 모든 대상을 올바르게 재구성합니다. (I1b351, b/196997433)
onCreateListPaneView()
에서 반환된 목록 창의layout_width
및layout_weight
속성이 잘못 처리되거나 무시되는AbstractListDetailFragment
문제를 수정했습니다. (f5fbf3)- 이제 대화상자 대상의 시각적 상태가
DialogFragmentNavigator
의 상태와 동기화된 상태로 올바르게 유지됩니다. 즉,DialogFragment
용 비동기dismiss()
API를 수동으로 호출하면 이제 닫힌 대화상자 위의 모든 대화상자 대상이 올바르게 삭제됩니다. 이는popUpTo
나popBackStack()
을 사용하여 대화상자를 닫는 경우에는 영향을 미치지 않습니다. (I77ba2) - 이제
AbstractAppBarOnDestinationChangedListener
에onDestinationChanged()
의 더 명확한 오류 메시지가 있습니다. (Ie742d)
버전 2.4.0-alpha10
2021년 9월 29일
androidx.navigation:navigation-*:2.4.0-alpha10
이 출시되었습니다. 버전 2.4.0-alpha10에 포함된 커밋을 확인하세요.
새로운 기능
- NavController는 이제
visibleEntries
StateFlow를 통해 표시되는 모든NavBackStackEntry
인스턴스 목록을 검색하는 기능을 제공합니다. (Ia964e) - 이제
rememberNavController()
는 반환된NavController
에 추가될 선택적Navigator
인스턴스 집합을 사용하여 선택적 Navigator(예: Accompanist Navigation Material의 Navigator)를 더 효율적으로 지원합니다. (I4619e)
버그 수정
- 활동이 다시 만들어질 때 동적 탐색이 더 이상 비정상 종료되지 않습니다. (Ifa6a3, b/197942869)
NavHost
가 포함된 구성 가능한 대상으로 다시 돌아온 후에만 발생하는 시스템 뒤로 버튼 관련 문제가 수정되었습니다. (3ed148, b/195668143)- SafeArgs는 이제 적절한 매개변수 순서로
fromBundle()
및fromSavedStateHandle()
의 인수를 생성합니다. (I824a8, b/200059831)
버전 2.4.0-alpha09
2021년 9월 15일
androidx.navigation:navigation-*:2.4.0-alpha09
가 출시되었습니다. 버전 2.4.0-alpha09에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
clearBackStack()
메서드를 사용하여popBackStack()
또는popUpToSaveState
로 저장된 상태를 삭제할 수 있습니다. (I80a0f) - 이제 중첩된 탐색 그래프의 빌더에 인수 또는 딥 링크의 목록을 전달하면 결과 그래프에 자동으로 추가됩니다. (I8a470, b/182545357)
API 변경사항
navArgument
Kotlin DSL 함수가 이제navigation-compose
가 아닌navigation-common
의 일부입니다. 이 함수를 계속 사용하려면 가져오기를 업데이트해야 합니다. (I1d095)
동작 변경사항
- 인수를 생성할 때 Safe Args가 이제 기본값이 없는 매개변수를 기본값이 있는 매개변수 앞에 배치합니다. (I89709, b/198493585)
버그 수정
- Navigation Compose를 사용할 때 NavGraph는 모든 하위 요소가
DESTROYED
상태가 된 경우에만DESTROYED
상태가 됩니다. (I86552, b/198741720) - 이제 null을 허용하는
NavDeepLink
인수에 기본값이 필요하지 않습니다. (Ia14ef, b/198689811) - 새 그래프로
setGraph()
를 호출하면 이제 백 스택을 표시하는 이전 동작 외에 저장된 백 스택도 삭제됩니다. (I97f96) launchSingleTop
을 사용할 때OnDestinationChangedListener
인스턴스와currentBackStackEntryFlow
에 알림이 전송되지 않는 문제를 수정했습니다. (Iaaebc)
종속 항목 업데이트
- Navigation Compose가 이제 Activity Compose 1.3.1에 종속됩니다. (I05829)
- Navigation Compose가 이제 Lifecycle ViewModel Compose
2.4.0-beta01
에 종속됩니다. (Ib86a3)
버전 2.4.0-alpha08
2021년 9월 1일
androidx.navigation:navigation-*:2.4.0-alpha08
이 출시되었습니다. 버전 2.4.0-alpha08에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavType
클래스를 확장하여 맞춤 NavTypes를 만들 수 있습니다. 맞춤 유형은 탐색 그래프 Kotlin DSL을 통하는 등 프로그래매틱 방식으로 탐색 그래프를 빌드할 때만 지원됩니다. (I78440, b/196871885)
동작 변경사항
- 작업을 생성할 때 이제 Safe Args에서 생성된 Kotlin 코드가 기본값이 없는 인수를 기본값이 매개변수로 있는 인수 앞에 배치합니다. (Idb697, b/188855904)
- 이제 딥 링크가 모든 필수 인수(기본값이 없는 인수)가
Uri
에 있는지 확인합니다. (#204, b/185527157)
버그 수정
- composable() 내에서
getBackStackEntry
와previousBackStackEntry
를remember()
와 함께 사용하면 백 스택에 대상이 없다는 예외가 더 이상 발생하지 않습니다. (I75138, b/194313238) - 이제 Navigation Compose가 백 스택 인수를 변경하고
launchSingleTop=true
를 사용할 때 올바르게 재구성됩니다. (Iebd69, b/186392337) - 대상이 13개 또는 29개인 그래프로
setGraph
를 호출할 때 더 이상ArrayIndexOutOfBoundsException
이 발생하지 않습니다. (I1a9f1, b/195171984) - SafeArgs 자바 생성기가 Args 클래스를 생성할 때 더 이상 린트 경고가 발생하지 않습니다. (I1a666, b/185843837)
외부 기여
- 딥 링크가 모든 필수 인수(기본값이 없는 인수)가
Uri
에 있는지 확인하도록 보장하는 것은 ospixd 덕분입니다. (#204, b/185527157)
버전 2.4.0-alpha07
2021년 8월 18일
androidx.navigation:navigation-*:2.4.0-alpha07
이 출시되었습니다. 버전 2.4.0-alpha07에 포함된 커밋을 확인하세요.
버그 수정
- 이제 Navigation Compose가 구성 변경 후 그리고 여러 백 스택 기능을 사용하는 동안 그래프를 변경할 때 상태를 올바르게 저장합니다. (If5a3d, b/195141957)
- 여러 백 스택이 있는 Navigation Compose를 사용할 때 같은 탭을 다시 선택하면 더 이상 빈 화면이 표시되지 않습니다. (I860dc, b/194925622)
- 이제
NavHost
가NavBackStackEntry
의Lifecycle.State
에서 변경사항을 관찰합니다. 즉, 이제 프래그먼트에서NavHost
를 사용하면 빈 화면이 표시되는 대신 수명 주기 변경에 따라 올바르게 재구성됩니다. (I4eb85, b/195864489) DialogFragment
를 닫으면 활동을 다시 생성한 후(즉, 구성 변경 후)NavController
상태가 올바르게 업데이트되지 않는 문제를 수정했습니다. (Icd72b)- 대화상자 대상을 표시할 때 NavController의 시스템 뒤로 버튼 처리를 업데이트하지 않아 표시할 백 스택이 없어도 NavController에서 뒤로 버튼을 가로챌 수 있는 문제를 수정했습니다. (If3b34)
- 이제 Safe Args가
ViewModel
코드를 테스트하는 데 사용할 수 있는 인수의toSavedStateHandle
메서드를 자동으로 생성합니다. (If1e2d, b/193353880)
버전 2.4.0-alpha06
2021년 8월 4일
androidx.navigation:navigation-*:2.4.0-alpha06
이 출시되었습니다. 버전 2.4.0-alpha06에 포함된 커밋을 확인하세요.
API 변경사항
AbstractListDetailFragment
의requireSlidingPaneLayout()
과requireDetailPaneNavHostFragment()
메서드 이름이 각각getSlidingPaneLayout()
과getDetailPaneNavHostFragment()
로 바뀌었습니다. (I34a08)
동작 변경사항
- 애니메이션을 사용하여 탐색할 때(예:
Crossfade
) 이제 새 대상의Lifecycle
은 애니메이션이 완료될 때만RESUMED
에 도달합니다. (If0543, b/172112072, b/194301889) - Navigation Compose의
NavHost
는 이제 그래프를 첫 번째 구성의 일부로 설정합니다. (Ieb7be)
버그 수정
- 탐색 그래프의 마지막 대상을 표시할 때 더 이상
ClassCastException
이 발생하지 않습니다. (If0543, b/172112072, b/194301889) Uri
없이 딥 링크를 추가하고 경로 또는 딥 링크를 통해 탐색할 때 발생하던NullPointerException
을 수정했습니다. (938a0c, b/193805425)- Navigation Compose에서 딥 링크
NavBackStackEntry
가RESUMED
상태에 도달하지 않던 문제를 해결했습니다. (I192c5) - 대화상자 대상을 표시할 때 NavController의 시스템 뒤로 버튼 처리를 업데이트하지 않아 표시할 백 스택이 없어도 NavController에서 뒤로 버튼을 가로챌 수 있는 문제가 해결되었습니다. (aosp/1782668)
버전 2.4.0-alpha05
2021년 7월 21일
androidx.navigation:navigation-*:2.4.0-alpha05
가 출시되었습니다. 버전 2.4.0-alpha05에 포함된 커밋을 확인하세요.
동작 변경사항
- 이제 Navigation Compose의
NavHost
는 대상을 탐색할 때 항상 크로스페이드를 사용합니다. (I07049, b/172112072) - 이제 NavHost 그래프를 변경할 수 있습니다. 그래프의 startDestination과 대상이 서로 동일한 그래프는 동일한 것으로 간주되며
NavController
백 스택을 삭제하지 않습니다. (I0b8db, b/175392262)
버그 수정
- NavController 상태에 관한 재진입 업데이트로 발생하는
NavBackStackEntry
에 연결된LifecycleObserver
내에서popBackStack()
을 호출할 때 발생하는NoSuchElementException
문제를 해결했습니다. (I64621) - 이제
AbstractListDetailFragment
가 사용되지 않는 경우AbstractListDetailFragment
를 통해 APK에서SlidingPaneLayout
을 완전히 삭제할 수 있습니다. (I611ad) NavGraph
및NavDestination
이 이제 equals 메서드를 재정의하므로, 동일한 값을 갖는 두 객체는 동일한 것으로 간주됩니다. (I166eb, b/175392262)
버전 2.4.0-alpha04
2021년 7월 1일
androidx.navigation:navigation-*:2.4.0-alpha04
가 출시되었습니다. 버전 2.4.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
navigation-fragment
아티팩트에는 새AbstractListDetailFragment
를 통해 사전 빌드된 두 창 레이아웃 구현이 포함되어 있습니다. 이 프래그먼트는 구현 예에 나와 있는 것처럼,SlidingPaneLayout
을 사용하여 목록 창(서브클래스에서 제공됨)과NavHostFragment
를 구현으로 사용하는 세부정보 창을 관리합니다. (Iac4be, b/191276636) navigation-compose
아티팩트의NavHost
는 이제composable
대상 외에dialog
대상도 지원합니다. 이러한 대화상자 대상은 현재composable
대상 위에 플로팅되는 컴포저블Dialog
내에 각각 표시됩니다. (I011d0)
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
API 변경사항
NavigatorState
의add
함수 이름이push
로 변경되었습니다. 현재 모든add()
호출을 push()로 변경해야 합니다. (Ie89fc, b/172112072)- 이제 사용자설정
Navigator
인스턴스는NavigatorState
에pushWithTransaction
및popWithTransition
API를 사용하여 대상을 비동기식으로 푸시하거나 표시할 수 있습니다. 참고로, 이 두 API는 포함된 Navigator에 아직 사용되지 않습니다. (Ic4d7c, b/172112072)
동작 변경사항
- 이제
NavDeepLinkBuilder
는createPendingIntent()
에서 반환된PendingIntent
에PendingIntent.FLAG_IMMUTABLE
을 추가하는 방식으로, Android 12를 타겟팅할 때 이 API가 제대로 작동하도록 합니다. (If8c52)
버그 수정
- 그래프에 전달된 인수가 동적으로 포함된 그래프에 올바르게 전달되지 않는
<include-dynamic>
의 문제가 해결되었습니다. (I3e115) @null
이 기본값인string[]
인수를 사용하여 대상으로 이동할 때 발생하는NullPointerException
이 수정되었습니다. (I1fbe8)@Navigator.Name
에 관한 ProGuard 규칙을 추가하여 R8 3.1 전체 모드를 사용할 때 발생하는 문제를 해결했습니다. (I2add9, b/191654433)Kotlin
의1.5.0
이전 버전으로 앱을 빌드할 때 SafeArgs에 더 이상 오류가 발생하지 않습니다. (Icd1ff, b/190739257)
버전 2.4.0-alpha03
2021년 6월 16일
androidx.navigation:navigation-*:2.4.0-alpha03
이 출시되었습니다. 버전 2.4.0-alpha03에 포함된 커밋을 확인하세요.
버그 수정
- 포함된 동적 그래프로 이동하려면
navigate()
호출이 두 번 필요했던 문제가 해결되었습니다. (I7785c, b/188859835) - Navigation
2.4.0-alpha01
에 도입된 회귀 문제가 해결되었습니다. 이 문제로 인해 최상위 수준 대상에 있을 때setupActionBarWithNavController()
에서 위로 아이콘을 올바르게 삭제하지 않았습니다. (I5d443, b/189868637) - 사전에 NavController의 루트 그래프를 표시한 후
popBackStack()
을 호출할 때 발생하는IllegalStateException
문제가 해결되었습니다. (I2a330, b/190265699) navigation-common
을 사용하거나 이 항목에 종속된 아티팩트를 사용할 때 이제by navArgs()
에 관한 ProGuard 규칙이 올바르게 적용됩니다. (I68800, b/190082521)- 콜백을 처음 수신할 때
navigate()
를 호출하는OnDestinationChangedListener
가 이제 이동 대상이 포함된 두 번째 콜백을 올바르게 수신합니다. (Ie5f9e, b/190228815) - Safe Args가 동적 기능 모듈 및 AGP 7.0+와 함께 사용될 때 더 이상 비정상적으로 종료되지 않습니다. (I69518, b/189966576)
알려진 문제
- Gradle
6.7.0
을 사용하면 이전 Kotlin 버전의 종속 항목으로 인해 Safe Args가Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’
오류와 함께 실패합니다. 이 문제는 Gradle 7.0을 사용하도록 업데이트하여 해결할 수 있습니다. (b/190739257)
버전 2.4.0-alpha02
2021년 6월 2일
androidx.navigation:navigation-*:2.4.0-alpha02
가 출시되었습니다. 버전 2.4.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 Activity, Fragment 및 Dialog 대상뿐 아니라 DynamicNavigation Kotlin DSL 전반에서 경로가 지원됩니다. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
NavigationUI
에 상태 저장을 선택 해제할 수 있는 실험용 API를 일시적으로 추가했습니다. 항상 상태를 저장하는 것이 정확한 동작이지만, 상태를 저장할 때 지원할 수 없는 지원 중단된 라이브러리(예: 보관된 프래그먼트)가 여전히 사용되는 경우가 있으므로 이 API를 통해 앱이 지원되지 않는 API에서 충분한 시간을 두고 변환할 수 있습니다. (Idf93c)Navigation에서 이제 맞춤 NavigationUI를 구현하는 데 사용할 수 있는
findDestination()
및getHierarchy()
API를 제공합니다.findDestination()
은 그래프 내에서 대상을 찾을 수 있는NavGraph
의 확장 함수입니다.getHierarchy()
는 주어진 대상이 다른 계층의 계층 구조 내에 있는지 확인하는 데 사용할 수 있는NavDestination
의 함수입니다. (I2932f, b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
BottomNavigationView
를 사용하는 NavigationUI 메서드가 대신 Material1.4.0
,NavigationBarView
에 도입된 슈퍼클래스를 사용하도록 업데이트되었습니다. 이렇게 하면 이러한 메서드를NavigationRailView
와 함께 사용할 수 있습니다. (Ib0b36, b/182938895)XML을 통해
<action>
요소를 확장할 때 애니메이션 속성은app:enterAnim="?attr/transitionEnter"
구문을 사용하여 테마에서 가져온 속성을 사용할 수 있습니다. (I07bc1, b/178291654)
API 변경사항
- ID를 사용하는 Kotlin DSL 빌더는 지원 중단되었으며 경로를 사용하는 빌더로 대체되어야 합니다. (I85b42, b/188816479) (I9f58f, b/188816479)
버그 수정
- 이제
DialogFragmentNavigator
는 시스템 뒤로 버튼을 누르거나 버튼 바깥을 클릭하여 대화상자를 닫을 때NavigatorState.pop()
API를 사용하여NavController
에 알립니다. 이를 통해NavController
상태가 항상 Navigator 상태와 동기화됩니다. (I2ead9) onDestinationChanged
콜백으로OnDestinationChangedListeners
목록을 조작할 때 Navigation에서 더 이상ConcurrentModificationException
을 제공하지 않습니다. (Ib1707, b/188860458)Kotlin에서 방향 속성을 생성하려고 할 때 Safe Args가 더 이상 다운되지 않습니다. (Id2416, b/188564435)
NavDestination의 setId 메서드가 이제
@IdRes
로 적절하게 주석 처리되어 리소스 ID만 허용합니다. (I69b80)이제
findNode
의 int 매개변수는resid
가 아닌resId
입니다. (I7711d)
종속 항목 업데이트
- 이제 Safe-Args가 Android Gradle 플러그인 4.2.0에 종속됩니다. 즉, 더 이상
applicationIdTextResource
사용 경고가 표시되지 않습니다. (I6d67b, b/172824579)
버전 2.4.0-alpha01
2021년 5월 18일
androidx.navigation:navigation-*:2.4.0-alpha01
이 출시되었습니다. 버전 2.4.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
NavController
의currentBackStackEntryAsFlow()
메서드는 현재NavBackStackEntry
가 변경될 때마다 내보내는Flow
를 제공합니다. 이 흐름은OnDestinationChangedListener
를 수동으로 관리하는 대안으로 사용할 수 있습니다. (I19c4a, #89, b/163947280)
여러 백 스택
NavController는 대상의 백 스택을 관리하고, 개발자가 백 스택으로 navigate()
하면 백 스택에 대상을 추가하고, 개발자가 popBackStack()
을 호출하거나 시스템 뒤로 버튼을 트리거하면 백 스택을 삭제하는 일을 담당합니다. 기존 NavOptions
클래스 및 탐색 그래프 XML에서 <action>
항목으로의 통합이 확장되어 백 스택 저장 및 복원을 지원합니다. (b/80029773)
이러한 변경의 일환으로 이제 onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
및 NavigationView.setupWithNavController()
의 NavigationUI
메서드는 표시된 대상의 상태를 자동으로 저장하고 복원하기 때문에 코드를 변경하지 않아도 여러 백 스택을 지원할 수 있습니다. 이는 Navigation with Fragments를 사용할 때 여러 백 스택과 통합하는 데 권장되는 방법입니다. (Ie07ca)
상태를 저장하고 복원하기 위한 기본 API는 여러 표면을 통해 노출됩니다.
Navigation XML에서
<action>
요소는 이제app:popUpToSaveState
및app:restoreState
의 부울 속성을 사용하여app:popUpTo
를 통해 표시된 모든 대상의 상태를 저장하고app:destination
으로 전달된 대상에 연결된 상태를 복원할 수 있습니다.<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
navOptions
Kotlin DSL에서popUpTo
빌더에restoreState
부울 속성과saveState
부울 속성을 추가할 수 있습니다.// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
NavOptions.Builder
를 통해NavOptions
객체를 수동으로 빌드할 때setRestoreState()
를 사용하고 추가saveState
매개변수를 취하는setPopUpTo()
에 새 오버로드를 사용할 수 있습니다.NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
이제
popBackStack()
에 대한 프로그래매틱 방식의 호출에는 추가saveState
매개변수를 포함할 수 있습니다.
어떤 경우든 NavController
는 탐색 대상 범위의 ViewModel
인스턴스를 포함하여 각 NavBackStackEntry
의 상태를 저장하고 복원합니다. 각 Navigator
가 자체 상태를 저장하고 복원할 수 있도록 Navigator
API가 업데이트되었습니다.
Navigation Compose에서 composable
대상에 사용되는 ComposeNavigator
와 Navigation with Fragments에서 <fragment>
대상에 사용되는 FragmentNavigator
및 DynamicFragmentNavigator
가 새 Navigator API를 사용하고 상태 저장 및 복원을 지원하도록 모두 업데이트되었습니다.
탐색 경로
경로는 대상을 고유하게 식별하는 String
입니다. 이전에는 Navigation Compose에서만 사용되었지만 이제 이 개념은 점차 핵심 Navigation API의 일부가 되었습니다. 이는 Navigation Kotlin DSL을 통해 그래프를 구성할 때 정수 ID를 사용하는 것을 대체할 대안을 제공합니다. (b/172823546)
이전에는 ID만 사용하던 모든 API에는 이제 경로 String
을 취하는 오버로드가 있습니다.
navigate()
, popBackStack()
, popUpTo()
및 getBackStackEntry()
가 이에 해당됩니다.
이로 인해 API에 몇 가지 영향이 있었습니다.
- Kotlin DSL에서
popUpTo
kotlin 속성이 지원 중단되고popUpToId
로 대체되었습니다. (I59c73, b/172823546) getStartDestination()
API가 지원 중단되고getStartDestinationId()
로 대체되었습니다. (I0887f, b/172823546)
이로 인해 이전 버전의 Navigation Compose에서 Navigation Compose 2.4.0-alpha01
로 업그레이드하는 개발자는 확장 메서드에서의 다음 가져오기가 더 이상 필요하지 않으므로 삭제해야 합니다.
import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo
KEY_ROUTE
인수는 NavDestination
에서 route
속성으로 대체되어 navBackStackEntry.destination.route
를 직접 호출할 수 있습니다.
API 변경사항
- 모든 Navigation 아티팩트가 Kotlin으로 다시 작성되었습니다. 이로 인해 제네릭을 사용하는 클래스(예:
NavType
서브클래스)의 null 허용 여부가 개선되었습니다.-ktx
아티팩트의 일부로 사용된 모든 Kotlin 확장 함수가 각각의 주요 아티팩트로 이동되었습니다.-ktx
아티팩트는 계속 게시되지만 현재 완전히 비어 있습니다. (b/184292145) NavDeepLinkBuilder
는 이제 생성된 백 스택에 여러 고유 대상을 추가하는 것을 지원합니다. (I3ee0d, b/147913689)DynamicNavHostFragment
의 팩토리 함수 추가 (Icd515, b/175222619)- 이제
NavBackStackEntry
의 고유 ID가 공개 API의 일부로 노출됩니다. (Ie033a) - 이제
name
및argument
필드와NamedNavArgument
의 디스트럭처링 함수가 공개 상태가 되었습니다. (#174, b/181320559) - 관련 컴포지션 로컬에
NavBackStackEntry
를 제공하는 새로운NavBackStackEntry#provideToCompositionLocals
확장 프로그램이 도입되었습니다. (#175, b/187229439)
Safe Args
이제 Safe Args는 각
NavArgs
클래스의fromSavedStateHandle()
메서드를 생성합니다. (#122, b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
KotlinPoet
1.8.0
에 종속되도록 Safe Args를 업데이트했습니다. (#172, b/183990444)
동작 변경사항
- 이제 Navigation은 Lifecycle
2.3.1
에 종속되며NavBackStackEntry
Lifecycle
을 업데이트하는 메서드인setGraph()
,popBackStack()
,navigateUp()
및navigate()
를@MainThread
로 표시합니다. 이로 인해 Lifecycle2.3.0
에 도입된 기본 스레드 시행에 맞춰 Navigation이 정렬됩니다. (b/171125856) - 이제 딥 링크에서 Enum 인수를 파싱할 때 대소문자를 구분하지 않습니다. 따라서 enum에
RED
값이 있더라도http://www.example.com/red
같은 딥 링크가www.example.com/{color}
딥 링크와 일치하게 됩니다. (#152, b/135857840)
Compose 호환성
androidx.navigation:navigation-compose:2.4.0-alpha01
은 Compose 버전1.0.0-beta07
이상과만 호환됩니다.
버그 수정
- 후행 인수 자리표시자가 정확히 일치하는 접미사가 있는 딥 링크보다 우선하는 문제를 해결했습니다. (#153, b/184072811)
- 이제
NavHostFragment
는 기본DialogFragmentNavigator
와 동일한@Navigator.Name("dialog")
을 사용하는 맞춤 Navigator를 지원합니다. (Ib1c2c, b/175979140) - 동일한 인스턴스로 반복적으로 호출해도 문제가 발생하지 않도록
NavigatorProvider#addNavigator
의 동작을 개선했습니다. (#176, b/187443146)
외부 기여
- 각
NavArgs
클래스의fromSavedStateHandle()
메서드를 생성하는 Safe Args 지원을 빌드해 주신 simonschiller님께 감사드립니다. (#122, b/136967621) - 딥 링크에서 Enum 인수를 파싱할 때 대소문자를 구분하지 않도록 해 주신 Bradleycorn님께 감사드립니다. (#152, b/135857840)
- 후행 인수 자리표시자가 정확히 일치하는 접미사가 있는 딥 링크보다 우선하는 문제를 해결해 주신 osipxd님께 감사드립니다. (#153, b/184072811)
- KotlinPoet
1.8.0
에 종속되도록 Safe Args를 업데이트해 주신 tatocaster님께 감사드립니다. (#172, b/183990444) name
및argument
필드를 만들고NamedNavArgument
의 디스트럭처링 함수를 공개해 주신 jossiwolf님께 감사드립니다. (#174, b/181320559)- 관련 컴포지션 로컬에
NavBackStackEntry
를 제공하는 새로운NavBackStackEntry#provideToCompositionLocals
확장 프로그램을 도입해 주신 jossiwolf님께 감사드립니다. (#175, b/187229439) - 동일한 인스턴스로 반복적으로 호출해도 문제가 발생하지 않도록
NavigatorProvider#addNavigator
의 동작을 개선해 주신 jossiwolf님께 감사드립니다. (#176, b/187443146)
Navigation Compose 버전 1.0.0
버전 1.0.0-alpha10
2021년 4월 7일
androidx.navigation:navigation-compose:1.0.0-alpha10
이 출시되었습니다. 버전 1.0.0-alpha10에 포함된 커밋을 확인하세요.
API 변경사항
NavHost
는 이제Modifier
를 허용합니다. 이는 대상 컴포저블을 래핑하는 구성 가능한 컨테이너로 전달됩니다. (I85aca, b/175125483)
버그 수정
NavHost
는 이제OnBackPressedDispatcherOwner
를 찾을 수 없는 경우에도 작동합니다(예:NavHost
를 미리 보는 경우). (I7d8b4)- 이제 Navigation Compose가 Navigation
2.3.5
에 종속되며NavHost
대상 내에서BackHandler
를 사용할 때 발생하는 문제를 수정했습니다. (I7e63b, b/182284739)
버전 1.0.0-alpha09
2021년 3월 10일
androidx.navigation:navigation-compose:1.0.0-alpha09
가 출시되었습니다. 버전 1.0.0-alpha09에 포함된 커밋을 확인하세요.
API 변경사항
LocalViewModelStoreOwner.current
가 이제 null을 허용하는ViewModelStoreOwner
를 반환하여 현재 컴포지션에서ViewModelStoreOwner
를 사용할 수 있는지 더 효과적으로 판단합니다.ViewModelStoreOwner
가 설정되어 있지 않으면viewModel()
및NavHost
와 같이ViewModelStoreOwner
가 필요한 API에서 여전히 예외가 발생합니다. (Idf39a)
버그 수정
- 이제 Navigation Compose는 그래프를 설정한 후 동일한 ViewModelStore 객체 설정을 시도하는 수정사항이 포함된 Navigation 2.3.4에 종속됩니다. (I65c24, b/177825470)
버전 1.0.0-alpha08
2021년 2월 24일
androidx.navigation:navigation-compose:1.0.0-alpha08
이 출시되었습니다. 버전 1.0.0-alpha08에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavHost
가LocalSavedStateRegistryOwner
CompositionLocal을 대상의NavBackStackEntry
로 채우기 때문에,SavedStateRegistry
에 바로 저장되는 상태가 대상과 함께 저장되고 복원됩니다. (I435d7, b/179469431)
버전 1.0.0-alpha07
2021년 2월 10일
androidx.navigation:navigation-compose:1.0.0-alpha07
이 출시되었습니다. 버전 1.0.0-alpha07에 포함된 커밋을 확인하세요.
종속 항목 업데이트
- 이제 Navigation Compose는
composable
대상에viewModel()
지원을 제공하기 위해 Lifecycle ViewModel Compose 1.0.0-alpha01에 종속됩니다. (I7a374) NavHost
는 이제 Activity-Compose 1.3.0-alpha01의 새로운LocalOnBackPressedDispatcherOwner
를 사용하여NavController
에 설정된OnBackPressedDispatcher
를 가져옵니다. (I65b12)
버전 1.0.0-alpha06
2021년 1월 28일
androidx.navigation:navigation-compose:1.0.0-alpha06
이 출시되었습니다. 버전 1.0.0-alpha06에 포함된 커밋을 확인하세요.
API 변경사항
NavController
에 연결된NavBackStackEntry
를 반환하는getBackStackEntry(route: String)
확장 메서드를 추가했습니다. (If8931)
버전 1.0.0-alpha05
2021년 1월 13일
androidx.navigation:navigation-compose:1.0.0-alpha05
가 출시되었습니다. 버전 1.0.0-alpha05에 포함된 커밋을 확인하세요.
Compose 1.0.0-alpha10에 종속되도록 업데이트되었습니다.
버전 1.0.0-alpha04
2020년 12월 16일
androidx.navigation:navigation-compose:1.0.0-alpha04
가 출시되었습니다. 버전 1.0.0-alpha04에 포함된 커밋을 확인하세요.
- Compose
1.0.0-alpha09
와의 호환성을 위해 업데이트되었습니다.
버전 1.0.0-alpha03
2020년 12월 2일
androidx.navigation:navigation-compose:1.0.0-alpha03
이 출시되었습니다. 버전 1.0.0-alpha03에 포함된 커밋을 확인하세요.
버그 수정
- 구성이 변경되거나 프로세스가 중단되어 다시 생성된 후에
popBackStack()
과navigateUp()
이 작동하지 않는 문제가 수정되었습니다. (Icea47, b/173281473) - 이제 NavHost 내의 중첩된 그래프로 이동하는 작업이 올바르게 작동합니다. (I0948d, b/173647694)
버전 1.0.0-alpha02
2020년 11월 11일
androidx.navigation:navigation-compose:1.0.0-alpha02
가 출시되었습니다. 버전 1.0.0-alpha02에 포함된 커밋을 확인하세요.
API 변경사항
- Navigation Compose는 이제 popUpTo 및 launchSingleTop 작업을 사용하도록 NavOptions를 지원합니다. (If96c3, b/171468994)
- ID 대신 Navigation Compose DSL에서 중첩 그래프를 생성할 수 있는 경로를 사용하는 탐색 함수를 추가했습니다. (I1661d)
- 이제 startDestination이 NavHost용 매개변수 목록에서 경로 앞에 배치됩니다. (Ie620e)
- 이제 경로를 NavHost 컴포저블 외부의 시작 대상으로 사용하여 그래프를 만들 수 있습니다. (Iceb75)
버전 1.0.0-alpha01
2020년 10월 28일
android.navigation:navigation-compose:1.0.0-alpha01
이 출시되었습니다. 버전 1.0.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
navigation-compose
아티팩트는 Navigation 구성요소와 Jetpack Compose 간 통합을 제공합니다. @Composable
함수를 애플리케이션의 대상으로 사용합니다.
이번 최초 출시에서는 다음 기능을 제공합니다.
NavHost
컴포저블을 사용하여 Kotlin DSL을 통해 탐색 그래프를 구성할 수 있음- 대상 레벨에서 수명 주기,
ViewModel
, 저장된 상태의 범위 지정 - 시스템 뒤로 버튼을 사용하여 자동으로 통합
- 인수 전달, 대상에 딥 링크 연결, 이전 대상에 결과 반환 지원
rememberNavController()
및currentBackStackEntryAsState()
에 특정 도우미를 작성하여 호이스팅 상태를 허용하고NavController
를NavHost
(예: 하단 탐색 메뉴) 외부의 컴포저블에 연결
자세한 내용은 Compose Navigation 가이드를 참고하세요.
버전 2.3.5
버전 2.3.5
2021년 4월 7일
androidx.navigation:navigation-*:2.3.5
가 출시되었습니다. 버전 2.3.5에 포함된 커밋을 확인하세요.
새로운 기능
NavDeepLinkRequest
또는Uri
를 사용하여 탐색할 때, 이제KEY_DEEP_LINK_INTENT
를 통해 인수에서 인텐트를 가져와서 결과 대상의Uri
, 작업, MIME 유형에 액세스할 수 있으며, 외부 딥 링크에서 이미 사용할 수 있는 기능을 미러링합니다. (I975c3, b/181521877)
버그 수정
- LifecycleOwner로
NavBackStackEntry
와 함께 디스패처에 추가된OnBackPressedCallbacks
는 이제 활동 수명 주기가STOPPED
가 되고STARTED
된 후 다시 적절한 시점에 호출됩니다. (Iff94f, b/182284739) - 이제 딥 링크 도메인 파싱 시 대소문자를 구분하지 않으므로
www.example.com
은www.example.com
과www.Example.com
모두와 일치합니다. 그러나 쿼리 매개변수 이름은 여전히 대소문자를 구분합니다. (#144, b/153829033) - 대상에 null을 허용하지 않는 기본 인수가 여러 개 있고 이러한 인수의 하위 집합만 재정의된 대상으로 이동하는 경우 발생하던
NullPointerException
을 수정했습니다. (aosp/1644827)
종속 항목 업데이트
- Navigation Safe Args Gradle 플러그인은 이제 Kotlin Gradle 플러그인 1.4.31에 종속됩니다. (aosp/1661058, b/181156413)
외부 기여
- 딥 링크 도메인을 파싱할 때 대소문자를 구분하지 않도록 pull 요청을 보내주신
bentrengrove
님께 감사드립니다. (#144, b/153829033)
버전 2.3.4
버전 2.3.4
2021년 3월 10일
androidx.navigation:navigation-*:2.3.4
가 출시되었습니다. 버전 2.3.4에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
ReferenceType
인수가 딥 링크 URI의 일부로 전송될 때 이 인수를 올바르게 파싱할 수 있습니다. 원시 정숫값과0x
접두어가 붙은 16진수 값이 모두 지원됩니다. (#127, b/179166693) - 이제
app:argType="float"
를 사용하는 인수의android:defaultValue
에서 정수 기본값을 지원하며 이를 통해0.0
을 사용할 필요 없이android:defaultValue="0"
을 사용하면 됩니다. (#117, b/173766247)
버그 수정
- Navigation의 동적 기능 지원 기능을 사용할 때 설치 진행률이 중단되는 문제를 수정합니다. (Ib27a7, b/169636207)
- 이제 이미 설정된 동일한 객체로
setViewModelStore
또는setLifecycleOwner
를 호출하면 노옵스(no-ops)가 됩니다. (Idf491, b/177825470) - 이제 Safe Args는 자바를 사용할 때 적절한 메서드에 억제 주석을 추가합니다. (I8fbc5, b/179463137)
외부 기여
ReferenceType
인수가 딥 링크 URI의 일부로 전송될 때 이 인수를 적절하게 파싱할 수 있도록 pull 요청을 해 주신JvmName
님께 감사드립니다. (#127, b/179166693)app:argType=”float”
를 사용하는 인수의defaultValue
가 정수 기본값을 지원하도록 pull 요청을 해 주신tatocaster
님께 감사드립니다. (#117, b/173766247)
버전 2.3.3
버전 2.3.3
2021년 1월 27일
androidx.navigation:navigation-*:2.3.3
이 출시되었습니다. 버전 2.3.3에 포함된 커밋을 확인하세요.
버그 수정
Lifecycle
이CREATED
로 이동하기 전에NavBackStackEntry
를 표시할 때 더 이상 다운되지 않습니다. (Ie3ba3)- 애니메이션 리소스 값이
0
인 활동으로 이동할 때ResourceNotFoundException
이 발생하는 b/171364502로 인한 회귀 문제를 수정했습니다. (I7aedb, b/176819931)
버전 2.3.2
버전 2.3.2
2020년 12월 2일
androidx.navigation:navigation-*:2.3.2
가 출시되었습니다. 버전 2.3.2에 포함된 커밋을 확인하세요.
버그 수정
onNavDestinationSelected
로<activity>
대상을 사용하면 활동으로 이동할 수 없던NavigationUI
의 회귀 문제가 수정되었습니다. (I22e34, b/171364502)navigation-dynamic-features-fragment
가 새로 설치된 대상으로 여러 번 이동하는 문제가 수정되었습니다. (aosp/1486056, b/169636207)launchSingleTop
사용 시 기본 인수가OnDestinationChangedListener
인스턴스로 전송되지 않는 문제가 수정되었습니다. (I2c5cb)- 중첩된 탐색 그래프로 이동할 때 백 스택에 새 그래프 인스턴스가 생성되지 않는 문제가 수정되었습니다. (Ifc831)
- 탐색 그래프에서 마지막 대상을 삭제하는
popUpTo
와 함께navigate()
를 사용하면 백 스택에서 탐색 그래프 자체가 즉시 소멸 및 삭제되지 않는 문제가 수정되었습니다. (I910a3) - Navigation SafeArgs는 이제 Kotlin의 명시적 API 모드 지원을 추가한 KotlinPoet 버전 1.7.2를 사용합니다. (I918b5)
- 이제
NavHostFragment.findNavController(Fragment)
에서는 기존에 하던 Fragment 계층 구조와 Fragment 뷰 계층 구조 확인 외에 DialogFragment의 루트 장식 뷰도 확인합니다. 이를 통해FragmentScenario
와Navigation.setViewNavController()
로 Navigation을 사용하는 대화상자 프래그먼트를 테스트할 수 있습니다. (I69e0d)
버전 2.3.1
버전 2.3.1
2020년 10월 14일
androidx.navigation:navigation-*:2.3.1
가 출시되었습니다. 버전 2.3.1에 포함된 커밋을 확인하세요.
새로운 기능
- 기본 Animator 리소스를 Navigation UI에 추가했으며, 기본 애니메이션 리소스보다 이 리소스를 사용하는 것이 좋습니다. (b/167430145)
- 이제 NavOptions에서 hashCode와 equals 메서드를 재정의합니다. (b/161586466)
- 이제 Navigation에서 'ID가 있는 대상 없음' IllegalArgumentException의 현재 대상을 포함하며 이는 개발자 디버깅 환경을 개선합니다. (b/168311416)
버그 수정
- 생성된 인수 클래스 이름이 100자를 초과하더라도 Safe Args는 더 이상 반환 행을 래핑하지 않습니다. (b/168584987)
종속 항목 변경사항
- 이제
navigation-ui
가 DrawerLayout 1.1.1에 종속되도록 하여LOCK_MODE_LOCKED_CLOSED
또는LOCK_MODE_LOCKED_OPEN
을 사용할 때NavigationUI
에서 창을 열 수 있도록 합니다. (b/162253907) - 이제 Safe Args가 KotlinPoet 1.6.0에 종속됩니다. (aosp/1435911)
- 이제 Safe Args가 AGP 4.0.1에 종속됩니다. (aosp/1442337)
버전 2.3.0
버전 2.3.0
2020년 6월 24일
androidx.navigation:navigation-*:2.3.0
가 출시되었습니다. 버전 2.3.0에 포함된 커밋을 확인하세요.
2.2.0 이후 주요 변경사항
- 기능 모듈 통합:
navigation-dynamic-features-runtime
및navigation-dynamic-features-fragment
아티팩트를 사용하면 기능 모듈에 정의된 대상으로 이동하여 필요에 따라 기능 모듈의 설치를 자동으로 처리할 수 있습니다. 자세한 내용은 기능 모듈로 탐색을 참고하세요. - 탐색 테스트:
navigation-testing
아티팩트는TestNavHostController
를 제공하며 이를 사용하면 탐색 작업 후 현재 대상을 설정하고 백 스택을 확인할 수 있습니다. 자세한 내용은 탐색 테스트를 참고하세요. - 결과 반환: 이제 탐색 백 스택의 각 대상에 연결된
NavBackStackEntry
를 사용하여 특정 백 스택 항목에 연결되어야 하는 소량의 저장된 상태를 보관하는 데 적합한SavedStateHandle
에 액세스할 수 있습니다. 자세한 내용은 이전 대상으로 결과 반환을 참고하세요. Openable
에 대한NavigationUI
지원:NavigationUI
의 모든DrawerLayout
사용은 CustomView1.1.0
에서 추가되고 DrawerLayout1.1.0
의DrawerLayout
에서 구현되는 더 일반적인Openable
인터페이스로 대체되었습니다.- 딥 링크의 작업 및 MIME 유형 지원: 이전에 사용 가능했던
app:uri
외에 딥 링크에서app:action
및app:mimeType
을 지원하도록 확장되었습니다. 이제NavController
에서 새로운NavDeepLinkRequest
클래스를 통해 이러한 필드의 조합으로 탐색할 수 있습니다. 자세한 내용은 NavDeepLinkRequest를 사용하여 탐색을 참고하세요.
알려진 문제
- 딥 링크 작업 및 MIME 유형 지원은 아직 매니페스트 병합기에서 사용할 수 없습니다. 이 작업이 완료될 때까지 매니페스트의
<nav-graph>
요소에서 생성된<intent-filter>
요소는<data>
요소 또는 맞춤<action>
에 MIME 유형을 포함하지 않습니다. 매니페스트에 적절한<intent-filter>
를 수동으로 추가해야 합니다.
버전 2.3.0-rc01
2020년 6월 10일
androidx.navigation:navigation-*:2.3.0-rc01
가 출시되었습니다. 버전 2.3.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 인수가 없는 대상 인스턴스를
singleTop
인수가 있는 다른 인스턴스로 교체할 때 발생하는NullPointerException
문제를 수정했습니다. (b/158006669) - 이제
NavController
에서 발생하는 모든destination is unknown
예외에 디버깅 정보가 추가되어NavController
의 상태를 확인할 수 있습니다. (b/157764916)
버전 2.3.0-beta01
2020년 5월 20일
androidx.navigation:navigation-*:2.3.0-beta01
이 출시되었습니다. 버전 2.3.0-beta01에 포함된 커밋을 확인하세요.
버그 수정
- 프로세스 종료 후
NavBackStackEntry
의Lifecycle
이 제대로 업데이트되지 않는 문제가 수정되었습니다. (b/155218371) - 이제
setGraph()
호출 전에 등록된OnDestinationChangedListener
인스턴스가 프로세스 종료 후 복원된 대상으로 올바르게 전송됩니다. (b/155218371) singleTop
을 사용할 때 이제NavBackStackEntry
의 인수가 올바르게 업데이트되고 업데이트된 인수는 모든OnDestinationChangeListener
인스턴스로 전송됩니다. (b/156545508)
종속 항목 업데이트
- 이제
NavigationUI
아티팩트가 CustomView1.1.0-rc01
및 DrawerLayout1.1.0-rc01
에 종속됩니다. (aosp/1309696)
버전 2.3.0-alpha06
2020년 4월 29일
androidx.navigation:navigation-*:2.3.0-alpha06
가 출시되었습니다. 버전 2.3.0-alpha06에 포함된 커밋을 확인하세요.
새로운 기능
- 이전에 사용 가능한
app:uri
외에app:action
및app:mimeType
을 지원하도록 딥 링크가 확장되었습니다. 이제 NavController가 새로운NavDeepLinkRequest
클래스를 통한 이러한 필드의 조합으로 탐색을 지원합니다. (b/136573074, b/135334841)
API 변경사항
- 동적 탐색 대상의 Kotlin DSL 지원이 크게 확장되었습니다. (b/148969800)
버그 수정
- 중첩된 시작 대상을 사용할 때 딥 링크 인텐트가 무시되는 문제가 수정되었습니다. (b/154532067)
버전 2.3.0-alpha05
2020년 4월 15일
androidx.navigation:navigation-*:2.3.0-alpha05
가 출시되었습니다. 버전 2.3.0-alpha05에 포함된 커밋을 확인하세요.
새로운 기능
<include-dynamic>
사용을 포함하는 동적 그래프의 경우 더 이상app:graphPackage
를 지정할 필요가 없으며 기본적으로 점 다음에applicationId
에moduleName
접미사를 추가하여 사용합니다.graphPackage
를 맞춤설정해야 하는 경우${applicationId}
자리표시자가 지원됩니다. (b/152696768)- 탐색 그래프 Kotlin DSL은 이제 작업에
defaultArguments
Map
을 노출하여 탐색 XML 파일의<action>
요소에 기본값을 설정하는 기능을 미러링합니다. (b/150345605)
버그 수정
- Navigation 2.2.2에서: 활동에 여러
NavHostFragment
인스턴스가 있을 때 그래프의 시작 대상으로 딥 링크를 생성할 때 발생하는IllegalStateException
이 수정되었습니다. (b/147378752)
종속 항목 업데이트
- 탐색은 이제 Fragment
1.2.4
에 종속됩니다. (aosp/1277325) - 동적 탐색은 이제 Play Core
1.7.2
에 종속됩니다. (aosp/1282257)
버전 2.3.0-alpha04
2020년 3월 18일
androidx.navigation:navigation-*:2.3.0-alpha04
가 출시되었습니다. 버전 2.3.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
- 탐색 Kotlin DSL에서 기능 모듈 활동 및 프래그먼트 대상에 대한 지원이 추가되었습니다. (b/148969800)
API 변경사항
DynamicExtras
클래스는 더 이상 빌더 패턴을 사용하지 않으며 이제 직접 생성할 수 있습니다. (aosp/1253671)- 이제
DynamicActivityNavigator
는 생성자에서Activity
가 아닌Context
를 가져옵니다. (aosp/1250252)
버그 수정
NavigationUI
는 더 이상 빈 라벨(예:android:label=””
이 있는 대상)을 무시하지 않으며 이제 제목을 빈 문자열로 올바르게 설정합니다. (b/148679860)
종속 항목 업데이트
- 이제 탐색 동적 기능 아티팩트는 Play Core
1.6.5
에 종속됩니다. (b/149556401)
버전 2.3.0-alpha03
2020년 3월 4일
androidx.navigation:navigation-*:2.3.0-alpha03
가 출시되었습니다. 버전 2.3.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- 구체적인
DrawerLayout
클래스에 의존하는 대신AppBarConfiguration
에서는 이제 CustomView1.1.0-alpha02
에서 도입된Openable
인터페이스(DrawerLayout
에서 DrawerLayout1.1.0-alpha04
로 구현)를 사용하여 개발자가NavigationUI
가 있는 맞춤Openable
구현을 사용할 수 있습니다. (b/129030452)
버그 수정
- 이제
navigation-common-ktx
ProGuard 규칙이 모든NavArgs
인스턴스가 아닌 사용되는NavArgs
클래스만 올바르게 유지합니다. (b/150213558)
종속 항목 변경사항
- Navigation이 Core
1.2.0
에 대한 종속성을 되돌려 이제는 Core1.1.0
에 종속됩니다. 이로써 Navigation이 Core1.2.0
의 새로운 API에 종속되지 않을 때 개발자가 새로운 종속 항목으로 강제로 이동하게 되는 것을 방지합니다.
버전 2.3.0-alpha02
2020년 2월 19일
androidx.navigation:navigation-*:2.3.0-alpha02
가 출시되었습니다. 버전 2.3.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavBackStackEntry
를 사용하면 특정 백 스택 항목과 관련된 소량의 저장된 상태를 저장하는 데 적합한SavedStateHandle
에 액세스할 수 있습니다. 사용 사례는 결과 반환을 참고하세요. (b/79672220)
API 변경사항
- 현재 및 이전 대상에 대한
NavBackStackEntry
를 더 쉽게 가져올 수 있도록getCurrentBackStackEntry()
및getPreviousBackStackEntry()
의 편의 메서드가 추가되었습니다. (b/79672220)
버그 수정
- 이제 자체 작업 스택에서 앱을 실행할 때
navigateUp()
이 현재 대상의 인수와KEY_DEEP_LINK_INTENT
를 이전 대상으로 전달합니다. (b/147456890)
종속 항목 변경사항
- 이제 Navigation이 Core
1.2.0
에 종속됩니다.
버전 2.3.0-alpha01
2020년 2월 5일
androidx.navigation:navigation-*:2.3.0-alpha01
가 출시되었습니다. 버전 2.3.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
- 새
navigation-testing
아티팩트는TestNavHostController
클래스를 제공합니다. 이 클래스는 Navigation 테스트 시 모의NavController
사용에 대한 대안을 제공하여 탐색 작업 후 현재 대상을 설정하고 백 스택을 확인할 수 있도록 합니다. (b/140884273) - 새로운
navigation-dynamic-features-fragment
(및 전이 종속 항목,navigation-dynamic-features-runtime
)를 사용하면 기능 모듈의 대상 또는 전체 탐색 그래프(<include-dynamic>
을 통해)를 포함하여 대상으로 이동할 때 주문형 기능 모듈을 원활하게 설치할 수 있습니다. 자세한 내용은 기능 모듈로 탐색을 참고하세요. (b/132170186)
버그 수정
- Navigation
2.2.1
에서: 이제 쿼리 매개변수가 없는 딥 링크는 뒤에 오는{argument}
요소에 쿼리 매개변수를 추가하거나 딥 링크를 일치시키지 않는 것이 아니라 쿼리 매개변수를 올바르게 무시합니다. (b/147447512) - Navigation
2.2.1
에서:android.enableJetifier=true
가 필요하지 않도록DrawerArrowDrawable
에 대한navigation-ui
ProGuard 규칙이 업데이트되었습니다. (b/147610424) - Navigation
2.2.1
에서: 이제navigation-common-ktx
모듈이navigation-runtime-ktx
처럼 동일한 매니페스트 패키지 이름을 공유하는 대신 고유한 매니페스트 패키지 이름을 갖습니다. (aosp/1141947)
종속 항목 업데이트
- Navigation
2.2.1
에서: 이제 Navigation2.2.1
은 Lifecycle ViewModel SavedState2.2.0
및 Fragment1.2.1
에 종속됩니다.
버전 2.2.2
버전 2.2.2
2020년 4월 15일
androidx.navigation:navigation-*:2.2.2
이 출시되었습니다. 버전 2.2.2에 포함된 커밋을 확인하세요.
버그 수정
- 활동에
NavHostFragment
인스턴스가 여러 개 있는 경우 그래프 시작 대상에 딥 링크를 생성할 때 발생하던IllegalStateException
을 수정했습니다. (b/147378752) NavigationUI
는 더 이상 빈 라벨(예:android:label=””
이 있는 대상)을 무시하지 않으며 이제 제목을 빈 문자열로 올바르게 설정합니다. 이전에 Navigation 2.3.0-alpha04에서 출시되었습니다. (b/148679860)- 이제
navigation-common-ktx
ProGuard 규칙이 모든NavArgs
인스턴스가 아닌 사용되는NavArgs
클래스만 올바르게 유지합니다. 이전에 Navigation 2.3.0-alpha03에서 출시되었습니다. (b/150213558)
종속 항목 업데이트
- 탐색은 이제 Fragment
1.2.4
에 종속됩니다. (aosp/1277325)
버전 2.2.1
버전 2.2.1
2020년 2월 5일
androidx.navigation:navigation-*:2.2.1
가 출시되었습니다. 버전 2.2.1에 포함된 커밋을 확인하세요.
버그 수정
- 이제 쿼리 매개변수가 없는 딥 링크가 뒤에 오는
{argument}
요소에 추가되거나 딥 링크와 일치하지 않는 쿼리 매개변수를 올바르게 무시합니다. (b/147447512) android.enableJetifier=true
가 필요하지 않도록DrawerArrowDrawable
에 대한navigation-ui
ProGuard 규칙이 업데이트되었습니다. (b/147610424)- 이제
navigation-common-ktx
모듈이navigation-runtime-ktx
처럼 동일한 매니페스트 패키지 이름을 공유하는 대신 공유한 매니페스트 패키지 이름을 갖습니다. (aosp/1141947)
종속 항목 업데이트
- Navigation
2.2.1
이 이제 Lifecycle ViewModel SavedState2.2.0
및 Fragment1.2.1
에 종속됩니다.
버전 2.2.0
버전 2.2.0
2020년 1월 22일
androidx.navigation:navigation-*:2.2.0
이 출시되었습니다. 버전 2.2.0에 포함된 커밋을 확인하세요.
2.1.0 이후 중요 변경사항
- NavBackStackEntry: 이제
NavController.getBackStackEntry()
를 호출하여 백 스택에 있는 대상 또는 탐색 그래프의 ID를 전달할 수 있습니다. 반환된NavBackStackEntry
는 이 대상을 시작하는 데 사용되는 인수를 제공할 뿐 아니라 Navigation 기반LifecycleOwner
,ViewModelStoreOwner
(NavController.getViewModelStoreOwner()
가 반환하는 것과 동일함),SavedStateRegistryOwner
도 제공합니다. - Lifecycle ViewModel SavedState 통합:
SavedStateViewModelFactory
는 이제NavController.getBackStackEntry()
또는NavController.getViewModelStoreOwner()
에서 반환된ViewModelStoreOwner
와 함께by navGraphViewModels()
또는ViewModelProvider
생성자를 사용할 때 사용되는 기본 팩토리입니다. - 딥 링크의 쿼리 매개변수 지원: 쿼리 매개변수가 포함된 딥 링크가 이제 재정렬된 쿼리 매개변수를 지원합니다. 딥 링크를 일치시킬 때 이제 기본값이 있거나 null을 허용하는 인수는 선택사항입니다.
- 개선된 애니메이션 지원: 이제
NavHostFragment
가 Fragment 1.2.0에서FragmentContainerView
를 사용하여 애니메이션 z-순서 문제 및 Fragment로 창 인셋 전달 문제를 해결했습니다.
버전 2.2.0-rc04
2019년 12월 18일
androidx.navigation:navigation-*:2.2.0-rc04
가 출시되었습니다. 버전 2.2.0-rc04에 포함된 커밋을 확인하세요.
버그 수정
- Fragment
1.2.0-rc04
에서 조정된 페이드 애니메이션에 일치시키기 위해navigation-ui
에 사용되는 기본 페이드 애니메이션을 조정했습니다. (b/145769814)
버전 2.2.0-rc03
2019년 12월 4일
androidx.navigation:navigation-*:2.2.0-rc03
이 출시되었습니다. 버전 2.2.0-rc03에 포함된 커밋을 확인하세요.
버그 수정
- 경로에 쿼리 매개변수와 인수를 마지막 요소로 사용할 때 마지막 경로 인수의 두 개 이상 문자가 파싱되지 않던 딥 링크 파싱 문제가 해결했습니다. (b/144554689)
- 선택적 매개변수가
null
대신"@null"
을 수신하는 딥 링크 파싱 문제가 해결되었습니다. (b/141613546) - 이제
NavHostFragment
는FragmentContainerView
와 함께 사용될 경우 구성 변경 후 그래프를 올바르게 복원합니다. (b/143752103)
종속 항목 변경사항
- Navigation이 이제 Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
, Activity1.1.0-rc03
및 Fragment1.2.0-rc03
에 종속됩니다(해당하는 경우).
버전 2.2.0-rc02
2019년 11월 7일
androidx.navigation:navigation-*:2.2.0-rc02
가 출시되었습니다. 버전 2.2.0-rc02에 포함된 커밋을 확인하세요.
종속 항목 변경사항
- Navigation이 이제 androidx.lifecycle
2.2.0-rc02
에 종속됩니다.
버전 2.2.0-rc01
2019년 10월 23일
androidx.navigation:navigation-*:2.2.0-rc01
이 2.2.0-beta01
이후 변경사항 없이 출시되었습니다. 버전 2.2.0-rc01에 포함된 커밋을 확인하세요.
버전 2.2.0-beta01
2019년 10월 9일
androidx.navigation:navigation-*:2.2.0-beta01
이 출시되었습니다. 버전 2.2.0-beta01에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
NavDestination
및 서브클래스가toString()
을 재정의하여 디버깅 시 유용한 추가 정보를 제공합니다. (b/141264986)
동작 변경사항
- 딥 링크를 일치시킬 때 이제 추가 쿼리 매개변수가 일치 실패를 일으키지 않고 무시됩니다. (b/141482822)
버그 수정
- 쿼리 매개변수도 지정되어 있는 경우 딥 링크 경로의 인수가 무시되는 문제를 해결했습니다. (b/141505755)
- 이제
Activity
의navArgs()
Kotlin 확장 프로그램에 추가 항목이 없을 때 나타나는 오류 메시지가 개선되었습니다. (b/141408999) - Safe Args 생성
Directions
자바 클래스에 이제 기본값이 포함되었습니다. (b/141099045) - Safe Args 생성
Args
자바 클래스에 이제 기본값이 포함되었습니다. (b/140123727) Toolbar
를 사용하면NavigationUI
는 두 최상위 대상 간에 이동할 때 더 이상 텍스트 변경에 애니메이션을 적용하지 않습니다. (b/140848160)
버전 2.2.0-alpha03
2019년 9월 18일
androidx.navigation:navigation-*:2.2.0-alpha03
가 출시되었습니다. 버전 2.2.0-alpha03에 포함된 커밋을 확인하세요.
동작 변경사항
setGraph
호출 후setViewModelStore()
를 호출할 때 이제IllegalStateException
이 발생합니다. 항상 초기 설정 과정에서NavHost
를 통해 설정함으로써 모든NavBackStackEntry
인스턴스가ViewModel
인스턴스를 위한 일관된 저장소를 가지도록 해야 합니다. (aosp/1111821)
버그 수정
- 여러 개의 탐색 그래프 범위
ViewModelStore
인스턴스에 연결된ViewModel
인스턴스를 사용할 때 발생하는ConcurrentModificationException
을 수정했습니다. (aosp/1112257)
버전 2.2.0-alpha02
2019년 9월 5일
androidx.navigation:navigation-*:2.2.0-alpha02
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 쿼리 매개변수가 포함된 딥 링크가 이제 재정렬된 쿼리 매개변수를 지원합니다. 딥 링크를 일치시킬 때 이제 기본값이 있거나 null을 허용하는 인수는 선택사항입니다. (b/133273839)
- 이제
NavController.getBackStackEntry()
를 호출하여 백 스택에 있는 대상 또는 탐색 그래프의 ID를 전달할 수 있습니다. 반환된NavBackStackEntry
는 이 대상을 시작하는 데 사용되는 인수를 제공할 뿐 아니라 Navigation 기반LifecycleOwner
,ViewModelStoreOwner
(NavController.getViewModelStoreOwner()
가 반환하는 것과 동일함),SavedStateRegistryOwner
도 제공합니다. (aosp/1101691, aosp/1101710)
버그 수정
ViewPager2
에NavHostFragment
를 추가할 때 실패하고IllegalArgumentException
이 발생하는 문제를 해결했습니다. (b/133640271)NavInflater
가 이제 불필요하게getResourceName()
을 호출하지 않아 인플레이션 시간을 최대 40% 단축합니다. (b/139213740)
버전 2.2.0-alpha01
2019년 8월 7일
androidx.navigation:navigation-*:2.2.0-alpha01
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
SavedStateViewModelFactory
는 이제by navGraphViewModels()
를 사용하거나NavController.getViewModelStoreOwner()
에서 반환된ViewModelStoreOwner
와 함께ViewModelProvider
생성자를 사용할 때 기본 팩토리입니다. (b/135716331)
API 변경사항
- Navigation
2.1.0-rc01
에서 변경:2.1.0-alpha02
에 도입된NavController
의 지원 중단된getViewModelStore()
API를 삭제했습니다. (aosp/1091021)
버그 수정
- 이제
NavHostFragment
가FragmentContainerView
를 사용하여 애니메이션 z-순서 문제 및 Fragment로 창 인셋 전달 문제를 해결했습니다. (b/137310379)
버전 2.1.0
버전 2.1.0
2019년 9월 5일
androidx.navigation:navigation-*:2.1.0
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
2.0.0 이후 중요 변경사항
- ViewModel의 범위를 탐색 그래프로 지정: 이제
-ktx
라이브러리를 사용하는 Kotlin 사용자를 위한by navGraphViewModels()
속성 위임을 사용하거나NavController
에 추가된getViewModelStoreOwner()
API를 사용하여 탐색 그래프 수준으로 범위가 지정된 ViewModel을 만들 수 있습니다. 자세한 내용은 대상 간 UI 관련 데이터 공유를 참고하세요. - 대화상자 대상: 이제
navigate
시DialogFragment
를 표시하는<dialog>
대상을 만들 수 있습니다.NavHostFragment
는 기본적으로 대화상자 대상을 지원합니다. 자세한 내용은 DialogFragment에서 대상 만들기를 참고하세요. - URI로 탐색: 이제
Uri
를 사용한navigate
가 가능하며 이 경우 대상에 추가한<deepLink>
를 사용하여 탐색합니다. 자세한 내용은 URI를 사용하여 이동을 참고하세요. - NavHostController: 특히 맞춤
NavHost
를 생성하는 데 사용되는 API를NavHostController
로 이동했으므로 호스팅LifecycleOwner
,OnBackPressedDispatcher
,ViewModelStore
에NavController
를 연결하도록 구현할 수 있습니다.
버전 2.1.0-rc01
2019년 8월 7일
androidx.navigation:navigation-*:2.1.0-rc01
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
API 변경사항
2.1.0-alpha02
에 도입된NavController
의 지원 중단된getViewModelStore()
API를 삭제했습니다. (aosp/1091021)
버전 2.1.0-beta02
2019년 7월 19일
androidx.navigation:*:2.1.0-beta02
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
2.1.0-beta01
에 도입된 의도치 않은 jacoco 종속 항목이 삭제되었습니다. (b/137782950)
버전 2.1.0-beta01
2019년 7월 17일
androidx.navigation:*:2.1.0-beta01
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
setupWithNavController()
를Toolbar
또는CollapsingToolbarLayout
과 함께 사용할 때 이제NavigationUI
가 위로 버튼의 삭제를 애니메이션합니다. (b/131403621)
버그 수정
- 동일한 컨테이너가 포함된 여러 NavHostFragment를
findNavController()
와 함께 사용할 때 발생하는 타이밍 문제를 해결했습니다. (b/136021571)
버전 2.1.0-alpha06
2019년 7월 2일
androidx.navigation:*:2.1.0-alpha06
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- NavHostFragment에 사용되는
app:navGraph
속성을navigation-runtime
아티팩트로 이동했습니다. XML을 통해 추가할 수 있는 맞춤 탐색기는 이 속성을 사용하여 Navigation Editor의 Host 패널과의 통합을 가져와야 합니다. (b/133880955)
API 변경사항
NavController
의getViewModelStore()
API를 지원 중단하고ViewModelStoreOwner
를 반환하는 새getViewModelStoreOwner()
메서드를 도입했습니다. (aosp/987010)- 부동 창 대상(예:
<dialog>
대상)의 구현을 마커 인터페이스인FloatingWindow
로 일반화하여 이제 모든<dialog>
대상이 구현됩니다. 이제 상단의 앱 바와 상호작용하는 NavigationUI 메서드는FloatingWindow
대상을 무시합니다. (b/133600763)
동작 변경사항
- 이제 Navigation이
<dialog>
대상 사용 시 화면에 표시되는 내용과의 동기화 상태를 올바르게 유지합니다. 결과적으로<fragment>
대상과 같은 비 대화상자 및 비 활동 대상으로 이동할 때 이제 Navigation에서<dialog>
대상을 자동으로 표시합니다. (b/134089818)
버그 수정
- 이제 Navigation에서 딥 링크를 처리하는 경우 액티비티를 다시 생성할 때 발생하는 애니메이션을 표시하지 않도록 하여 시각적 플래시 문제를 해결했습니다. (b/130362979)
- 초기 프래그먼트가 추가되는 동안 Fragment를 표시할 때 Navigation 백 스택이 동기화되지 않는 버그를 수정했습니다. (b/133832218)
버전 2.1.0-alpha05
2019년 6월 5일
androidx.navigation:*:2.1.0-alpha05
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
API 변경사항
NavController
의 호스트 관련 API를NavController
의 새로운 서브클래스인NavHostController
로 이동했으며 그 이름을 변경했습니다. (aosp/966091)NavController
setHostOnBackPressedDispatcherOwner()
메서드를NavHostController
의setOnBackPressedDispatcher()
메서드로 대체했으며 이제 이 메서드를 호출하기 전에setLifecycleOwner()
를 호출해야 합니다. (aosp/965409)- 이제
NavHostController
가 이전에setHostOnBackPressedDispatcherOwner()
에서 반환된NavHostOnBackPressedManager
클래스를 대체하는enableOnBackPressed(boolean)
메서드를 포함합니다. (aosp/966091)
버그 수정
- URI로 탐색한 후 백 스택이 잘못되는 문제가 해결되었습니다. (b/132509387)
- 이제 NavController에서 자동으로 처리되는 딥 링크는 한 번만 트리거됩니다. (b/132754763)
버전 2.1.0-alpha04
2019년 5월 16일
androidx.navigation:*:2.1.0-alpha04
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
버그 수정
NavHostFragment
가 시스템 뒤로 버튼 이벤트를 가로챌 때app:defaultNavHost
를 올바르게 적용하도록 하여 Navigation2.1.0-alpha03
의 회귀 문제를 해결했습니다. (b/132077777)DialogFragmentNavigator
가 이제popBackStack()
및navigateUp()
작업을 올바르게 처리합니다. (b/132576764)- 중첩된 그래프 사이를 반복적으로 탐색할 때 발생하는
IllegalStateException: unknown destination during restore
문제를 해결했습니다. (b/131733658)
버전 2.1.0-alpha03
2019년 5월 7일
androidx.navigation:*:2.1.0-alpha03
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
알려진 문제
app:defaultNavHost="false"
를 사용하더라도 NavHostFragment가 계속해서 시스템 뒤로 버튼을 가로챕니다. (b/132077777)
새로운 기능
- 이제 대상으로
navigate
할 때DialogFragment
를 표시하는<dialog>
대상을 만들 수 있습니다.NavHostFragment
는 기본적으로 대화상자 대상을 지원합니다. (b/80267254) - 리소스 ID 또는
NavDirections
인스턴스로navigate
를 호출하는 것뿐 아니라 이제Uri
를 통해 탐색할 수 있으며 이때 대상에 추가한<deepLink>
를 사용하여 올바른 대상으로 이동합니다. (b/110412864)
동작 변경사항
- NavigationUI에서 제공하는 기본 애니메이션의 속도가 활동 및 프래그먼트의 기본 애니메이션 속도와 일치하도록 400ms에서 220ms로 빨라졌습니다. (b/130055522)
API 변경사항
NavHostFragment
의createFragmentNavigator()
메서드를 지원 중단하고 기능을 새onCreateNavController()
메서드로 이동했으며 이로써NavHostFragment
를 서브클래스로 분류할 때 맞춤 Navigator 추가의 올바른 진입점이라는 것을 더 명확하게 나타냈습니다. (b/122802849)NavDestination
에hasDeepLink()
메서드를 추가했으며 이를 사용하여 제공된Uri
가 대상(또는NavGraph
의 경우 탐색 그래프의 임의의 대상)에서 처리될 수 있는지를 확인할 수 있습니다. (b/117437718)
버그 수정
- 이제 기본 인수가
OnDestinationChangedListener
인스턴스에 올바르게 전달됩니다. (b/130630686) - 이제
NavHostFragment
에서OnBackPressedDispatcher
를 사용해 시스템 뒤로 이벤트를 가로채도록 함으로써 Fragment로 돌아갈 때 Fragment 수명 주기 메서드에서 조건부 탐색을 할 때 발생하는 문제를 해결했습니다. (b/111598096) - Safe Args의 경우 지정되지 않은
app:argType
이 있는android:defaultValue=”@null”
이 이제string
인수로 올바르게 추론됩니다. (b/129629192)
버전 2.1.0-alpha02
2019년 4월 3일
androidx.navigation:*:2.1.0-alpha02
가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.
새로운 기능
- 이제 Kotlin 사용자를 위한
by navGraphViewModels()
속성 위임을 통해 또는NavController
에 추가된getViewModelStore()
API를 사용하여 탐색 그래프 수준으로 범위가 지정된 ViewModel을 만들 수 있습니다. (b/111614463)
API 변경사항
- 이제
app:targetPackage
를<activity>
대상에 추가하여 일치하는 패키지 이름을 제한할 수 있습니다. 패키지를 자체 애플리케이션 ID로 제한하는app:targetPackage="${applicationId}"
를 지원합니다. (b/110975456)
버그 수정
<activity>
대상의android:name
이 더 이상 인플레이션 시간에 클래스로 파싱되지 않으며 동적 기능 사용 시 ClassNotFoundExceptions를 방지합니다. (b/124538597)
버전 2.1.0-alpha01
2019년 3월 19일
Navigation 2.1.0
의 첫 번째 알파 릴리스입니다.
종속 항목 변경사항
- Navigation이 이제
androidx.core:core:1.0.1
및androidx.fragment:fragment:1.1.0-alpha05
에 종속됩니다. 이 출시에서는 또한androidx.legacy:legacy-support-core-utils:1.0.0
의 종속 항목이 삭제되었습니다. (b/128632612)
API 변경사항
- 리소스 ID와 번들로 클릭 리스너를 만드는 대신 새로운
Navigation.createNavigateOnClickListener(NavDirections)
메서드가 추가되었습니다. (b/127631752) FragmentNavigator.instantiateFragment
를 이제 지원 중단했습니다. 이제 기본 구현에서는FragmentFactory
를 사용하여 Fragment를 인스턴스화합니다. (b/119054429)
버그 수정
- 대상에 연결된 인수가 있는 경우 더 이상 Navigation에서 null
Bundle
을 전송하지 않도록 하여android:defaultValue="@null"
을 사용할 때 발생하는 문제를 해결했습니다. (b/128531879) - 이제 Safe Args가 KotlinPoet 1.1.0에 종속되도록 하여 지나치게 긴 패키지 이름 관련 문제를 해결했습니다. (b/123654948)
버전 2.0.0
버전 2.0.0
2019년 3월 14일
Navigation 2.0.0
이 2.0.0-rc02
에서 변경사항 없이 출시되었습니다.
버전 2.0.0-rc02
2019년 3월 6일
Navigation 2.0.0-rc02는 androidx.navigation
그룹 ID가 포함된 새로운 아티팩트를 제공하고 해당 종속 항목을 상응하는 AndroidX 종속 항목으로 변경합니다.
2.0.0-rc02의 동작은 Navigation 1.0.0-rc02의 동작과 동일하며 새로운 종속 항목에 맞춰 종속 항목을 업데이트하는 것 외에 1.0.0-rc02에서 코드 변경사항을 업데이트할 필요가 없습니다.
프로젝트가 AndroidX로 이전되어야 2.X 버전의 Navigation을 사용할 수 있습니다. Navigation 1.0 안정화 버전은 지원 라이브러리 종속 항목을 사용하는 마지막 출시가 될 것입니다. 앞으로 1.0 이후의 모든 개발은 AndroidX를 기반으로 하며 2.0 안정화 버전에서 빌드됩니다.
AndroidX 이전 종속 항목
Navigation의 AndroidX 이전 버전의 경우 다음 종속 항목을 포함합니다.
dependencies {
def nav_version = "1.0.0"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
Safe args의 경우 최상위 build.gradle
파일에 다음 클래스 경로를 추가합니다.
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
버전 1.0.0
버전 1.0.0
2019년 3월 14일
Navigation 1.0.0
이 1.0.0-rc02
에서 변경사항 없이 출시되었습니다.
버전 1.0.0-rc02
2019년 2월 26일
Navigation 1.0.0 안정화 릴리스의 두 번째 출시 후보입니다. 이 릴리스에는 다양한 버그 수정이 포함되어 있습니다.
버그 수정
- 루트 그래프에 ID가 없는 경우
popBackStack()
이 무시되는 문제를 해결했습니다. (b/126251695) - 이제
navigateUp()
이FLAG_ACTIVITY_NEW_TASK
없이 딥 링크를 처리한 후 호출될 때 앱의 작업으로 돌아가기를 올바르게 처리합니다. (b/126082008) - 올바른 열기 종료 애니메이션을 적용하지 않는
ActivityNavigator.applyPopAnimationsToPendingTransition
문제를 해결했습니다. (b/126237567) - 이제 Safe Args에서 생성된 Kotlin 코드가
R
클래스와 연결된 패키지 이름의in
및fun
과 같은 Kotlin 키워드를 올바르게 이스케이프 처리합니다. (b/126020455)
버전 1.0.0-rc01
2019년 2월 21일
Navigation 1.0.0 공개 버전의 출시 후보입니다. 이 버전에는 한 가지 버그 수정이 포함되어 있습니다.
버그 수정
- Fragment 및
singleTop
탐색 작업을 사용할 때 발생하는 문제를 해결했습니다. (b/124294805)
버전 1.0.0-beta02
2019년 2월 12일
이 릴리스에는 다양한 소규모 변경사항 및 중요한 버그 수정이 포함되어 있습니다.
새로운 기능
- 이제
0
을reference
인수의android:defaultValue
로 사용할 수 있습니다. (b/124248602)
동작 변경사항
- 이제 정확한 딥 링크 일치가
.*
또는 인수 일치가 있는 딥 링크보다 높은 우선순위를 차지합니다. (b/123969518)
버그 수정
- 백 스택에서 마지막 대상을 표시할 때 이제
popBackStack()
및navigateUp
이false
를 올바르게 반환하도록 하여1.0.0-beta01
에서 나타난 회귀 문제를 해결했습니다. (b/123933201) - 저장된 인스턴스 상태를 복원하는 동안 Navigation이 이제
ClassLoader
를 올바르게 설정하므로Navigator
저장된 상태 또는NavDestination
에 전송된 인수의 맞춤 클래스를 사용할 때 발생하는 문제를 방지합니다. (b/123893858) - 저장된 인스턴스 상태에서
Parcelable[]
인수를 복원할 때 Safe Args 생성 NavArgs 클래스가 더 이상 비정상 종료되지 않습니다. (b/123963545) - 이제 Safe Args가 불필요하게 생성된 Kotlin 클래스를 올바르게 정리합니다. (b/124120883)
버전 1.0.0-beta01
2019년 2월 4일
Navigation의 첫 번째 베타 출시입니다. 앞으로 심각한 문제만 없다면 다음 버전까지 Navigation API가 안정적으로 유지될 것으로 예상됩니다. 이 출시에는 몇 가지 버그 수정 및 동작 변경사항이 포함되어 있습니다.
동작 변경사항
- Navigation에서 이제 런타임 시 그리고 Safe Args를 통해 인수 기본값이 동일하게 취급되도록 합니다. 따라서
app:argType="reference"
가 있는 인수만 다른 리소스를 가리키는 기본값을 가질 수 있습니다(예:@color/colorPrimary
). 탐색 XML을 파싱할 때 다른app:argType
이 포함된 참조 기본값을 사용하려고 하면 예외가 발생합니다. (b/123551990) - Safe Args가 이제 Android Gradle 플러그인 3.3.0에 종속됩니다. (aosp/888413)
- Safe Args가 이제 Kotlin 1.3.20에 종속됩니다. (aosp/888414)
버그 수정
- 이제 Safe Args를 모든 버전의 Android Gradle 플러그인의 라이브러리 및 기능 모듈에서 사용할 수 있습니다. (b/121304903)
- 단일
popBackStack()
작업이 한 번에 하나의 대상만 표시하지 않고 백 스택 상단에서 대상의 모든 사본을 표시하는 회귀 문제를 해결했습니다. (b/123552990) FragmentNavigator
상태가NavController
의 상태와 비동기화되어 백 스택을 복원하려고 할 때IllegalStateException
이 발생하는 문제를 해결했습니다. (b/123803044)- 난독화와 함께 ProGuard를 사용할 때
NavigationUI
처리된 뒤로 화살표가 표시되지 않는 문제를 해결했습니다. (b/123449431) - Safe Args에서 생성된 코드가 이제
.OuterClass$InnerClass
형식의 정적 내부 클래스를 가리키는app:argType
의 사용을 제대로 처리합니다. (b/123736741) - 이제 Safe Args에서 생성된 자바 코드가 전역 작업 및 깊이 중첩된 대상을 올바르게 처리합니다. (b/123347762)
버전 1.0.0-alpha11
2019년 1월 23일
Safe Args 관련 문제를 해결하는 1.0.0-alpha10
의 핫픽스 릴리스입니다.
버그 수정
- Safe Args에서 전역 작업과 연결된 Directions 클래스를 가져오지 못하는 문제가 해결되었습니다. (b/123307342)
버전 1.0.0-alpha10
2019년 1월 23일
알려진 문제
- Safe Args에서 전역 작업과 연결된 Directions 클래스를 가져오지 못합니다. (b/123307342)
이 릴리스에는 획기적인 API 변경사항이 있습니다. 아래의 브레이킹 체인지 섹션을 참고하세요.
새로운 기능
- 이제 Kotlin 사용자는
by navArgs()
속성 위임을 사용하여Activity
또는Fragment
의 Safe Args 생성NavArgs
클래스 참조를 느리게 가져올 수 있습니다. (b/122603367) - 이제 Safe Args에서
androidx.navigation.safeargs.kotlin
플러그인을 적용하여 Kotlin 코드를 생성할 수 있습니다. Kotlin 코드는 Kotlin 전용 모듈을 위해 특별히 빌드되었으며 이전androidx.navigation.safeargs
플러그인을 통해 여전히 사용할 수 있는 빌더 패턴 위에 기본 인수 및 불변 클래스를 사용합니다. (b/110263087)
동작 변경사항
- 일치하는 딥 링크가 이제 가장 일치하는 인수가 있는 딥 링크로 편중됩니다. (b/118393029)
NavController
에서setGraph()
를 호출하면 이제 백 스택이 재설정됩니다. (b/111450672)- 알 수 없는 딥 링크가 더 이상
IllegalStateException
을 유발하지 않고 무시되도록 하여 중첩되었거나 여러 개의NavHostFragment
와 관련된 문제를 해결했습니다. (b/121340440)
브레이킹 체인지
- Activity에 열기 애니메이션을 적용하는
NavOptions.applyPopAnimationsToPendingTransition()
메서드를ActivityNavigator
로 이동했습니다. (b/122413117) - Safe Args는 이제 인수가 없는 작업의 동일한 클래스를 복제하지 않습니다. 생성된 NavDirections 클래스에서 인수가 없는 메서드의 반환 유형은 이제
NavDirections
입니다. (b/123233147) - Safe Args 생성 Directions 클래스에 이제 공개 생성자가 없습니다. 생성된 정적 메서드로만 상호작용해야 합니다. (b/123031660)
- 이제 Safe Args 생성
NavDirections
클래스에 공개 생성자가 없으므로 생성된 Directions 클래스의 정적 메서드를 통해서만 생성해야 합니다. (b/122963206) NavDirections
의getArguments()
에서 반환된Bundle
이 이제@Nullable
이 아니라@NonNull
로 표시됩니다. (b/123243957)
버그 수정
- 이제
NavDeepLinkBuilder
에서 고유성을 확인하기 위해 전달한 인수를 사용하여 동일한 대상에 연결된 여러 개의 동시PendingIntent
를 올바르게 처리합니다. (b/120042732) - 중첩된
NavHostFragment
또는 백 스택이 있는 기타 하위 Fragment를 사용할 때 이제NavController
에서popBackStack()
작업을 올바르게 처리합니다. (b/122770335) - 이제
NavigationUI
에서 위로 버튼의 콘텐츠 설명을 올바르게 설정합니다. (b/120395362) - Safe Args 생성 Directions 클래스에서 이제 대상의 작업과 동일한 ID를 사용하는 전역 작업을 올바르게 처리합니다. (b/122962504)
- 이제 Safe Args 생성
NavDirections
클래스에는equals()
가 참을 반환할 때 동일한hashCode()
값이 올바르게 있습니다. (b/123043662) NavHostFragment
의FragmentManager
에서 맞춤FragmentTransactions
를 시도할 때FragmentNavigator
에서 발생하는 오류 메시지가 개선되었습니다. 항상getChildFragmentManager()
를 사용해야 합니다. (b/112927148)
버전 1.0.0-alpha09
2018년 12월 18일
이 릴리스에는 획기적인 API 변경사항이 있습니다. 아래의 브레이킹 체인지 섹션을 참고하세요.
android.arch.navigation:navigation-testing
아티팩트의 개발을 계속하지 않기로 결정했습니다. NavController
의 내부 테스트에는 도움이 되는 것으로 입증되었지만, navigate()
가 올바르게 호출되고 있는지 확인하기 위해 모의 NavController
인스턴스를 만드는 것과 같은 대체 테스트 전략을 사용할 것을 권장합니다. 이 방법은 AndroidDevSummit 2018의 단일 활동 소개에서 자세히 논의되었으며 Google에서는 Navigation을 통한 테스트와 관련된 추가 문서를 제작하고 있습니다.
새로운 기능
menuCategory="secondary"
가 포함된MenuItem
이NavigationUI
메서드와 함께 사용될 때 더 이상 백 스택을 표시하지 않습니다. (b/120104424)- 이제
AppBarConfiguration
을 사용하여navController.navigateUp()
에서false
를 반환할 때 호출되는 대체OnNavigateUpListener
인스턴스를 설정할 수 있습니다. b/79993862 b/120690961
브레이킹 체인지
argType="reference"
인<argument>
를 사용할 때 Navigation에서 더 이상 참조를 파싱하지 않는 대신 원시 리소스 ID 자체를 제공합니다. b/111736515onNavDestinationSelected()
가 이제 기본적으로 탐색 그래프의 시작 대상으로 돌아가서setup
메서드와 일치하도록 만듭니다.MenuItem
에menuCategory="secondary"
를 추가하여 백 스택이 표시되지 않도록 합니다. aosp/852869- 생성된
Args
클래스의fromBundle()
메서드가 이제 null이 허용되는Bundle
대신 null이 아닌Bundle
을 사용합니다. aosp/845616
버그 수정
- 이제 인수가 항상 문자열로 파싱되지 않고 딥 링크에서 올바른
argType
으로 파싱됩니다. b/110273284 - Navigation에서 이제 공개 리소스를 올바르게 내보냅니다. b/121059552
- 이제 Safe Args가 Android Gradle 플러그인 3.4 Canary 4 이상과 호환됩니다. (b/119662045)
버전 1.0.0-alpha08
2018년 12월 6일
이 릴리스에는 획기적인 API 변경사항이 있습니다. 아래의 브레이킹 체인지 섹션을 참고하세요.
새로운 기능
- 이제
NavigationUI
메서드와 함께 사용하면 대상 라벨이android:label
의{argName}
인스턴스를 올바른 인수로 자동 대체합니다. b/80267266 - Navigation에서 이제 지원 라이브러리 28.0.0을 사용합니다. b/120293333
브레이킹 체인지
OnNavigatedListener
에서OnDestinationChangedListener
로 이름이 변경되었습니다. b/118670572OnDestinationChangedListener
에서 이제 인수의Bundle
도 전달합니다. aosp/837142app:clearTask
,app:launchDocument
속성 및 관련 메서드가 삭제되었습니다. 그래프의 루트와 함께app:popUpTo
를 사용하여 백 스택의 모든 대상을 삭제합니다. b/119628354ActivityNavigator.Extras
가 이제Builder
패턴을 사용하며 임의의Intent.FLAG_ACTIVITY_
플래그를 설정하는 기능을 추가합니다. aosp/828140NavController.onHandleDeepLink
에서handleDeepLink
로 이름이 변경되었습니다. aosp/836063NavOptions
,NavInflater
,NavDeepLinkBuilder
,AppBarConfiguration
과 같이 서브클래스 목적이 아닌 여러 클래스와 메서드가final
로 설정되었습니다. aosp/835681- 지원 중단된
NavHostFragment.setGraph()
메서드가 삭제되었습니다. aosp/835684 - 지원 중단된
NavigationUI.navigateUp(DrawerLayout, NavController)
메서드가 삭제되었습니다. aosp/835684 - Fragment 생성이
FragmentNavigator
로 이동하여 더욱 간편하게FragmentFactory
에 Fragment 생성을 위임할 수 있습니다. b/119054429 NavGraphNavigator
생성자가 더 이상Context
를 가져오지 않습니다. aosp/835340- NavigatorProvider는 이제 인터페이스가 아닌 클래스입니다.
getNavigatorProvider()
에서 반환되는NavigatorProvider
의 기능은 변경되지 않았습니다. aosp/830660 NavDestination.navigate()
를 삭제했습니다. 대신Navigator
에서navigate()
를 호출하세요. (aosp/830663)Navigator
를 대규모로 리팩터링하고OnNavigatorNavigatedListener
의 필요성을 제거했으며 대신navigate
가 이전에 이동했던NavDestination
을 반환합니다.Navigator
인스턴스에서 더 이상 열기 이벤트를NavController
에 전송할 수 없습니다.OnBackPressedCallback
을 사용하여 뒤로 버튼 누르기를 가로채고navController.popBackStack()
을 호출하는 방법을 고려해 보세요. (aosp/833716)
버그 수정
- 이제 대상이
<navigation>
요소인 경우popUpTo
가 일관되게 작동합니다. (b/116831650) - 중첩된 그래프를 사용할 때
IllegalArgumentException
을 유발하는 여러 버그를 수정했습니다. (b/118713731, b/113611083, b/113346925, b/113305559) - 이제
<activity>
대상의dataPattern
속성이toString()
을 호출하여 문자열이 아닌 인수를 채웁니다. (b/120161365)
Safe Args
- Safe Args는 Enum 값을 포함하여 직렬화 가능한 객체를 지원합니다. Enum 유형은 클래스 이름 없이 enum 리터럴을 사용하여 기본값을 설정할 수 있습니다(예:
app:defaultValue="READ"
). (b/111316353) - Safe Args는 지원되는 모든 유형의 배열을 지원합니다. b/111487504
- Safe Args는 이제 리소스 디렉터리의 하위 폴더를 무시합니다. b/117893516
- Safe Args는 적절한 위치에
@Override
주석을 추가합니다. (b/117145301)
버전 1.0.0-alpha07
2018년 10월 29일
새로운 기능
- 새로운 AppBarConfiguration 클래스를 사용하여 최상위 대상으로 고려할 대상을 맞춤설정할 수 있습니다. 자세한 내용은 업데이트된 문서를 참고하세요. b/117333663
- 이제 그래프의 시작 대상으로 인수를 전달할 수 있습니다. b/110300470
- 이제 딥 링크에서 마침표, 하이픈, 더하기 기호가 있는 맞춤 체계를 지원합니다. b/112806402
브레이킹 체인지
navigation-testing-ktx
모듈이navigation-testing artifact
에 포함되었으며 더 이상 게시되지 않습니다.navigation-testing
아티팩트가 이제 Kotlin 표준 라이브러리 종속 항목을 갖습니다. API가 Kotlin 규칙과 더욱 일관성 있게 변경되었지만 계속해서 자바로 작성된 테스트에 사용할 수 있습니다.- 메타데이터 매니페스트 등록 탐색 그래프가 더 이상 지원되지 않습니다. b/118355937
- 작업이 더 이상 <activity> 대상에 연결되지 않습니다. (aosp/785539)
버그 수정
- 이제 딥 링크가 쿼리 매개변수를 올바르게 파싱합니다. b/110057514
- 이제 Activity 대상이 모든 시작 및 종료 애니메이션을 올바르게 적용합니다. b/117145284
- 맞춤 Navigator를 사용할 때 구성을 변경한 이후에 발생하는 비정상 종료 문제가 수정되었습니다. b/110763345
Safe Args
- Safe args가 이제 Android Gradle 플러그인 3.2.1에 고정된 종속 항목을 갖습니다. b/113167627
- 이제 내부 클래스의 Direction을 생성할 수 있습니다. b/117407555
- <include> 그래프에 Direction을 생성하는 문제가 수정되었습니다. (b/116542123)
버전 1.0.0-alpha06
2018년 9월 20일
새로운 기능
- 이제 Fragment 및 Activity 대상의 공유된 요소 전환이 지원됩니다. b/79665225. 자세한 내용은 탐색 아키텍처 구성요소를 통한 탐색 구현을 참고하세요.
NavigationView
의 항목을 선택하면 포함된 모든 하단 시트가 닫힙니다. b/112158843
API 변경사항
- 브레이킹 체인지: Navigator
navigate()
메서드가 이제Navigator.Extras
매개변수를 취합니다. - NavController의
getGraph()
메서드가 이제NonNull
입니다. b/112243286
버그 수정
- 개별 대상의 뷰와 함께 사용되는 경우 더 이상
NavigationUI.setupWithNavController()
에서 뷰를 누출하지 않습니다. b/111961977 - Navigator
onSaveState()
가 이제 한 번만 호출됩니다. b/112627079
Safe Args
- 탐색 대상 Direction 클래스에 상위 Direction 클래스가 있는 경우 이를 확장합니다. (b/79871405)
- 이제 Directions 및 Args 클래스가 유용한
toString()
을 구현합니다. (b/111843389)
버전 1.0.0-alpha05
2018년 8월 10일
버그 수정
- 잘못된 백 스택 동작을 일으키는 버그가 수정되었습니다. b/111907708
- Generated Args 클래스의
equals()
에 있는 버그가 수정되었습니다. b/111450897 - Safe Args의 빌드 실패가 해결되었습니다. b/109409713
- 리소스 식별자에서 자바 이름으로의 변환이 수정되었습니다. b/111602491
- Safe Args 플러그인의 null 허용 여부 관련 오류 메시지가 수정되었습니다.
- 누락된 null 허용 여부 주석이 추가되었습니다.
버전 1.0.0-alpha04
2018년 7월 19일
Navigation 1.0.0-alpha04
및 관련 Safe Args Gradle 플러그인에는 다양한 API 변경사항, 동작 변경사항, 버그 수정이 포함되어 있습니다.
API/동작 변경사항
- NavHostFragment는 항상 현재 Fragment를 기본 탐색 프래그먼트로 설정하여, 하위 프래그먼트 관리자가 열린 후에야 외부 NavController가 열리도록 합니다. (b/111345778)
Safe Args
- 브레이킹 체인지: ConstraintLayout 2.0.0-alpha1과 같은 다른 라이브러리와의 충돌을 피하기 위해
app:type
이app:argType
으로 변경되었습니다. (b/111110548) - 이제 Safe Args의 오류 메시지를 클릭할 수 있습니다. (b/111534438)
- 이제 Args 클래스에서
NonNull
속성이 실제로 null이 아님을 확인합니다. (b/111451769) - NavDirections 및 Args에서 생성한 클래스에
NonNull
주석이 추가되었습니다. (b/111455455 및 b/111455456)
버그 수정
- fragment 대상으로 딥 링크 후 발생하는 시스템 뒤로 버튼의 문제가 해결되었습니다. (b/111515685)
버전 1.0.0-alpha03
2018년 7월 12일
Navigation 1.0.0-alpha03
및 관련 Safe Args Gradle 플러그인에는 다양한 API 변경사항, 동작 변경사항, 버그 수정이 포함되어 있습니다.
API/동작 변경사항
- 툴바에 NavigationUI.setupWithNavController 메서드가 추가되었습니다. (b/109868820)
- CollapsingToolbarLayout에 NavigationUI.setupWithNavController 메서드가 추가되었습니다. (b/110887183)
- 이제 popBackStack()은 백 스택이 비어 있거나 지정된 대상 ID가 백 스택에 없으면 false를 반환합니다. (b/110893637)
- 이제 FragmentManager가 상태를 저장하고 나면 FragmentNavigator가 탐색 작업을 무시하여 'onSaveInstanceState 후 이 작업을 실행할 수 없음' 예외가 방지됩니다. (b/110987825)
Safe Args
- 브레이킹 체인지: 작업과 인수 이름에 포함된 영숫자 이외의 문자는 각각의 NavDirections 메서드 이름에서 카멜식 대소문자 표기로 대체됩니다.
- 예를 들어
DemoController.index
는setDemoControllerIndex
가 됩니다. (b/79995048) - 예를 들어
action_show_settings
는actionShowSettings
가 됩니다. (b/79642240)
- 예를 들어
- 브레이킹 체인지: 이제 인수는 기본적으로 null이 아닌 것으로 간주됩니다. 문자열과 Parcelable 인수에 null 값을 허용하려면
app:nullable="true"
를 추가합니다. (b/79642307) - 이제
app:type="long"
을 defaultValues와 함께 '123L' 형태로 사용할 수 있습니다. (b/79563966) - Parcelable 인수가 이제
app:type
의 정규화된 클래스 이름을 사용하여 지원됩니다. 지원되는 유일한 기본값은"@null"
입니다. (b/79563966) - Args 클래스에서 이제
equals()
및hashCode()
를 구현합니다. (b/79642246) - 이제 라이브러리 프로젝트에 Safe Args 플러그인을 적용할 수 있습니다. (b/80036553)
- 이제 기능 프로젝트에 Safe Args 플러그인을 적용할 수 있습니다. (b/110011752)
버그 수정
- Fragment 수명 주기 메서드가 수행되는 동안 탐색할 때 발생하는 문제가 해결되었습니다. b/109916080
- 중첩된 그래프를 여러 번 탐색할 때 발생하는 문제가 해결되었습니다. (b/110178671)
- 그래프에서 첫 번째 대상으로
setPopUpTo
를 사용할 때 발생하는 문제가 해결되었습니다. (b/109909461) - 모든
app:defaultValue
값이 문자열로 전달되는 문제를 해결했습니다. (b/110710788) - Android Gradle 플러그인 3.2 베타 01에 번들로 제공되는 aapt2에서 이제 Navigation XML 파일의 모든
android:name
속성에 Keep 규칙을 추가합니다. (b/79874119) - 기본 FragmentNavigator를 대체할 때 발생하는 메모리 누수가 해결되었습니다. (b/110900142)
버전 1.0.0-alpha02
2018년 6월 7일
동작 변경사항
FragmentNavigator
에서 이제setReorderingAllowed(true)
를 사용합니다. (b/109826220)탐색이 이제 딥 링크 URL에서 파싱된 URLDecodes 인수를 디코딩합니다. (b/79982454)
버그 수정
Fragment 수명 주기 메서드에서 탐색을 호출할 때 발생하는
IllegalStateException
을 수정했습니다. (b/79632233)애니메이션 사용 시 깜박이는 문제를 해결하기 위해 탐색에서 이제 지원 라이브러리 27.1.1을 사용합니다. (b/80160903)
하위 fragment로 defaultNavHost="true"를 사용할 때 발생하는
IllegalArgumentException
을 수정했습니다. (b/79656847)NavDeepLinkBuilder를 사용할 때 발생하는
StackOverflowError
를 해결했습니다. (b/109653065)중첩된 그래프로 다시 이동할 때 발생하는
IllegalArgumentException
을 수정했습니다. (b/80453447)launchSingleTop
사용 시 Fragment가 중복되는 문제를 해결했습니다. (b/79407969)탐색에서 이제 중첩된 그래프의 올바른 합성 백 스택을 빌드합니다. (b/79734195)
MenuItem
으로 중첩된 그래프를 사용할 때 NavigationUI는 올바른 항목을 강조표시합니다. (b/109675998)
API 변경사항
NavOptions
에 포함된 작업 및 관련 API의clearTask
속성 지원을 중단했습니다. (b/80338878)NavOptions
에 포함된 작업 및 관련 API의launchDocument
속성을 지원 중단했습니다. (b/109806636)
버전 1.0.0-alpha01
2018년 5월 8일
탐색은 인앱 탐색 빌드를 위한 프레임워크를 제공합니다. 최초 출시는 1.0.0-alpha01
입니다.