Android の断片化の残念な現状: 開発者の苦境を理解するための例

click fraud protection

平均的な Android ユーザーはおそらく、Android の「断片化問題」を気にしなくなって久しいでしょう。 しかし、この問題は依然として開発者を悩ませています。

断片化は、モバイル オペレーティング システムが発表されて以来、文字通り Android において議論の的となっている問題です。

断片化に伴う多様性は、荒らしがオンライン炎上戦争で使用する棍棒であることは別として、現在では主に問題として見なされています。 消費者にとってネットポジティブ Android デバイスの。 結局のところ、私たちは、必要な種類のソフトウェアを備えたデバイスの選択に関して非常に自由に与えられているため、平均的な消費者が断片化を気にするのは困難です。 信じられないほど多様な Android デバイスを視覚化すると、Android の多様な表現の美しいモザイクが生成されます。

OpenSignal アプリのアプリ インストールに基づく Android デバイスのフラグメンテーションの例。 ソース: オープンシグナル

しかし、ハードウェアとソフトウェアの断片化は、ソフトウェア開発者にとって幸せなものではありません。 実際には全く逆です。 非常に多くの異なるハードウェアおよびソフトウェア構成にまたがってアプリを開発すると、デバッグ時に大きな面倒になる可能性があります。 OEM は、アプリの開発時に考慮する必要がある大きな変更や微妙な変更を加えることができますが、個々の開発者が自分のアプリが普遍的に動作することを確認する簡単な方法は実際にはありません。 平均的な消費者は断片化に関する議論を忘れて久しいですが、この問題は依然として Android を悩ませています。 アプリ開発者は、それを吸い上げてエラーに対処する以外に何もすることがないようです。 現れる。


残念な断片化状態

特にある OEM は、アプリ開発時に頭痛の種を引き起こすとして大部分の憎しみを受けています、それは Samsung です。 開発者たちは何年もサムスンについて暴言を吐き続けており、中には次のような痛烈な文章を書いている人もいる。Android地獄にはサムスンにとって特別な場所がある" これは、以下に起因する特にイライラするバグについて説明しています。 Samsung デバイスとサポート appcompat ライブラリ. アンブリ氏の暴言の中で、特に 1 つの段落に注目していただきたいと思います。この文章は、開発者が依然として断片化を気にする理由を見事に概説しています。

あなたが Android 開発者であれば、Samsung デバイスに対する憎しみはおそらく際限がないでしょう。 サムスンの代名詞である平均以上のユーザー 愚かなタッチウィズ そして 過剰なブロートウェア、選択肢がないのでサムスンを軽蔑します。 サムスンのせいで 巨大な市場シェア、Samsung デバイスをサポートしないことを選択することはできません。 そしてそれが最も痛いことです。 この選択があなたから奪われるという事実!

これは Android が存在していた昔からの暴言でもありません。この投稿は昨年 12 月中旬に公開されました。 率直に申し上げておきますが、この問題がまだ正式に修正されたかどうかはわかりません。 アンブリ氏は、Google 検索で偶然彼の暴言に出会った人のために、自身の投稿で修正を提供しました。 バグ。 あなたがしなければならないのは使用することだけです プロガード 次の 1 行のコードを使用します。

# Samsung ruining all nice things-keep class !android.support.v7.view.menu.**, !android.support.design.internal.NavigationMenu, !android.support.design.internal.NavigationMenuPresenter, !android.support.design.internal.NavigationSubMenu, android.support.** {*;}

それはそれほど悪いことではありませんね? ただし、問題は、この修正がスタック オーバーフローから取得されたものであることです。 誤解しないでください。Stack Overflow は素晴らしい Web サイトです。 しかし、これはアプリの修正を見つけるための理想的な情報源ではありません。 Stack Overflow で何かを見つけるには、多くの場合、Google 検索で何度も試行錯誤した後、リンクを深く調べる必要があります。 場合によっては、別のユーザーがあなたが抱えているのと同じバグについて言及しているのに、修正の目途が立たないことさえあります。 あるいは、元の投稿者が主張しているスレッドを見つけたときはさらにイライラします。 修正を見つけましたが、他の人に修正方法を指示せずにスレッドを放棄して久しいです。 問題。

出典: XKCD

微妙な断片化の問題の例

私自身は開発者ではありませんが、Tasker を何年もいじくり回してきたため、Android の機能には十分に精通しており、直面した問題に対する独自の解決策を疑似プログラミングし始めています。 何かが分からないときは、他の人と同じように Google で調べます。 前回の記事を書いている途中で、 携帯電話の設定アプリを調べて隠れたアクティビティを探す, 説明できないかなり奇妙なバグに遭遇しました。 Huawei端末特有のバグです。

設定アプリ内で特定のアクティビティ (アプリの使用状況統計を含む「テスト」メニューなど) を開始しようとすると、常に権限エラーが発生します。 特に、アクティビティを開始するために使用していたアプリには権限がありませんでした huawei.android.許可。 HW_SIGNATURE_OR_SYSTEM。 私がテストした他のデバイスでは、これらの設定アクティビティを起動するために独自の権限は必要ありませんでした。Huawei バージョンの Android (EMUI) を実行している携帯電話のみでした。 の分析 com.android.設定 設定アプリ内の特定のアクティビティが実際に、次のいずれかを必要とする保護レベルの下にあったことが明らかになりました。 署名またはシステム許可.

残念ながら、これは、/system にインストールされたアプリ、または同じ署名で署名されたアプリのみを意味します。 設定アプリが私が行った方法を使用してこれらのアクティビティを開くことができるため、署名します。 試みています。 Google でこのエラーの答えを検索したところ、(ご想像のとおり) スタックオーバーフロースレッド. 問題を投稿した開発者は、私と同じ問題に遭遇しました (ただし、彼は実際にアプリを開発中だった)。 彼の問題は、次のコードを実行しようとしたときに発生しました。

<span >Intentspan><span > mainIntent span><span >=span><span >newspan><span >Intentspan><span >(span><span >Intentspan><span >.span><span >ACTION_MAINspan><span >,span><span >nullspan><span >);span><span >mainIntentspan><span >.span><span >addCategoryspan><span >(span><span >Intentspan><span >.span><span >CATEGORY_LAUNCHERspan><span >);span><span >Intentspan><span > pickIntent span><span >=span><span >newspan><span >Intentspan><span >(span><span >Intentspan><span >.span><span >ACTION_PICK_ACTIVITYspan><span >);span><span >pickIntentspan><span >.span><span >putExtraspan><span >(span><span >Intentspan><span >.span><span >EXTRA_TITLEspan><span >,span><span >"Pick App to Play in"span><span >);span><span >pickIntentspan><span >.span><span >putExtraspan><span >(span><span >Intentspan><span >.span><span >EXTRA_INTENTspan><span >,span><span > mainIntentspan><span >);span><span >thisspan><span >.span><span >startActivityForResultspan><span >(span><span >pickIntentspan><span >,span><span > REQUEST_PICK_APPLICATIONspan><span >);span>

インテント内の文字列と開発者の Web ページから判断すると、ユーザーがメディアを再生するサードパーティ アプリを選択できるようにしようとしていた可能性があります。 ベテラン開発者が提供する修正 コモンズウェア、非常に簡単でした。 意図。 セレクターの作成 の代わりに ACTION_PICK_ACTIVITY. しかし、 なぜ この修正を実装する必要があるでしょうか? なぜ そもそもファーウェイはこの許可を必要としているのでしょうか? なぜ 非常に具体的な Google 検索を使用して StackOverflow で答えを見つける必要がありましたか?


選択のパラドックス

答えを見つけるには、 CommonsWare がバグレポートを提出しました Android のバグ トラッカーで、Google にこの問題の調査を要求しています。 特に開発者は、サードパーティ製アプリによる ACTION_PICK_ACTIVITY へのアクセスを制限するために、文書化されていない権限要件を禁止するよう Google に要求しました。 これらの要件を記入すると、 CTS, ファーウェイはこれらの変更に従うことを余儀なくされることになる。

ただし、正直に言うと、このバグ自体は大したことではありません。 私が試した他のアプリ (Tasker など) ではこの権限を回避できませんでしたが、 要件を満たし、設定アプリ内で特定のアクティビティを起動しましたが、特にがっかりするわけではありませんでした。 結果。 しかし、アンブリ氏の暴言を思い出したとき、このような小さな変更に対処するのは非常にイライラするに違いないと気づきました。 なぜなら、それらはどんなに小さくても間違いなく、合計する、時には頭痛を引き起こすほどです。 設定アプリへの 1 つの小さな変更により、開発者に対して不当な否定的なレビューが行われる可能性があります。 1 つの小さな変更は文書化が不十分で、インターネットで Stack Overflow スレッドを探す必要がありました。 他のデバイスには他にいくつの小さなバグがありますか?

モバイル分野での競争の激化は消費者にとって素晴らしいことであることが証明されていますが、こうした微妙な変化がどのように変化するかを見てからは、 非常に多くの異なる製品ラインが開発者に影響を与える可能性があるため、私は開発者の見解を高く評価するようになりました。 断片化。 選択自体が問題なのではなく、コミュニティがこれらの問題を分類するために十分な活動をしていないということです。 アンブリ氏が記事で示唆したように、おそらく Android 開発者は独自のバージョンの caniuse.com または sdkcritic.com すべての不明瞭なバグを 1 つのデータベースに収集します。 他の唯一の選択肢は、OEM にこれらの変更を適切に文書化するか、最初から変更を中止してもらうことですが、 頑張ってください。

フィーチャー画像のクレジット: オープンシグナル