AndroidX 란 무엇입니까?


255

Android의 방 라이브러리에 대해 읽고 있습니다. 패키지가 android로 변경되었습니다 androidx. 난 이해 못 했어. 누군가 설명해 주시겠습니까?

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"

이것도 android패키지 와 함께 사용할 수 있습니다.

implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version"
  • androidx대신 새로운 지원 라이브러리를 패키징해야했던 것은 무엇입니까 android?
  • 유스 케이스 및 기존 프로젝트의 요인에 영향을줍니다.

4
developer.android.com/topic/libraries/support-library/…를 읽으십시오 . androidx.*지원 라이브러리의 패키지 계층입니다. 그것들은 모두 우리가 androidx(아키텍처 구성 요소, 다른 지원 라이브러리와 같은) 시대와 동일한 패키지로 제공 될 것 입니다.
ADM

3
정확히 무엇을 이해하지 못했습니까? 왜 패키지를 변경 했습니까?
Rohit5k2

@ADM androidx은 CORE 에서 패키지 로 전환 한 이유 android입니다.
Khemraj

2
그들은 단순성을 위해 패키지 구조를 다시 디자인했습니다. 당신이보고 싶다면 IO 2018에서 발표되었습니다. Thx
ADM

답변:


334

AndroidX-Android 확장 라이브러리

에서 AndroidX 문서

Android 운영 체제와 함께 제공되는 패키지와 앱의 APK와 함께 제공되는 패키지를보다 명확하게하기 위해 새로운 패키지 구조를 출시하고 있습니다. 앞으로 android. * 패키지 계층은 운영 체제와 함께 제공되는 Android 패키지 용으로 예약됩니다. 다른 패키지는 AndroidX 라이브러리의 일부로 새로운 androidx. * 패키지 계층에서 발행됩니다.

AndroidX의 필요

AndroidX는 패키지 이름을보다 명확하게하기 위해 새롭게 디자인 된 라이브러리입니다. 이제부터 안드로이드 계층 구조는 안드로이드 운영 체제와 함께 제공되는 안드로이드 기본 클래스에만 적용되며 다른 라이브러리 / 종속성은 androidx의 일부가 됩니다 (더 의미가 있습니다). 이제부터 모든 새로운 개발이 androidx에서 업데이트됩니다.

com.android.support. ** : androidx.
com.android.support:appcompat-v7 : androidx.appcompat : appcompat com.android.support:recyclerview-v7 : androidx.recyclerview : recyclerview com.android.support:design : com.google.android.material : material

AndroidX 패키지에 대한 완전한 아티팩트 맵핑

AndroidX는 시맨틱 버전을 사용합니다.

이전 support library에는 SDK 버전을 사용했지만 AndroidX는을 사용합니다 Semantic-version. 28.0.0 → 1.0.0에서 버전이 변경됩니다.

현재 프로젝트를 마이그레이션하는 방법

Android Studio 3.2 (2018 년 9 월)에는 기존 프로젝트를로 마이그레이션하는 직접 옵션이 있습니다 AndroidX. 이것은 모든 패키지를 자동으로 리팩토링합니다.

마이그레이션하기 전에 프로젝트를 백업하는 것이 좋습니다.

기존 프로젝트

  • Android Studio> 리 팩터 메뉴> AndroidX로 마이그레이션 ...
  • Refractor 윈도우를 분석하고 하단에 엽니 다. 수행 할 변경을 승인하십시오.

영상

새 프로젝트

이 깃발을 당신의 gradle.properties

android.enableJetifier=true
android.useAndroidX=true

동일한 AndroidX 패키지에 대한 @Library 맵핑을 확인하십시오 .

AndroidX로 마이그레이션 @ 공식 페이지 확인

Jetifier 란 무엇입니까?

이주의 벌레

  • 앱을 빌드하고 마이그레이션 후 일부 오류를 발견하면 사소한 오류를 수정해야합니다. 쉽게 고칠 수 있기 때문에 거기에 갇히지 않을 것입니다.
  • 3 자 라이브러리 디렉토리에 AndroidX로 변환되지 않습니다,하지만 그들은에 의해 실행시에 변환됩니다 Jetifier 때문에 컴파일시 오류에 대한 걱정을하지, 앱 완벽하게 실행됩니다.

지원 28.0.0은 마지막 릴리스입니까?

에서 안드로이드 지원 개정 28.0.0

이것은 android.support 포장 아래마지막 기능 릴리스 이며 개발자는 AndroidX 1.0.0으로 마이그레이션하는 것이 좋습니다.

Android는 이제 androidx 패키지 만 업데이트하므로 AndroidX를 사용하십시오.

추가 자료

https://developer.android.com/topic/libraries/support-library/androidx-overview

https://android-developers.googleblog.com/2018/05/hello-world-androidx.html


2
@androidmalin 다행입니다-이 정보가 도움이되었습니다 :)
Khemraj

어떤 상황에서 enableJetifier를 false로 설정할 수 있습니까?
Mark

1
@Mark enableJetifier=false가 기본값입니다. 설정하지 않으면 거짓입니다. 즉, 라이브러리 중 어느 것도 AndroidX에 다시 쓰지 않습니다.
Khemraj

4
안드로이드 스튜디오의 마이그레이션이 제대로 작동하지 않습니다. 수백 개의 파일을 수동으로 수정해야했습니다 ... 실제로 중요한 코드를 실제로 프로그래밍하는 것보다 Google 도구 변경으로 인해 코드를 수정하는 데 더 많은 시간을 할애합니다 ... 한숨
LearningPath

1
지금은 (3.3) 불렀습니다Migrate to AndroidX
Dale

32

설명서를 기반으로 :

androidx는 Android 운영 체제에 번들로 제공되는 패키지와 앱의 APK와 함께 제공되는 패키지를보다 명확하게하기위한 새로운 패키지 구조입니다. 앞으로 android. * 패키지 계층은 운영 체제와 함께 제공되는 Android 패키지 용으로 예약됩니다. 다른 패키지는 새로운 androidx. * 패키지 계층 구조로 발행됩니다.

재 설계된 패키지 구조는 더 작고 집중적 인 라이브러리를 장려하는 것입니다. 이슈 매핑에 대한 자세한 내용은 여기를 참조하십시오 .

지원되는 최소 SDK 수준이 14 인 경우 "v7"이라는 지원 라이브러리 (이전 버전과의 호환성을위한 구성 요소 및 패키지 포함)가 있으며 새로운 이름 지정을 통해 플랫폼에 번들로 제공되는 API와 사용되는 앱 개발자를위한 라이브러리 간의 구분을 명확하게 이해할 수 있습니다. 다른 버전의 Android에서. 자세한 내용 은 공식 발표 를 참조하십시오.


22

AndroidX 는 Android 팀이 Jetpack 내에서 라이브러리를 개발, 테스트, 패키지, 버전 및 릴리스하는 데 사용하는 오픈 소스 프로젝트입니다 .

AndroidX 는 원래 Android 지원 라이브러리 를 대폭 개선했습니다 . 지원 라이브러리와 마찬가지로 AndroidX는 Android OS와 별도로 제공되며 Android 릴리스간에 하위 호환성을 제공합니다. AndroidX는 기능 패리티 및 새 라이브러리를 제공하여 지원 라이브러리를 완전히 대체합니다.

AndroidX에는 다음 기능이 포함되어 있습니다.

  • AndroidX의 모든 패키지는 문자열 androidx로 시작하는 일관된 네임 스페이스에 있습니다. 지원 라이브러리 패키지는 해당 androidx. * 패키지에 매핑되었습니다. 모든 이전 클래스와 빌드 아티팩트를 새 클래스로 완전히 맵핑하려면 패키지 리팩토링 페이지를 참조하십시오.

  • 지원 라이브러리와 달리 AndroidX 패키지는 별도로 유지 관리 및 업데이트됩니다. androidx 패키지 Semantic Versioning는 버전 1.0.0부터 엄격하게 사용 합니다. 프로젝트에서 AndroidX 라이브러리를 독립적으로 업데이트 할 수 있습니다.

  • 모든 새로운 지원 라이브러리 개발은 AndroidX 라이브러리에서 이루어집니다. 여기에는 원래 지원 라이브러리 아티팩트의 유지 보수 및 새로운 Jetpack 구성 요소의 도입이 포함됩니다.

AndroidX 사용

기존 프로젝트를 마이그레이션하는 방법을 알아 보려면 AndroidX마이그레이션을 참조하십시오 .

새 프로젝트에서 AndroidX를 사용하려면 컴파일 SDK를 Android 9.0 (API 레벨 28) 이상으로 설정하고 gradle.properties파일 에서 다음 Android Gradle 플러그인 플래그를 모두 true로 설정해야 합니다.

  • android.useAndroidX: true로 설정하면 Android 플러그인은 지원 라이브러리 대신 적절한 AndroidX 라이브러리를 사용합니다. 지정되지 않은 경우 기본적으로 플래그는 false입니다.

  • android.enableJetifier: true로 설정하면 Android 플러그인이 바이너리를 다시 작성하여 기존의 타사 라이브러리를 AndroidX를 사용하도록 자동으로 마이그레이션합니다. 지정되지 않은 경우 기본적으로 플래그는 false입니다.

들어 아티팩트 매핑은


14

이 기사 Android Jetpack : 최근 발표 내용은 Android 지원 라이브러리에 어떤 의미가 있습니까? 잘 설명해

오늘날 많은 사람들은 지원 라이브러리를 Android 앱 개발의 필수 부분으로 간주하여 Google Play 스토어의 99 % 앱에서 사용하고 있습니다. 그러나 지원 라이브러리가 커지면서 라이브러리의 이름 지정 규칙을 둘러싼 불일치가 발생했습니다.

처음에 각 패키지의 이름은 해당 패키지에서 지원하는 최소 API 레벨 (예 : support-v4)을 나타냅니다. 그러나 26.0.0지원 라이브러리 버전 은 최소 API를 14로 늘렸으므로 오늘날 많은 패키지 이름은 최소 지원 API 레벨과 관련이 없습니다. 때 지원-V4 및 지원-V7 패키지 모두 (14)의 최소 API를 가지고, 그것은 사람들이 혼란을 얻을 이유를 쉽게!

이러한 혼란을 없애기 위해 Google은 현재 지원 라이브러리를 새로운 Android 확장 라이브러리 (AndroidX) 패키지 구조 로 리팩토링하고 있습니다. AndroidX는 단순화 된 패키지 이름뿐만 아니라 각 패키지의 내용과 지원되는 API 수준을 더 잘 반영하는 Maven groupId 및 artifactId를 제공합니다.

현재 이름 지정 규칙을 사용하면 Android 운영 체제에 번들로 제공되는 패키지와 애플리케이션의 APK (Android 패키지 키트) 로 패키지 된 패키지가 명확하지 않습니다 . 이러한 혼동을 해결하기 위해 번들로 묶지 않은 모든 라이브러리는 AndroidX의 androidx. * 네임 스페이스로 이동하고 android. * 패키지 계층은 Android 운영 체제 와 함께 제공되는 패키지 용으로 예약 됩니다 .


12

내 편에서 사용 가능한 모든 답변에 약간의 비트 추가

AndroidX의 필요

  1. @KhemRaj의 놀라운 답변에서 말했듯이

현재 이름 지정 규칙을 사용하면 Android 운영 체제에 번들로 제공되는 패키지와 응용 프로그램의 APK ( Android 패키지 키트 ) 로 패키지 된 패키지가 명확하지 않습니다 . 이러한 혼동을 없애기 위해 번들로 묶지 않은 모든 라이브러리는 AndroidX 의 androidx. * 네임 스페이스 로 이동 하고 android. * 패키지 계층은 Android 운영 체제와 함께 제공되는 패키지 용으로 예약됩니다.

  1. 이 외에

    처음에 각 패키지의 이름은 해당 패키지에서 지원하는 최소 API 레벨을 나타냅니다 (예 : support-v4) . 그러나 지원 라이브러리 버전 26.0.0최소 API를 14로 늘렸 으므로 오늘날 많은 패키지 이름은 최소 지원 API 레벨과 관련이 없습니다. support-v4 및 support-v7 패키지에 모두 최소 14의 API가 있으면 사람들이 왜 혼란스러워하는지 쉽게 알 수 있습니다. 이제 AndroidX에서는 API 레벨에 의존하지 않습니다.

또 다른 중요한 변경 사항은 AndroidX 아티팩트가 독립적으로 업데이트되므로 모든 종속성을 한 번에 변경하지 않고 프로젝트에서 개별 AndroidX 라이브러리를 업데이트 할 수 있다는 것입니다. " 모든 com.android.support 라이브러리는 정확히 동일한 버전 사양을 사용해야합니다 "라는 메시지가 실망스러워 졌습니다.


7

Android Dev Summit 비디오 에서 AndroidX에 대해 알게되었습니다 . 요약은-

  1. 더 이상 지원 라이브러리 없음 : Android 지원 라이브러리는 Google이 지원 라이브러리 네임 스페이스로 유지 관리하지 않습니다. 따라서 지원 라이브러리에서 버그 수정을 찾으려면 AndroidX에서 프로젝트를 마이그레이션해야합니다
  2. 더 나은 패키지 관리 : 표준화되고 독립적 인 버전 관리 : 이전 지원 라이브러리 버전 관리가 너무 혼란 스러웠습니다. 그것은 당신의 고통을 발표 할 예정 "모든 com.android.support 라이브러리가 동일한 버전 사양을 사용해야합니다" 메시지를.
  3. 다른 God 라이브러리는 AndroidX로 마이그레이션되었습니다 . Google Play 서비스, Firebase, Mockito 2 등은 AndroidX로 마이그레이션됩니다.
  4. AndroidX 아티팩트를 사용하여 새 라이브러리가 게시됩니다. 모든 라이브러리는 Android Jetpack 과 같은 AndroidX 네임 스페이스에 있습니다.

4

AppCompat 버전의 지원과 동일하지만 v4 및 v7 버전의 혼란이 적으므로 Android XML 요소의 다른 구성 요소 사용에서 많은 도움이됩니다.


4

androidxsupport library후에 교체됩니다 28.0.0. 사용하려면 프로젝트를 마이그레이션해야합니다. androidx을 사용합니다 Semantic Versioning. AndroidX라이브러리 이름과 패키지 이름으로 표시된 버전에서는 사용 이 혼동되지 않습니다. 인생은 쉬워진다

[AndroidX 및 지원 호환성]


3

AndroidX는 Android 팀이 Jetpack 내에서 라이브러리를 개발, 테스트, 패키지, 버전 및 릴리스하는 데 사용하는 오픈 소스 프로젝트입니다.

몇 시간 동안 고생 한 후 app / build.gradle에 다음을 포함시켜 해결했습니다.

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

이 플래그를 gradle.properties에 넣으십시오.

android.enableJetifier=true
android.useAndroidX=true

Changes in gradle:

implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha04'

Android 스튜디오에서 마이그레이션 할 때 앱 / 그라 데일 파일은 표준 라이브러리의 수정 라이브러리 구현으로 자동 업데이트됩니다.

참조 : https://developer.android.com/jetpack/androidx/migrate


0

Android는 몇 가지 다른 라이브러리 세트를 제공합니다. 하나는 Android 지원 라이브러리이고 다른 하나는 AndroidX입니다. "Android. * 아티팩트 사용"을 선택하면 AndroidX를 사용함을 나타냅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.