탐색

Navigation은 Android 애플리케이션 내에서 '대상' 사이를 탐색하는 프레임워크로, 대상이 Fragment, Activity 또는 기타 구성요소로 구현되었는지에 관계없이 일관된 API를 제공합니다.
최근 업데이트 안정화 버전 출시 후보 버전 베타 버전 알파 버전
2024년 12월 11일 2.8.5 - - 2.9.0-alpha04

종속 항목 선언

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.4"

  // 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.4"

  // 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

프로젝트에 Safe Args를 추가하려면 최상위 build.gradle 파일에 다음의 classpath를 포함합니다.

Groovy

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.8.4"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.8.4"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
    }
}

또한 사용 가능한 두 가지 플러그인 중 하나를 적용해야 합니다.

자바 모듈 또는 자바와 Kotlin 혼합 모듈에 적합한 자바 언어 코드를 생성하려면 앱 또는 모듈의 build.gradle 파일에 다음 행을 추가합니다.

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

또는 Kotlin 전용 모듈에 적합한 Kotlin 코드를 생성하려면 다음을 추가하세요.

Groovy

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

AndroidX로 이전에 따라 gradle.properties 파일android.useAndroidX=true가 있어야 합니다.

Kotlin 확장 프로그램 사용에 관한 정보는 ktx 문서를 참고하세요.

종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.

의견

제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.

새로운 문제 제출하기

자세한 내용은 Issue Tracker 문서를 참고하세요.

버전 2.9

버전 2.9.0-alpha04

2024년 12월 11일

androidx.navigation:navigation-*:2.9.0-alpha04이 출시되었습니다. 버전 2.9.0-alpha04에는 이러한 커밋이 포함되어 있습니다.

새로운 기능

아래 표에는 재형성된 API와 KClass API가 나와 있습니다.

재구성됨 KClass
composable<TestClass> { } composable(TestClass::class) { }
navigation<NestedGraph>(startDestination = TestClass::class) navigation(route = NestedGraph::class, startDestination = TestClass::class)
dialog<TestClass> {} dialog(TestClass::class) {}
navDeepLink<TestClass>(baseUri) navDeepLink(TestClass::class, baseUri)
NavDeepLink.Builder.setUriPattern<TestClass>(baseUri) NavDeepLink.Builder.setUriPattern(TestClass::class, baseUri)
NavDestinationBuilder.deepLink<TestDeepLink>(baseUri) { } NavDestinationBuilder.deepLink(TestDeepLink::class, baseUri) { }
navController.getBackStackEntry<TestClass>() navController.getBackStackEntry(TestClass::class)
navController.popBackStack<TestClass>(true) navController.popBackStack(TestClass::class, true)
navController.clearBackStack<TestClass>() navController.clearBackStack(TestClass::class)
NavOptions.setPopUpTo<TestClass>() NavOptions.setPopUpTo(TestClass::class)
navOptions { popUpTo<TestClass> {...} } navOptions { popUpTo(TestClass::class) {...} }
NavGraph.setStartDestination<TestClass>() NavGraph.setStartDestination(TestClass::class)
NavGraph.findNode<TestClass>() NavGraph.findNode(TestClass::class)
backStackEntry.toRoute<TestClass>() backStackEntry.toRoute(TestClass::class)
savedStateHandle.toRoute<TestClass>() savedStateHandle.toRoute(TestClass::class)

API 변경사항

  • 유형 안전성을 위한 Kotlin별 NavGraph.setStartDestination 오버로드는 Java 소스에서 숨겨집니다. (Ic640c, b/364634035)

버그 수정

  • Navigation 2.8.5부터: 백 스택이 1개 항목으로 팝되고 동일한 프레임에서 시스템 뒤로가 트리거되면 NavHostPredictiveBackHandler 내부에서 예외를 발생시킬 수 있는 문제가 수정되었습니다. (I1a429, b/375343407)
  • Navigation 2.8.5부터: 그래프의 startDestination를 업데이트할 때 NavDestination NullPointerException가 수정되었습니다. (I99421, b/361560785)

버전 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 모듈에 대한 새로운 린트 검사가 추가되었습니다. 이 검사는 모든 NavGraphBuilderNavDeepLinkBuilder 확장 함수에 적용됩니다. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • Navigation 2.8.3: @Keep로 올바르게 주석 처리되지 않은 Enum 인수가 있는 유형 안전 라우트를 식별하는 데 도움이 되는 navigation-common, navigation-runtime, navigation-compose 모듈의 새로운 린트 검사가 추가되었습니다. 이 검사는 모든 NavGraphBuilderNavDeepLinkBuilder 확장 함수에 적용됩니다. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)

동작 변경사항

  • 이전에 DESTROYEDNavController를 사용하려고 하면 이제 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.5

2024년 12월 11일

androidx.navigation:navigation-*:2.8.5이 출시되었습니다. 버전 2.8.5에는 이 커밋이 포함되어 있습니다.

버그 수정

  • 백 스택이 1개 항목으로 팝되고 동일한 프레임에서 시스템 뒤로가 트리거되면 NavHostPredictiveBackHandler 내부에서 예외를 발생시킬 수 있는 문제를 수정했습니다. (I1a429, b/375343407)
  • 그래프의 startDestination를 업데이트할 때 NavDestination NullPointerException가 수정되었습니다. (I99421, b/361560785)
  • Navigation Compose를 사용하고 현재 애니메이션이 종료되는 동일한 프레임에서 navigate를 호출할 때 예기치 않은 크기 조정 애니메이션이 발생하는 문제를 수정했습니다. (I26cb1, b/353294030)
  • NavBackStackEntry에 연결된 LifecycleObserver가 포함된 활동 또는 프래그먼트와 같은 호스트 LifecycleOwner의 수명 주기 상태가 변경될 때 뒤 스택 변경을 트리거할 때 발생할 수 있는 ConcurrentModificationException를 수정했습니다. (Ia9494)

버전 2.8.4

2024년 11월 13일

androidx.navigation:navigation-*:2.8.4이 출시되었습니다. 버전 2.8.4에는 이 커밋이 포함되어 있습니다.

새로운 기능

버그 수정

버전 2.8.3

2024년 10월 16일

androidx.navigation:navigation-*:2.8.3이 출시되었습니다. 버전 2.8.3에는 이 커밋이 포함되어 있습니다.

새로운 기능

  • @Serializable로 올바르게 주석 처리되지 않은 유형 안전 라우트를 식별하는 데 도움이 되는 navigation-common, navigation-runtime, navigation-compose 모듈의 새로운 린트 검사를 추가했습니다. 이 검사는 모든 NavGraphBuilderNavDeepLinkBuilder 확장 함수에 적용됩니다. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • @Keep로 올바르게 주석 처리되지 않은 Enum 인수가 있는 유형 안전 라우트를 식별하는 데 도움이 되는 navigation-common, navigation-runtime, navigation-compose 모듈의 새로운 린트 검사를 추가했습니다. 이 검사는 모든 NavGraphBuilderNavDeepLinkBuilder 확장 함수에 적용됩니다. (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)

버그 수정

  • 이제 NavGraphstartDestination에 전달된 경로에 모든 필수 인수의 값이 포함되어야 합니다. 여기에는 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가 필요하지 않습니다. EnumSerialName는 기본 정규화된 이름이어야 합니다. (I66d22, b/346475493)
  • 안전한 인수의 탐색에 Int?,Long?, Float?, Boolean?, Enum<*>?를 비롯한 null 허용 인수 유형에 대한 기본 지원이 추가되었습니다. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237)
  • 이제 NavGraph에 전달된 startDestination 경로가 startDestination.route와 정확히 일치하는 경우 NavGraphstartDestination는 기본 인수 값을 사용합니다. (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)
  • 뒤로 탐색 예측 동작을 취소한 후 사용자가 돌아가는 NavBackStackEntryRESUMED 수명 주기 상태로 다시 돌아가지 않는 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.serializeAsValueserializeAsValues에 관한 문서를 추가했습니다. (Ida6bd, b/344943214)
  • null CollectionNavType 인수로 toRoute<T>를 호출할 때 발생하는 비정상 종료 문제를 수정했습니다. null CollectionNavType로 이동하면 출력 인수가 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 직렬화를 사용하여 유형 안전 객체와 데이터 클래스를 통해 탐색 그래프에서 대상을 정의할 수 있도록 합니다.

  // 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 변경사항

버그 수정

  • 이제 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 경로에서 NavGraphstartDestination에 인수를 직접 전달할 수 있습니다. 이는 중첩된 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)

종속 항목 업데이트

버전 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가 활동이 중지되고 재개된 후에도 시스템 뒤로 호출을 올바르게 가로챕니다. (Icb6de, b/279118447)

종속 항목 업데이트

  • 이제 Navigation이 1.1.0에서 Compose 1.5.0에 종속됩니다.

버전 2.7.0-rc01

2023년 7월 26일

androidx.navigation:navigation-*:2.7.0-rc01이 출시되었습니다. 버전 2.7.0-rc01에 포함된 커밋을 확인하세요.

버그 수정

  • NavHost의 일부로 생성된 EnterTransitionExitTransition 람다가 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의 NavHostActivitySTOPPEDRESUMED된 후에도 시스템 뒤로 호출을 올바르게 가로챕니다. (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 이후 탐색의 중요 변경사항

  • NavBackStackEntryargumentsOnDestinationChangedListener에 전달된 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 이후 프래그먼트가 있는 탐색의 중요 변경사항

  • NavHostFragment가 더 이상 시스템 뒤로 버튼 자체를 가로채지 않습니다. 이렇게 하면 기본 FragmentManager가 시스템 백을 처리할 수 있습니다. 이렇게 하면 Fragment 1.7.0-alpha01 이상이 Android U 기기에서 인앱 뒤로 탐색 예측 애니메이션을 제공할 수 있습니다.
  • Navigation with Fragments를 사용할 때 FragmentManager의 백 스택에 프래그먼트를 추가하는 FragmentTransaction를 수동으로 실행하려고 하면 이제 IllegalArgumentException이 발생합니다. 항상 navigate() API를 통해 프래그먼트를 추가해야 합니다.
  • 탐색 XML 파일의 활동 요소에서 app:dataapp:dataPattern 속성의 자리표시자로 정확한 문자열 ${applicationId}를 사용하면 자리표시자는 인플레이션 시 자동으로 컨텍스트의 packageName으로 채워집니다.
  • 이제 FragmentNavigatorNavBackStackEntries를 탐색하고 표시할 때 전환 API를 사용합니다. 즉, NavBackStackEntry Lifecycle은 이제 진입 및 종료 프래그먼트 특수 효과가 완료될 때까지 기다린 후에 최종 Lifecycle.State를 이동합니다.
  • 이제 DialogFragmentNavigatorNavBackStackEntries를 탐색하고 표시할 때 전환 API를 사용합니다. 즉, NavBackStackEntry LifecycleDialogFragment LifecycleDESTROYED로 이동할 때까지 기다린 후에 자신이 DESTROYED로 이동합니다.
  • 이제 NavHostFragment를 사용하면 onCreate() 후에만이 아니라 NavHostFragmentFragmentManager에 연결되는 즉시 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을 통해 자체 코드에 동일한 기능을 사용할 수 있습니다.
  • 이제 상단 앱 바 사용을 위한 NavigationUIsetupWithNavController 통합은 자동 생성된 리소스 정수를 출력하지 않고 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() 후에만이 아니라 NavHostFragmentFragmentManager에 연결되는 즉시 NavController를 검색할 수 있습니다. (Ic6382, b/220186282)

버그 수정

  • null이 아닌 인수가 포함된 중첩 그래프를 팝할 때 발생하는 NullPointerException 문제를 수정했습니다. (6b3581, b/249988437)
  • popUpTo로 이동한 후 시스템 뒤로를 사용하면 NavController의 상태가 올바른 항목으로 팝됩니다. (I3a8ec, b/270447657)
  • 이제 FragmentNavigator는 시스템 뒤로 또는 popBackStack()를 통해 백 스택이 팝될 때, 그리고 트랜잭션이 프래그먼트에 효과를 사용하는지 여부에 관계없이 항목을 올바르게 팝합니다. (I81bdf)
  • 탐색을 사용하지 않고 FragmentNavigatorFragmentManager에 프래그먼트를 추가해도 더 이상 비정상 종료가 발생하지 않습니다. (b17204, b/274167493)

종속 항목 업데이트

버전 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 LifecycleDESTROYED를 가져오지 않습니다 . (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)
  • 이제 FragmentNavigatorNavBackStackEntries를 탐색하고 표시할 때 전환 API를 사용합니다. 즉, NavBackStackEntry Lifecycle은 이제 진입 및 종료 프래그먼트 특수 효과가 완료될 때까지 기다린 후에 최종 Lifecycle.State를 이동합니다. (I3cb19, b/238686802)
  • 이제 DialogFragmentNavigatorNavBackStackEntries를 탐색하고 표시할 때 전환 API를 사용합니다. 즉, NavBackStackEntry LifecycleDialogFragment LifecycleDESTROYED로 이동할 때까지 기다린 후에 자신이 DESTROYED로 이동합니다. (I53ee5, b/261213893)

API 변경사항

  • 이제 NavigatorNavBackStackEntries를 중간 Lifecycle.State로 이동할 수 있도록 NavigatorStateprepareForTransition API를 제공합니다. (I42c21, b/238686802)
  • 이제 backstack 속성을 통해 NavGraphNavigator 또는 ComposeNavigator에 연결된 백 스택에 액세스할 수 있습니다. ComposeNavigatoronTransitionComplete() 콜백을 노출하여 탐색 또는 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)

종속 항목 업데이트

버전 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에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 상단 앱 바 사용을 위한 NavigationUIsetupWithNavController 통합은 자동 생성된 리소스 정수를 출력하지 않고 android:label에 있는 ReferenceType 인수의 R.string 값을 문자열 값으로 파싱합니다. (I5f803, b/167959935)
  • 이제 NavDeepLink가 배열의 기본값을 지원합니다. 따라서 인수의 배열 유형에 매핑되는 반복 쿼리 매개변수를 지원할 수 있습니다. 이제 NavType에는 파싱된 두 값을 결합하도록 재정의할 수 있는 기본 메서드도 포함됩니다. (Id68c3, b/209977108)
  • 탐색 XML 파일의 활동 요소에서 app:dataapp: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의 argumentsOnDestinationChangedListener에 전달된 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)

종속 항목 업데이트

버전 2.5.1

2022년 7월 27일

androidx.navigation:navigation-*:2.5.1이 출시되었습니다. 버전 2.5.1에 포함된 커밋을 확인하세요.

버그 수정

  • Bundle에 저장된 맞춤 인수 유형을 사용할 때 Navigation Safe Args가 더 이상 생성된 클래스에서 지원 중단 경고를 유발하지 않습니다. (Id86ed, b/237725966)

종속 항목 업데이트

버전 2.5.0

2022년 6월 29일

androidx.navigation:navigation-*:2.5.0이 출시되었습니다. 버전 2.5.0에 포함된 커밋을 확인하세요.

2.4.0 이후 중요 변경사항

  • CreationExtras 통합 - 이제 NavigationLifecycle 2.5.0CreationExtras를 통해 스테이트리스(Stateless) ViewModelProvider.Factory를 제공할 수 있습니다.

Navigation SafeArgs

  • Navigation Safe Args7.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)

버그 수정

  • 이제 NavHostDialogHost의 컴포저블 범위가 올바른 순서로 삭제됩니다. 즉, 내부 컴포저블은 외부 컴포저블보다 먼저 삭제됩니다. (I157e6)
  • 이제 Navigation SafeArgs는 ArgumentsGenerationTaskPathSensitivity.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() 호출을 실행할 때 DialogNavigatorpopWithTransition을 사용합니다. 이로써 시스템 뒤로를 사용하거나 대화상자 외부를 탭하여 대화상자를 닫을 때 IllegalStateException을 일으키는 dialog 대상 내 ViewModel 사용으로 발생하는 경합 상태가 해결됩니다. (Id7376, b/226552301)

종속 항목 업데이트

  • 탐색이 이제 Lifecycle2.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 변경사항

버그 수정

  • 이제 NavHost가 NavControllervisibleEntries를 사용하여 조합할 항목을 결정합니다. 즉, 중첩된 NavHost를 사용할 때 이제 내부 NavHost가 적절하게 애니메이션 처리됩니다. (I4ba2b, b/225394514)
  • 이제 NavController에서 제공하는 visibleEntries StateFlow가 현재 수명 주기 상태가 아닌 항목 최대 수명 주기 상태를 기반으로 합니다. 즉, navController의 호스트 수명 주기가 STARTED보다 낮아져도 표시되는 전체 목록이 동일하게 유지됩니다. (I9e2a8, b/225394514)
  • 이제 SavedStateViewFactorySavedStateRegistryOwner로 초기화된 경우에도 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 변경사항

  • 이제 CreationExtrasby navGraphViewModels에 전달하여 ViewModel을 만들 수 있습니다. (I29217, b/217618359)

버그 수정

  • NavDeepLinks는 이제 경로/딥 링크 URI에 삽입되어 인코딩된 새 행 문자를 올바르게 지원합니다. (I513d1, b/217815060)
  • 이제 CreationExtrasNavBackStackEntries와 함께 사용되어 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을 사용할 때 NavHostFragmentOnBackPressedDispatcher를 올바르게 설정합니다. (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에 포함된 커밋을 확인하세요.

새로운 기능

버그 수정

  • 프래그먼트의 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에 포함된 커밋을 확인하세요.

버그 수정

버전 2.4.1

버전 2.4.1

2022년 2월 9일

androidx.navigation:navigation-*:2.4.1이 출시되었습니다. 버전 2.4.1에 포함된 커밋을 확인하세요.

버그 수정

  • 이제 중첩된 그래프와 함께 viewbinding을 사용할 때 NavHostFragmentOnBackPressedDispatcher를 올바르게 설정합니다. (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를 구현으로 사용하는 세부정보 창을 관리합니다.
  • NavControllercurrentBackStackEntryAsFlow() 메서드는 현재 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 메서드가 대신 Material 1.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을 통해 composabledialog 대상을 사용하는 탐색 그래프를 구성할 수 있습니다. 또한, Accompanist Navigation Material의 Navigator와 같은 선택적 Navigator를 지원할 수 있습니다.
  • 대상 간 크로스 페이딩을 의무적으로 지원합니다. 실험용 Compose API를 통해 들어가기와 나가기 전환을 제어하는 데 Accompanist Navigation Animation을 사용할 수 있습니다.
  • 구성 가능한 각 대상으로 Lifecycle의 범위를 지정. 각 대상은 들어가기 전환이 종료될 때만 RESUMED 상태에 도달하고 나가기 전환이 시작되면 즉시 STARTED가 됩니다. 따라서, LifecycleRESUMED일 때 navigate 호출을 트리거하는 방식으로만 모든 IllegalStateException과 멀티 터치 문제를 피할 수 있습니다.
  • 대상 수준에서 Lifecycle ViewModel Compose 2.4.0viewModel() API 또는 Hilt Navigation Compose 1.0.0hiltViewModel()을 통해 ViewModel의 범위를 지정. 이 ViewModel은 구성 변경사항을 유지하는 범위를 제공하고 백 스택(컴포저블 콘텐츠가 달리 배치된 경우)과 영구 폐기를 나타내는 ViewModel onCleared()의 신호에 있으며 NavBackStackEntry와 연결된 상태를 정리합니다.
  • 대상 수준에서 rememberSaveable 상태 범위를 지정. 대상으로 돌아갈 때 모든 컴포저블 상태가 자동으로 저장되고 복원됩니다.
  • 프로세스가 중단되어 재생성된 후 NavController의 상태와 대상의 상태를 저장하고 복원할 수 있도록 완벽하게 지원합니다.
  • 시스템 뒤로 버튼을 사용하여 자동으로 통합
  • 인수 전달, 대상에 딥 링크 연결, 이전 대상에 결과 반환 지원

  • rememberNavController()currentBackStackEntryAsState()에 특정 도우미를 작성하여 호이스팅 상태를 허용하고 NavControllerNavHost(예: 하단 탐색 메뉴) 외부의 컴포저블에 연결

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:popUpToSaveStateapp: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가 업데이트되었습니다.

동작 변경사항

  • 이제 NavDeepLinkBuildercreatePendingIntent()에서 반환된 PendingIntentPendingIntent.FLAG_IMMUTABLE을 추가하는 방식으로, Android 12를 타겟팅할 때 이 API가 제대로 작동하도록 합니다.
  • 이제 Navigation은 Lifecycle 2.3.1에 종속되며 NavBackStackEntry Lifecycle을 업데이트하는 메서드인 setGraph(), popBackStack(), navigateUp()navigate()@MainThread로 표시합니다. 이로 인해 Lifecycle 2.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()하지 않았더라도 NavigationUIonNavDestinationSelected 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_widthlayout_weight 속성이 잘못 처리되거나 무시되는 AbstractListDetailFragment 문제를 수정했습니다. (f5fbf3)
  • 이제 대화상자 대상의 시각적 상태가 DialogFragmentNavigator의 상태와 동기화된 상태로 올바르게 유지됩니다. 즉, DialogFragment용 비동기 dismiss() API를 수동으로 호출하면 이제 닫힌 대화상자 위의 모든 대화상자 대상이 올바르게 삭제됩니다. 이는 popUpTopopBackStack()을 사용하여 대화상자를 닫는 경우에는 영향을 미치지 않습니다. (I77ba2)
  • 이제 AbstractAppBarOnDestinationChangedListeneronDestinationChanged()의 더 명확한 오류 메시지가 있습니다. (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)

종속 항목 업데이트

버전 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() 내에서 getBackStackEntrypreviousBackStackEntryremember()와 함께 사용하면 백 스택에 대상이 없다는 예외가 더 이상 발생하지 않습니다. (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)
  • 이제 NavHostNavBackStackEntryLifecycle.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 변경사항

  • AbstractListDetailFragmentrequireSlidingPaneLayout()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에서 딥 링크 NavBackStackEntryRESUMED 상태에 도달하지 않던 문제를 해결했습니다. (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)
  • NavGraphNavDestination이 이제 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 변경사항

  • NavigatorStateadd 함수 이름이 push로 변경되었습니다. 현재 모든 add() 호출을 push()로 변경해야 합니다. (Ie89fc, b/172112072)
  • 이제 사용자설정 Navigator 인스턴스는 NavigatorStatepushWithTransactionpopWithTransition API를 사용하여 대상을 비동기식으로 푸시하거나 표시할 수 있습니다. 참고로, 이 두 API는 포함된 Navigator에 아직 사용되지 않습니다. (Ic4d7c, b/172112072)

동작 변경사항

  • 이제 NavDeepLinkBuildercreatePendingIntent()에서 반환된 PendingIntentPendingIntent.FLAG_IMMUTABLE을 추가하는 방식으로, Android 12를 타겟팅할 때 이 API가 제대로 작동하도록 합니다. (If8c52)

버그 수정

  • 그래프에 전달된 인수가 동적으로 포함된 그래프에 올바르게 전달되지 않는 <include-dynamic>의 문제가 해결되었습니다. (I3e115)
  • @null이 기본값인 string[] 인수를 사용하여 대상으로 이동할 때 발생하는 NullPointerException이 수정되었습니다. (I1fbe8)
  • @Navigator.Name에 관한 ProGuard 규칙을 추가하여 R8 3.1 전체 모드를 사용할 때 발생하는 문제를 해결했습니다. (I2add9, b/191654433)
  • Kotlin1.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 메서드가 대신 Material 1.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에 포함된 커밋을 확인하세요.

새로운 기능

  • NavControllercurrentBackStackEntryAsFlow() 메서드는 현재 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:popUpToSaveStateapp: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> 대상에 사용되는 FragmentNavigatorDynamicFragmentNavigator가 새 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)
  • 이제 nameargument 필드와 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로 표시합니다. 이로 인해 Lifecycle 2.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)
  • nameargument 필드를 만들고 NamedNavArgument의 디스트럭처링 함수를 공개해 주신 jossiwolf님께 감사드립니다. (#174, b/181320559)
  • 관련 컴포지션 로컬에 NavBackStackEntry를 제공하는 새로운 NavBackStackEntry#provideToCompositionLocals 확장 프로그램을 도입해 주신 jossiwolf님께 감사드립니다. (#175, b/187229439)
  • 동일한 인스턴스로 반복적으로 호출해도 문제가 발생하지 않도록 NavigatorProvider#addNavigator의 동작을 개선해 주신 jossiwolf님께 감사드립니다. (#176, b/187443146)

버전 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에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 NavHostLocalSavedStateRegistryOwner 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에 포함된 커밋을 확인하세요.

종속 항목 업데이트

버전 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()에 특정 도우미를 작성하여 호이스팅 상태를 허용하고 NavControllerNavHost(예: 하단 탐색 메뉴) 외부의 컴포저블에 연결

자세한 내용은 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.comwww.example.comwww.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에 포함된 커밋을 확인하세요.

버그 수정

  • LifecycleCREATED로 이동하기 전에 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의 루트 장식 뷰도 확인합니다. 이를 통해 FragmentScenarioNavigation.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-uiDrawerLayout 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-runtimenavigation-dynamic-features-fragment 아티팩트를 사용하면 기능 모듈에 정의된 대상으로 이동하여 필요에 따라 기능 모듈의 설치를 자동으로 처리할 수 있습니다. 자세한 내용은 기능 모듈로 탐색을 참고하세요.
  • 탐색 테스트: navigation-testing 아티팩트는 TestNavHostController를 제공하며 이를 사용하면 탐색 작업 후 현재 대상을 설정하고 백 스택을 확인할 수 있습니다. 자세한 내용은 탐색 테스트를 참고하세요.
  • 결과 반환: 이제 탐색 백 스택의 각 대상에 연결된 NavBackStackEntry를 사용하여 특정 백 스택 항목에 연결되어야 하는 소량의 저장된 상태를 보관하는 데 적합한 SavedStateHandle에 액세스할 수 있습니다. 자세한 내용은 이전 대상으로 결과 반환을 참고하세요.
  • Openable에 대한 NavigationUI 지원: NavigationUI의 모든 DrawerLayout 사용은 CustomView 1.1.0에서 추가되고 DrawerLayout 1.1.0DrawerLayout에서 구현되는 더 일반적인 Openable 인터페이스로 대체되었습니다.
  • 딥 링크의 작업 및 MIME 유형 지원: 이전에 사용 가능했던 app:uri 외에 딥 링크에서 app:actionapp: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에 포함된 커밋을 확인하세요.

버그 수정

  • 프로세스 종료 후 NavBackStackEntryLifecycle이 제대로 업데이트되지 않는 문제가 수정되었습니다. (b/155218371)
  • 이제 setGraph() 호출 전에 등록된 OnDestinationChangedListener 인스턴스가 프로세스 종료 후 복원된 대상으로 올바르게 전송됩니다. (b/155218371)
  • singleTop을 사용할 때 이제 NavBackStackEntry의 인수가 올바르게 업데이트되고 업데이트된 인수는 모든 OnDestinationChangeListener 인스턴스로 전송됩니다. (b/156545508)

종속 항목 업데이트

버전 2.3.0-alpha06

2020년 4월 29일

androidx.navigation:navigation-*:2.3.0-alpha06가 출시되었습니다. 버전 2.3.0-alpha06에 포함된 커밋을 확인하세요.

새로운 기능

  • 이전에 사용 가능한 app:uri 외에 app:actionapp: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를 지정할 필요가 없으며 기본적으로 점 다음에 applicationIdmoduleName 접미사를 추가하여 사용합니다. graphPackage를 맞춤설정해야 하는 경우 ${applicationId} 자리표시자가 지원됩니다. (b/152696768)
  • 탐색 그래프 Kotlin DSL은 이제 작업에 defaultArguments Map을 노출하여 탐색 XML 파일의 <action> 요소에 기본값을 설정하는 기능을 미러링합니다. (b/150345605)

버그 수정

  • Navigation 2.2.2에서: 활동에 여러 NavHostFragment 인스턴스가 있을 때 그래프의 시작 대상으로 딥 링크를 생성할 때 발생하는 IllegalStateException이 수정되었습니다. (b/147378752)

종속 항목 업데이트

버전 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에서는 이제 CustomView 1.1.0-alpha02에서 도입된 Openable 인터페이스(DrawerLayout에서 DrawerLayout 1.1.0-alpha04로 구현)를 사용하여 개발자가 NavigationUI가 있는 맞춤 Openable 구현을 사용할 수 있습니다. (b/129030452)

버그 수정

  • 이제 navigation-common-ktx ProGuard 규칙이 모든 NavArgs 인스턴스가 아닌 사용되는 NavArgs 클래스만 올바르게 유지합니다. (b/150213558)

종속 항목 변경사항

  • Navigation이 Core 1.2.0에 대한 종속성을 되돌려 이제는 Core 1.1.0에 종속됩니다. 이로써 Navigation이 Core 1.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)

종속 항목 업데이트

버전 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)

종속 항목 업데이트

버전 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)

종속 항목 업데이트

버전 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을 허용하는 인수는 선택사항입니다.
  • 개선된 애니메이션 지원: 이제 NavHostFragmentFragment 1.2.0에서 FragmentContainerView를 사용하여 애니메이션 z-순서 문제 및 Fragment로 창 인셋 전달 문제를 해결했습니다.

버전 2.2.0-rc04

2019년 12월 18일

androidx.navigation:navigation-*:2.2.0-rc04가 출시되었습니다. 버전 2.2.0-rc04에 포함된 커밋을 확인하세요.

버그 수정

  • Fragment1.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)
  • 이제 NavHostFragmentFragmentContainerView와 함께 사용될 경우 구성 변경 후 그래프를 올바르게 복원합니다. (b/143752103)

종속 항목 변경사항

  • Navigation이 이제 Lifecycle 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03, Activity 1.1.0-rc03 및 Fragment 1.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-rc012.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)
  • 이제 ActivitynavArgs() 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)

버그 수정

  • ViewPager2NavHostFragment를 추가할 때 실패하고 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 변경사항

버그 수정

  • 이제 NavHostFragmentFragmentContainerView를 사용하여 애니메이션 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 관련 데이터 공유를 참고하세요.
  • 대화상자 대상: 이제 navigateDialogFragment를 표시하는 <dialog> 대상을 만들 수 있습니다. NavHostFragment는 기본적으로 대화상자 대상을 지원합니다. 자세한 내용은 DialogFragment에서 대상 만들기를 참고하세요.
  • URI로 탐색: 이제 Uri를 사용한 navigate가 가능하며 이 경우 대상에 추가한 <deepLink>를 사용하여 탐색합니다. 자세한 내용은 URI를 사용하여 이동을 참고하세요.
  • NavHostController: 특히 맞춤 NavHost를 생성하는 데 사용되는 API를 NavHostController로 이동했으므로 호스팅 LifecycleOwner, OnBackPressedDispatcher, ViewModelStoreNavController를 연결하도록 구현할 수 있습니다.

버전 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 변경사항

  • NavControllergetViewModelStore() 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() 메서드를 NavHostControllersetOnBackPressedDispatcher() 메서드로 대체했으며 이제 이 메서드를 호출하기 전에 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를 올바르게 적용하도록 하여 Navigation 2.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 변경사항

  • NavHostFragmentcreateFragmentNavigator() 메서드를 지원 중단하고 기능을 새 onCreateNavController() 메서드로 이동했으며 이로써 NavHostFragment를 서브클래스로 분류할 때 맞춤 Navigator 추가의 올바른 진입점이라는 것을 더 명확하게 나타냈습니다. (b/122802849)
  • NavDestinationhasDeepLink() 메서드를 추가했으며 이를 사용하여 제공된 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.1androidx.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.02.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.01.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 클래스와 연결된 패키지 이름의 infun과 같은 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일

이 릴리스에는 다양한 소규모 변경사항 및 중요한 버그 수정이 포함되어 있습니다.

새로운 기능

  • 이제 0reference 인수의 android:defaultValue로 사용할 수 있습니다. (b/124248602)

동작 변경사항

  • 이제 정확한 딥 링크 일치가 .* 또는 인수 일치가 있는 딥 링크보다 높은 우선순위를 차지합니다. (b/123969518)

버그 수정

  • 백 스택에서 마지막 대상을 표시할 때 이제 popBackStack()navigateUpfalse를 올바르게 반환하도록 하여 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)
  • NavDirectionsgetArguments()에서 반환된 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)
  • NavHostFragmentFragmentManager에서 맞춤 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"가 포함된 MenuItemNavigationUI 메서드와 함께 사용될 때 더 이상 백 스택을 표시하지 않습니다. (b/120104424)
  • 이제 AppBarConfiguration을 사용하여 navController.navigateUp()에서 false를 반환할 때 호출되는 대체 OnNavigateUpListener 인스턴스를 설정할 수 있습니다. b/79993862 b/120690961

브레이킹 체인지

  • argType="reference"<argument>를 사용할 때 Navigation에서 더 이상 참조를 파싱하지 않는 대신 원시 리소스 ID 자체를 제공합니다. b/111736515
  • onNavDestinationSelected()가 이제 기본적으로 탐색 그래프의 시작 대상으로 돌아가서 setup 메서드와 일치하도록 만듭니다. MenuItemmenuCategory="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/118670572
  • OnDestinationChangedListener에서 이제 인수의 Bundle도 전달합니다. aosp/837142
  • app:clearTask, app:launchDocument 속성 및 관련 메서드가 삭제되었습니다. 그래프의 루트와 함께 app:popUpTo를 사용하여 백 스택의 모든 대상을 삭제합니다. b/119628354
  • ActivityNavigator.Extras가 이제 Builder 패턴을 사용하며 임의의 Intent.FLAG_ACTIVITY_ 플래그를 설정하는 기능을 추가합니다. aosp/828140
  • NavController.onHandleDeepLink에서 handleDeepLink로 이름이 변경되었습니다. aosp/836063
  • NavOptions, 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일

새로운 기능

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:typeapp:argType으로 변경되었습니다. (b/111110548)
  • 이제 Safe Args의 오류 메시지를 클릭할 수 있습니다. (b/111534438)
  • 이제 Args 클래스에서 NonNull 속성이 실제로 null이 아님을 확인합니다. (b/111451769)
  • NavDirections 및 Args에서 생성한 클래스에 NonNull 주석이 추가되었습니다. (b/111455455b/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.indexsetDemoControllerIndex가 됩니다. (b/79995048)
    • 예를 들어 action_show_settingsactionShowSettings가 됩니다. (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입니다.