DUICUO

すごい!TikTokのオープンソースプラットフォームからのもう一つの傑作。

誰もがDouyin(TikTok)を愛用しており、Douyinには優秀な技術チームがいることをご存知でしょう。アプリ開発に加えて、 BoostMultiDexをはじめとするいくつかのソリューションをオープンソース化しています。

BoostMultiDex は、低バージョンの Android デバイス (4.X 以下、SDK < 21) に複数の DEX をすばやくロードするためのソリューションです。

背景

古いバージョンのAndroidデバイス(4.X以下、SDK 21未満)では、Javaランタイム環境としてDalvik仮想マシンが使用されていることが分かっています。上位バージョンと比較すると、インストールまたはアップグレード後のコールドブート時間が長くなることが最大の問題です。

これはユーザーエクスペリエンスに大きな影響を与えます。特に海外、東南アジアやラテンアメリカといった地域では、依然としてローエンドデバイスが多数存在しています。4.X未満のバージョンを使用しているユーザーは比較的少ないものの、数億人のユーザーを抱えるTikTokのようなアプリの場合、10%でも数千万人に相当します。そのため、ローエンド市場への参入を目指す場合、これらのユーザーのユーザーエクスペリエンスとアップグレード体験は極めて重要であり、無視することはできません。

この問題の根本的な原因は、MultiDex の初回インストールまたはアップグレードに非常に長い時間がかかることにあります。この問題に対処するため、Dalvik 仮想マシンの基盤となるシステムメカニズムを徹底的に調査し、DEX 関連の処理ロジックを再設計しました。そして最終的に、古い Android バージョンのユーザーのアップグレードとインストールのエクスペリエンスを向上させる BoostMultiDex ソリューションをリリースしました。

[[344078]]

技術的なポイント

BoostMultiDex ソリューションの主な技術的実装ポイントは次のとおりです。

  1. 隠されたシステム関数を利用することで、生の DEX バイトコードが直接ロードされ、ODEX の時間のかかる性質を回避します。

  2. マルチレベルロードは、DEX バイトコード、DEX ファイル、ODEX ファイルから最も適切な出力を選択してアプリケーションを起動します。

  3. OPT を別のプロセスで実行し、適切な割り込みおよび回復メカニズムを実装します。

さらに重要なのは、BoostMultiDexが世界中の数億人のTikTokユーザーで検証済みであり、様々な国や環境のAndroidデバイスをカバーしていることです。現在、業界でこれほど広範なリーチを達成できる大規模アプリはほとんどありません。これにより、様々な特殊な互換性の問題を解決し、技術的ソリューションの安定性を最大限に確保することができました。

クイックアクセス

build.gradle の依存関係セクションに依存関係を追加します。

  1. 依存関係 {
  2. ……
  3. // 具体的なバージョン番号については、アプリのデモを参照してください 
  4. 実装'com.bytedance.boost_multidex:boost_multidex:${ARTIFACT_VERSION}'  
  5. }

公式の MultiDex と同様に、Application.attachBaseContext の最初に初期化できます。

  1. 公共 クラスYourApplicationは Applicationを拡張します{
  2.  
  3. @オーバーライド 
  4. 保護された  void attachBaseContext(コンテキストベース) {
  5. super .attachBaseContext(base);
  6.          
  7. BoostMultiDex.install(ベース);
  8.          
  9. ……
  10. }

コンパイルとビルド

ご自身でコンパイルしてパッケージ化する場合は、armeabi アーキテクチャをサポートするために R16B バージョンの NDK を使用する必要があります。必要ない場合は、boost_multidex/build.gradle でこの依存関係を直接削除できます。

ローカル AAR パッケージをビルドするには、次のコマンドを実行します。

  1. ./gradlew :boost_multidex:assembleRelease

出力はboost_multidex/build/outputs/aar/boost_multidex-release.aarです。

パフォーマンス比較

上記のデータはDouyinで測定されました。APKには6つのセカンダリDEXが含まれています。BoostMultiDexソリューションは、公式MultiDexソリューションと比較して処理時間を大幅に最適化し、元の11%から17%にまで短縮されていることがわかります。これは、BoostMultiDexが元の処理時間を80%以上短縮していることを意味します。さらに、公式MultiDexソリューションでは、あるデバイスモデルがクラッシュし、起動に失敗したことが確認されました。BoostMultiDexを使用することで、これらのデバイスを再起動できるようになります。

パフォーマンスの比較は次のとおりです。

プロジェクトアドレス: https://github.com/bytedance/BoostMultiDex