The Android Developer Challenge is back! Submit your idea before December 2.

Navigation

Navigation은 Android 애플리케이션 내에서 '대상' 사이를 탐색하는 프레임워크로, 대상이 Fragment, Activity 또는 기타 구성요소로 구현되었는지에 관계없이 일관된 API를 제공합니다. 자세한 내용은 참조 문서에서 확인하세요.

종속성 선언

Navigation에 종속성을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.

앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속성을 추가합니다.

    dependencies {
      def nav_version = "2.1.0-rc01"

      // Java
      implementation "androidx.navigation:navigation-fragment:$nav_version"
      implementation "androidx.navigation:navigation-ui:$nav_version"

      // Kotlin
      implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
      implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

    }
    

Safe Args

프로젝트에 안전한 인수를 추가하려면 최상위 build.gradle 파일에 다음과 같은 classpath를 포함하세요.

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

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

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

apply plugin: "androidx.navigation.safeargs"

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

apply plugin: "androidx.navigation.safeargs.kotlin"

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

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

종속성에 관한 자세한 내용은 빌드 종속성 추가를 참조하세요.

버전 2.2.0-alpha01

2019년 8월 7일

androidx.navigation:navigation-*:2.2.0-alpha01이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

  • 이제 SavedStateViewModelFactoryby navGraphViewModels() 또는 ViewModelProvider 생성자를 NavController.getViewModelStoreOwner()에서 반환되는 ViewModelStoreOwner와 함께 사용할 때 사용되는 공장 기본값입니다. (b/135716331)

API 변경사항

버그 수정

  • 이제 NavHostFragmentFragmentContainerView를 사용하도록 하여 애니메이션 z-순서 문제와 Fragment로 창 인셋 전달 문제를 해결했습니다. (b/137310379)

버전 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이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

  • 이제 Toolbar 또는 CollapsingToolbarLayout과 함께 setupWithNavController()를 사용할 때 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> 대상과 같은 플로팅 창 대상의 구현이 이제 모든 <dialog> 대상을 구현하는 마커 인터페이스 FloatingWindow로 일반화되었습니다. 상단 앱 바와 상호작용하는 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
  • hasDeepLink() 메서드가 NavDestination에 추가되어 제공된 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

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로 이전되어야 Navigation의 2.X 릴리스를 사용할 수 있습니다. 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 파일에 다음 classpath를 추가합니다.

buildscript {
        repositories {
            google()
        }
        dependencies {
            classpath "android.arch.navigation:navigation-safe-args-gradle-plugin: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일

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

새로운 기능

  • 이제 reference 인수의 android:defaultValue0을 사용할 수 있습니다. 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에서 생성된 코드가 app:argType(.OuterClass$InnerClass 형식의 정적 내부 클래스를 가리킴)을 사용하여 올바르게 처리됩니다. 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

브레이킹 체인지

  • 액티비티에 팝 애니메이션을 적용하는 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
  • 이제 NavController에서 중첩된 NavHostFragment 또는 백 스택이 있는 기타 하위 Fragment를 사용할 때 popBackStack() 작업을 올바르게 처리합니다. b/122770335
  • NavigationUI에서 이제 위로 버튼의 콘텐츠 설명을 올바르게 설정합니다. b/120395362
  • Safe Args 생성 Directions 클래스에서 이제 대상의 작업과 동일한 ID를 사용하는 전역 작업을 올바르게 처리합니다. b/122962504
  • equals()가 true를 반환할 때 이제 Safe Args 생성 NavDirections 클래스에서 동일한 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 메서드와 일치하도록 만듭니다. menuCategory="secondary"MenuItem에 추가하여 백 스택이 표시되지 않도록 하세요. aosp/852869
  • 생성된 Args 클래스의 fromBundle() 메서드가 이제 nullable 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
  • Direction 및 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를 기본 탐색 fragment로 설정하여, 하위 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/111455455 b/111455456

버그 수정

  • fragment 대상으로 딥 링크 후 발생하는 시스템 뒤로 버튼의 문제가 해결되었습니다. b/111515685

버전 1.0.0-alpha03

2018년 7월 12일

Navigation 1.0.0-alpha03 및 관련 Safe Args Gradle 플러그인에는 다양한 API 변경사항, 동작 변경사항, 버그 수정이 포함되어 있습니다.

API/동작 변경사항

  • 툴바에 NavigationUI.setupWithNavController 메서드가 추가되었습니다. b/109868820
  • CollapsingToolbarLayout에 NavigationUI.setupWithNavController 메서드가 추가되었습니다. b/110887183
  • 이제 백스택이 비어 있거나 지정된 대상 ID가 백스택에 없으면 popBackStack()에서 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에서 이제 탐색 XML 파일의 모든 android:name 속성에 keep 규칙을 추가합니다. b/79874119
  • 기본 FragmentNavigator를 대체할 때 발생하는 메모리 누수가 해결되었습니다. b/110900142

버전 1.0.0-alpha02

2018년 6월 7일

동작 변경사항

  • FragmentNavigator에서 이제 setReorderingAllowed(true)를 사용합니다. b/109826220

  • 탐색이 이제 딥 링크 URL에서 파싱된 URLDecodes URL 인수를 디코딩합니다. 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으로 중첩된 그래프를 사용할 때 탐색에서 올바른 항목을 강조표시합니다. b/109675998

API 변경사항

  • NavOptions에 포함된 작업 및 관련 API의 clearTask 속성 지원이 중단되었습니다. b/80338878

  • NavOptions에 포함된 작업 및 관련 API의 launchDocument 속성 지원이 중단되었습니다. b/109806636

버전 1.0.0-alpha01

2018년 5월 8일

Navigation은 인앱 탐색 빌드를 위한 프레임워크를 제공합니다. 최초 출시 버전은 1.0.0-alpha01입니다.