Android O はステータス バーの上にオーバーレイするアプリを破壊している

click fraud protection

Android O では、TYPE_APPLICATION_OVERLAY を優先して TYPE_SYSTEM_OVERLAY を廃止し、その結果、ステータス バーの上にオーバーレイするアプリが壊れます。

ユーザー向けの新しい機能を概説する投稿が少しずつ表示されます。 アンドロイドO ユーザーが自分のデバイスでソフトウェアをテストするのに何週間もかかったため、速度が低下し始めています。 ただし、内部では非常に多くの変更が行われており、徐々に明らかになりつつあります。 先日、Android O を搭載した Nexus および Pixel デバイスに関するそのような変更について投稿しました。 SDCardFSの採用. しかし今日は、特定のアプリ、特に以下のアプリの開発者に影響を与える変更について説明したいと思います。 ステータスバーの上にオーバーレイ. これらのアプリケーションは次のようです Android O Developer Preview で壊れた一見すると単純なバグとして無視されるかもしれませんが、リファレンス ドキュメントを深く掘り下げると、これは次のような問題である可能性があります。 意図した変更 Googleによる。


Android O でステータス バーのオーバーレイが壊れる

Android で私が気に入っている点の 1 つは、そのカスタマイズ性の高さです。 root 化されているユーザー、またはカスタム ROM を実行しているユーザーは、基本的に制限なしでシステム ステータス バーのテーマをネイティブに設定できますが、デバイスが root 化されていない場合は、利用できるオプションが少なくなります。 幸いなことに、Google Play ストアには、ステータス バーの外観を基本レベルで変更できるアプリケーションが数多くあります。 これは、既存のステータス バーの上にカスタム ステータス バーを表示するシステム オーバーレイ ウィンドウの賢い組み合わせのおかげで可能になります。 通知を表示するための通知リスナー、およびオプションでカスタムの状況に応じて色付けできるアクセシビリティ サービス ステータスバー。

上の 2 つのスクリーンショットは、Play ストアで入手可能な多数のステータス バー オーバーレイ アプリの 1 つを使用したときに通知バーがどのように見えるかを示しています。 これらのスクリーンショットは、EMUI 5.0 を実行している、ルート化されていない Huawei Mate 9 で撮影されたものです。 EMUI に詳しくない方のために説明すると、ステータス バーは上のスクリーンショットとはまったく異なります。 代わりに、次のようになります。

在庫ステータスバーの見た目を気にしない場合は、次のようなアプリがおすすめです。 状態 または マテリアルステータスバー 天の恵みです。 ただし、デバイスが Android O に更新されると、これらのアプリケーションは動作しなくなる可能性があります。 Android O Developer Preview を実行している Google Pixel 上で、同じ 2 つのアプリがどのように見えるかは次のとおりです。

オーバーレイが元のステータス バーをブロックするのではなく、オーバーレイのように見えます。 重なる 元のステータスバーを使用すると、非常に混乱が生じます。

残念ながら、これにより、このようなアプリは実質的に役に立たなくなります。 この影響を受けるのは、一般的なステータス バーのテーマ アプリケーションだけではありません。 ステータスバーの上部にオーバーレイを表示する必要があるすべてのアプリが影響を受けます。.

以下は、役に立たなくなる可能性があるいくつかの人気のあるアプリのリストです。

  • 状態 (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 以降、このウィンドウ タイプは非推奨になりました。 システム以外のアプリの場合、Google は開発者が代わりに 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はまだ正式な説明を行っていないため、なぜこの変更を行ったのかは正確には明らかではありません。 私の推測では、これは、疑いを持たないユーザーが悪意を持ってステータス バーをブロックしたり置き換えたりするアプリを誤ってインストールするのを防ぐことで、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 が復元できるようにこの機能を提供します。 タイプ_システム_オーバーレイ。 しかし、状況が現状のままであれば、次のことが可能です。 これらのアプリに別れを告げる. それはとても残念なことだ。


これらのアプリの多くをテストしてくれた Eli Irvin に感謝します。