Android O에서는 TYPE_APPLICATION_OVERLAY 대신 TYPE_SYSTEM_OVERLAY를 지원 중단하므로 상태 표시줄 위에 오버레이되는 앱이 중단됩니다.
새로운 사용자 대면 기능을 설명하는 게시물이 조금씩 있습니다. 안드로이드 O 사용자가 장치에서 소프트웨어를 테스트하는 데 몇 주가 걸렸으므로 이제 속도가 느려지기 시작했습니다. 그러나 내부적으로는 아주 많은 변경 사항이 천천히 밝혀지고 있습니다. 얼마 전 Android O를 실행하는 Nexus 및 Pixel 기기에 대한 그러한 변경 사항에 대해 게시했습니다. SDCardFS 채택. 하지만 오늘은 특정 앱, 특히 다음과 같은 앱의 개발자에게 영향을 미칠 변경 사항에 대해 논의하고 싶습니다. 상태 표시줄 위에 오버레이. 이러한 응용 프로그램은 것 같습니다 Android O Developer Preview에서 깨짐, 언뜻 보면 단순한 버그로 무시할 수도 있지만 참조 문서를 더 자세히 살펴보면 다음과 같을 수 있습니다. 의도된 변화 Google에 의해.
Android O가 상태 표시줄 오버레이를 중단합니다.
Android에서 제가 가장 좋아하는 점 중 하나는 맞춤설정이 가능하다는 것입니다. 루팅되었거나 사용자 정의 ROM을 실행하는 사용자는 기본적으로 제한 없이 시스템 상태 표시줄의 테마를 기본적으로 설정할 수 있지만, 장치가 루팅 해제된 경우 사용할 수 있는 옵션이 더 적습니다. 다행스럽게도 Google Play 스토어에는 기본 수준에서 상태 표시줄의 모양을 변경할 수 있는 많은 애플리케이션이 있습니다. 이는 기존 상태 표시줄 위에 사용자 정의 상태 표시줄을 표시하는 시스템 오버레이 창의 영리한 조합 덕분에 가능합니다. 알림을 표시하는 알림 수신기 및 선택적으로 사용자 정의 색상을 상황에 맞게 조정할 수 있는 접근성 서비스 상태 표시 줄.
위의 두 스크린샷은 Play 스토어에서 제공되는 다양한 상태 표시줄 오버레이 앱 중 하나를 사용할 때 알림 표시줄이 어떻게 보이는지 보여줍니다. 이 스크린샷은 EMUI 5.0을 실행하는 루팅되지 않은 Huawei Mate 9에서 촬영되었습니다. EMUI에 익숙하지 않은 분들을 위해 설명하자면 상태 표시줄은 위 스크린샷과 전혀 다릅니다. 대신 다음과 같습니다.
주식 상태 표시줄의 모양이 마음에 들지 않으면 다음과 같은 앱을 사용하세요. 상태 또는 재료 상태 표시줄 신의 선물입니다. 그러나 기기가 Android O로 업데이트되면 이러한 애플리케이션이 더 이상 작동하지 않을 수 있습니다. Android O Developer Preview를 실행하는 Google Pixel에서 동일한 두 앱의 모습은 다음과 같습니다.
원래 상태 표시줄을 가리는 오버레이가 아니라 오버레이처럼 보입니다. 중복 원래 상태 표시줄을 사용하면 엄청난 혼란이 발생합니다.
불행히도 이로 인해 이와 같은 앱이 사실상 쓸모 없게 됩니다. 그리고 이것의 영향을 받는 것은 일반적인 상태 표시줄 테마 응용 프로그램뿐만이 아닙니다. 상태 표시줄 위에 오버레이를 표시해야 하는 모든 앱이 영향을 받습니다..
쓸모 없게 될 수 있는 인기 앱 목록은 다음과 같습니다.
- 상태 (500,000 - 1,000,000 설치)
- 재료 상태 표시줄 (1,000,000 - 5,000,000 설치)
- 멋진 도구 - 시스템 통계 (500,000 - 1,000,000 설치)
- 텔레시네 (50,000 - 100,000 설치)
- 상태 표시줄 정리 (100,000 - 500,000 설치)
- 타이니코어 (100,000 - 500,000 설치)
작동하지만 더 이상 상태 표시줄 위에 오버레이할 수 없는 일부 앱 목록(이전 기능 제한):
- 어스름 (5,000,000 - 10,000,000 설치)
- 주의 (100,000 - 500,000 설치)
- 리소스 모니터 미니 (50,000 - 100,000 설치)
- 네트워크 모니터 미니 (1,000,000 - 5,000,000 설치)
상태 표시줄 위에 일종의 오버레이를 사용하는 앱이 Play 스토어에 더 많이 있지만, 이러한 변경 사항이 잠재적으로 수백만 명이 사용하는 많은 앱에 영향을 미칠 것이라는 점을 이미 알 수 있습니다. 사용자. 그럼 여기서 무슨 일이 일어나고 있는 걸까요?
TYPE_SYSTEM_OVERLAY는 더 이상 사용되지 않습니다.
Android가 새로 출시될 때마다 Google은 다양한 기능을 도입하고 더 이상 사용하지 않습니다(더 이상 사용되지 않는 기능으로 지정하고 제거하도록 지정). 이번에 도마에 있는 기능은 TYPE_SYSTEM_OVERLAY입니다. 인용하자면 참조 페이지 이 기능이 개발자에게 제공한 내용은 다음과 같습니다.
TYPE_SYSTEM_OVERLAY
창 유형: 다른 모든 것 위에 표시되어야 하는 시스템 오버레이 창입니다. 이러한 창은 입력 포커스를 가져서는 안 됩니다. 그렇지 않으면 키가드를 방해합니다. 다중 사용자 시스템에서는 소유한 사용자의 창에만 표시됩니다.
본질적으로 이 창 유형을 사용하면 앱이 상태 표시줄을 포함하여 화면의 모든 요소 위에 그릴 수 있습니다. 그러나 Android O부터 이 창 유형은 더 이상 사용되지 않습니다. 시스템이 아닌 앱의 경우 개발자는 대신 TYPE_APPLICATION_OVERLAY를 사용하는 것이 좋습니다. 인용하자면 참조 페이지 이 새로운 창 유형의 기능은 다음과 같습니다.
TYPE_APPLICATION_OVERLAY
창 유형: 애플리케이션 오버레이 창은 모든 활동 창 위에 표시됩니다(
FIRST_APPLICATION_WINDOW
그리고LAST_APPLICATION_WINDOW
) 그러나 상태 표시줄이나 IME와 같은 중요한 시스템 창 아래에 있습니다.시스템은 사용자의 시각적 혼란을 줄이고 리소스를 관리하기 위해 언제든지 이러한 창의 위치, 크기 또는 가시성을 변경할 수 있습니다.
시스템은 이 창 유형을 사용하는 프로세스의 중요도를 조정하여 메모리 부족 킬러로 인해 프로세스가 종료될 가능성을 줄입니다.
다중 사용자 시스템에서는 소유한 사용자의 화면에만 표시됩니다.
보시다시피 이 새로운 창 유형을 사용하면 앱이 다른 모든 활동 창 위에 콘텐츠를 오버레이할 수 있습니다. 제외하고 "상태 표시줄이나 IME와 같은 중요한 시스템 창"(IME는 키보드를 나타냄) Facebook Messenger와 같은 앱에서는 해당 앱에서 제공하는 챗헤드가 상태 표시줄 위에 표시되는 목적이 없기 때문에 이는 괜찮지만, 이는 앞서 언급한 대부분의 앱에 부정적인 영향을 미칩니다.
게다가 현재로서는 개발자가 사용할 수 있는 해결 방법이 없는 것 같습니다. Android O에서 이 문제를 방지하기 위해 개발자는 단순히 SDK 25(Android 7.1.1)를 대상으로 앱을 빌드할 것으로 예상할 수 있습니다. 그러나, 위원님이 지적하신 바와 같이 Reddit의 Status 개발자, Google은 교체됨 TYPE_SYSTEM_OVERLAY를 TYPE_APPLICATION_OVERLAY로 변경했으며 변경 사항은 다음과 같습니다. 대상 SDK와 독립적 버전. TYPE_SYSTEM_OVERLAY를 사용하는 개발자는 현재 호환성을 유지하기 위해 TYPE_APPLICATION_OVERLAY를 사용해야 합니다. 따라서 특정 앱이 기반으로 하는 대상 SDK 버전에 관계없이 Android O에서는 더 이상 TYPE_SYSTEM_OVERLAY를 사용하지 않습니다..
이에 대해 무엇을 할 수 있습니까?
Google이 아직 공식적인 설명을 제공하지 않았기 때문에 Google이 이러한 변경을 한 이유는 명확하지 않습니다. 내 추측으로는 의심하지 않는 사용자가 상태 표시줄을 악의적으로 차단하거나 교체하는 앱을 실수로 설치하는 것을 방지하여 Android의 보안을 강화하려는 시도인 것 같습니다. 불행하게도 이 변경 사항은 교차 공격에서 TYPE_SYSTEM_OVERLAY를 사용하는 완벽하게 합법적인 많은 응용 프로그램을 포착합니다.
이 기능을 활용하는 개발자는 Android의 Issue Tracker(#260787 그리고 #36574245) 변경 사항에 항의하고 대체 API를 요청했지만 Google 직원은 추적기에 다음과 같이 댓글을 달았습니다. 다음 진술:
상태: 수정되지 않음(의도된 동작)
우리는 제품 및 엔지니어링 팀과 후속 조치를 취한 결과 개발자가 SHOW_WHEN_LOCKED 활동을 사용하여 다음을 수행할 수 있다는 제안을 받았습니다. 기기가 잠겨 있을 때 표시되지만 의도적으로 더 이상 잠금 화면/알림 창 위에 표시할 수 없습니다.
현재로서는 개발자들이 FLAG_SHOW_WHEN_LOCKED가 여전히 상태 표시줄 위에 창을 오버레이하는 것을 허용하지 않는다는 점을 지적했기 때문에 이러한 개발자들은 운이 없는 것으로 보입니다. Google이 상황을 바꾸도록 기도하거나 이에 대해 지옥을 불러일으키는 것 외에 이러한 앱의 개발자가 무엇을 할 수 있는지는 확실하지 않습니다.
이것은 Android O의 첫 번째 개발자 프리뷰일 뿐이므로 Google이 여전히 Android O를 대상으로 하지 않는 앱이나 Google에서 복원할 수 있도록 이 기능을 제공합니다. TYPE_SYSTEM_OVERLAY. 하지만 상황이 현재와 같다면 다음과 같이 할 수 있습니다. 이 앱들에게 작별 인사를 해주세요. 그리고 그것은 정말 부끄러운 일이 될 것입니다.
저를 위해 이러한 많은 앱을 테스트해 준 Eli Irvin에게 감사드립니다!