全体的に、Android アプリは iOS アプリよりも軽量である傾向があることがわかりました。そこで私たちは開発者に何が原因なのかを尋ねました。

すべては昼休み中の FrAndroid 編集長ロマンとの会話から始まりました。この老人は毎日 2 台のスマートフォンを使用しています。ワンプラス5そして… iPhone 7 — このユートピアは、Android と iOS の間の平和を説くタイプです。

私たちの友人であるサムスン、グーグル、アップル、カストラマ、そして通りのインド料理レストランから送られてきた最新の小切手を現金化する問題について話し合っているとき、彼がフェイスブックを激しく非難しているのが聞こえた。より正確に言えば、ソーシャル ネットワークの iOS アプリケーションのあまりに大きすぎる重量については、211 MB、それ以下ではありません。

iOS アプリは重くなる傾向があります。

驚きが終わったら、私は急いでこの数値を自分の端末上の Facebook アプリケーションが占有しているストレージ容量と比較しました (ファーウェイP9)。インストールすると、177 MB を占有します (データとキャッシュは含まれません)。 OnePlus 5 でも同じ結果が得られました。サムスンギャラクシーS8など名誉9、すべて Android Nougat の下にあります。したがって、Facebook の iOS バージョンと Android バージョンの間には 34 MB という大きな違いが得られます。

他のアプリケーションとさらに比較すると、非常に明確な傾向が明らかになります。iOS アプリケーションは、ほとんどの場合、Android 上の対応するアプリケーションよりも重いです。ただし、違いが最も顕著なのは Facebook アプリケーション (Facebook、Messenger、WhatsApp、Instagram) であることに注意してください。

iPhone 7名誉9ファーウェイP9サムスンギャラクシーS8
フェイスブック211月177月177月177月
クロム60.6ヶ月168月168月168月
ツイッター114,691.58月87.81月88.62月
電車線34.8月19.36月19.37月19.32月
Netflix66.7ヶ月54.47月51.10月50.93月
YouTube83.8月63.29月63.31月72,36月
ワッツアップ102.6月51.55月50.39月50.44月
レモンド.fr37.9ヶ月22.04月26.48月22.01月
インスタグラム73.4月58.93月58.07月57.23月

注意: この表で引用されているすべての数値は、端末にイ​​ンストールされたアプリケーションの重みを指しており、Play ストアと App Store に表示されるアプリケーションの重みではありません。これらは大きく異なります。

これらの結果を考慮すると、次のような疑問が生じます。一般的に Android アプリケーションは iOS よりも小さいのはなぜですか?

これについて検討する前に、混乱を引き起こす可能性のあるいくつかの点を明確にしましょう。まず第一に、Android スマートフォンが必ずしも同じネイティブ コード (32 ビットまたは 64 ビット) を持っているとは限らず、同じリソースを使用していないか、相互に関連して十分に更新されていないため、Android スマートフォン間に違いが見られるのはごく普通のことです。

例外クロム

さらに、上の表では、Chrome が奇妙な例外であり、Android では iOS よりもほぼ 3 倍重いことに気づいたかもしれません。これは主に、Google のブラウザが強化され続けている Android に比べて iPhone では提供される機能が少ないという事実によって説明されます。さらに、iOS では、Chrome は、iOS に統合された HTML レンダリング エンジン (Safari、WebKit と同じ) を使用する必要があります。HTML レンダリング エンジンを使用すると、コード行や Web ページのさまざまな画像形式を明確にレンダリングできます。

言い換えれば、iOS 上の Chrome は Safari 以外の何も提供しませんが、インターフェイスが異なります。

それでは、この論文の本当の主題に取り組んでみましょう。私を啓発するために、両方のオペレーティング システムで動作している数人の開発者が私を助けてくれました。彼らは皆、熱心に時間をかけて、アプリケーションの重みの違いの理由を私に説明してくれました。

これらの議論で特に際立っているのは、Android アプリケーションが iOS よりも軽い傾向にある理由を、総合すると説明できるたくさんの理由があるということです。したがって、たとえここでの目的がこの主題の普及であるとしても、単一の要因だけを引用することは避けます。

私の連絡先の一人として、エドゥアール・マルケスがいます。FrAndroidと定期的に連携しています— «Android は、できるだけ多くの人がアクセスできるようにするという考えに文化的に根付いています。」。彼は特に次の例を挙げています。Android Go、Android の軽量バージョン、彼の主張を裏付けるために。

そして、この最小化への欲求は新しいものではありません。なぜなら、少なくとも 2013 年の Android 4.4 KitKat 以降、この方向に進むための最適化と API が開発者に利用可能になっているからです。それでは、アプリケーションを軽量化するにはどうすればよいでしょうか?

Apple のプログラミング言語にはまだ道がある

以前の iOS では、プログラミング言語は Objective-C でした。しかし、これは数年前から Apple が導入した新しい言語である Swift に取って代わられてきました。Swift はより現代的で開発者のニーズにより適合しており、特にオープンソースであるため非常に人気があります。一言で言えば、それは彼らの生活を大幅に簡素化します。しかし、Swift は現時点では成熟度に欠けています。

Swift は Objective-C を置き換えます。

私の連絡先の一人である RxVincent は、Apple はまだ Swift を「」とは考えていない、と指摘しています。安定した」。別の開発者である Antoine Kuhn 氏は、この言語は非常に最近のものであるため、依然として定期的に変更される傾向があると付け加えています。その結果、iOS システムには適切なソフトウェアがまだ含まれていません。つまり、iOS システムには実行環境 (「」と呼ばれます) がありません。ランタイム »)Swiftと互換性があります。言い換えると、iPhone にはこのプログラミング言語を実行するための適切なツールキットがありません一方で、Objective-C を実行するための準備は正しく行われています。

したがって、システムがそれを実行できるようにするには、Swift でコーディングされた iOS アプリケーション自体にランタイムライブラリの形に適しています。ただし、私の情報源によると、この余剰分の重さは 10 ~ 15 MB で、最大 30 MB に達する可能性があります。次のような開発者フォーラムでこのテーマに関する議論が行われることは珍しくありません。イチ、 またはイチ。ただし、Apple はランタイムSwift の将来のバージョンではネイティブです (現在は v.3)。

Android は Kotlin に賭けています

Android 統合開発環境 (IDE) である Android Studio も、2016 年から新しいプログラミング言語 Kotlin をサポートしています。これまで、この OS 上のすべてのアプリケーションは、確かにより成熟した言語である Java で作られていましたが、多くの点で非常に時代遅れでした。

Kotlin は開発者にとっても人気のある言語です。

Kotlin も、Swift と同様に、より現代的なため、開発者に非常に人気のある言語です。ただし、Kotlin の利点は、コードの実行時に Java と同じ言語でコンパイルされるため、最初から Android システムと互換性があることです。まあ、ほぼ...

Kotlin は Java よりも多くのオプションを提供するため、ランタイム特定の非常に特殊な機能を実行するためにアプリケーションによって追加的に埋め込まれます。しかし、これはほとんど重さがありません。100キロバイト。 Swift の多くの MB からは程遠いです。

コードを最適化する

エドゥアール・マルケス氏は、Google が望む最小化に立ち戻り、マウンテンビュー会社は次のように述べています。はアプリケーションのサイズが非常に重要であると長年主張してきました」。そして、これらは単なる空虚な言葉ではありません。実際、スペースを節約するためにいくつかのソリューションが利用可能です。

そのうちの 2 人、エドゥアール マルケスと RxVincent が私に話してくれました。プロガードツールAndroid Studio によって提供されます。これは、Play ストアに配信される前にアプリケーションのコードを変換できるため、非常に実用的です。 Proguard は特にコードの暗号化に使用されますが、最も関心のある変更は「縮小」です。

このプロセス中に、Proguard はコードの各要素 (メソッド、変数、オブジェクト、パッケージなど) を処理し、それらの名前をできるだけ短くします。 「これは愚かなことのように思えるかもしれませんが、ソース コードのメモリを大量に節約できます。» と RxVincent は説明します。例として、アプリケーション —エクイセンスと呼ばれる— 彼が取り組んでいるのは、Proguard でコンパイルする前と後で 11.4 MB と 7.9 MB です。

また、iOS 統合開発環境である XCode には Proguard に相当するものが提供されていません。ここで、Android アプリケーションと iOS アプリケーションの重さの違いについて、別の潜在的な理由が考えられます。

これに加えて、Play ストアでは、ダウンロードされるさまざまな端末の画面解像度、アーキテクチャ、Android バージョンに適応するために、同じアプリケーションのさまざまなバージョンを展開することができます。

アイコンの重さを制限する

次に、アプリケーション内の画像、より正確にはアイコンの問題に対処しましょう。 iOS であっても Android であっても、さまざまなサイズのアイコンを PNG 形式で提供する必要があります。ただし、ご想像のとおり、これらのファイルはすべてかなりの重量になる可能性があります。ただし、しばらくの間、Android はサポートされています。ベクター描画可能— SVG (Adaptable Vector Graphics) に非常に近く、特にこのエコシステムに適応した形式です。

私が今書いたことが理解できないと思われたとしても、心配しないでください。実際には非常に簡単に理解できます。 VectorDrawable ファイルは、大まかに言うと、情報を失わずに拡大または縮小できる画像です。したがって、1 つのファイルで、必要なアイコン サイズがすべて揃います。つまり、たとえば 5 つのアイコン サイズに対して 5 つの異なるファイルを用意するのではなく、それらをすべて 1 か所にまとめておくことができます。

iOS にも同様のメカニズムがありますが、いくつかの情報筋によると、これは VectorDrawable ほどよく考えられていない、統合されていないとのことです。

図書館

Ludovic Roland 氏、Android 開発者は「理論的な知識iOS の » では、アプリケーションに埋め込まれたライブラリがその重量に及ぼす影響を強調しています。これらにより、開発者に視聴率を示したり、送信したりするなど、さまざまな機能を追加できます。押す、ディスプレイ広告…など。

ライブラリは Android アプリケーションと iOS アプリケーションの両方に存在します。ただし、それぞれの重みが数百キロバイト異なるだけで十分であるため、最終的には、iOS と Android の間で非常に異なるボリュームが得られます。上の表で観察された結果を考慮すると、iPhone 7 にインストールされているアプリケーションには、他の端末に比べてわずかに重いライブラリが含まれていると推測できます。

覚えておくべきこと

確かに、Android アプリケーションと iOS アプリケーションの重さの違いを説明する理由は他にもたくさんあり、おそらくすべてをリストすることはできません。さらに、これは厳密な科学ではありません。Google の OS ではアプリケーションが重くなる場合があります。覚えておく必要があるのは、適切に適応されたプログラミング言語を使用することに加えて、Android の開発環境には、賢く活用することでさまざまな組み合わせが用意されているということです。アプリケーションの重量を大幅に軽減します

一方、Android アプリケーションの管理は一般に iOS よりも複雑であるため、監視がより困難になります。さらに、Apple のオペレーティング システムはより安全であることが知られていますが、その間、ロマンは依然として Facebook アプリケーションの膨大な量に動揺しています...

私への回答に同意してくれたすべての開発者、特にEdouard Marquez氏、RxVincent氏、Antoine Kuhn氏、Ludovic Roland氏に感謝します。