Android--コンポーネント化とプラグイン化


1.コンポーネント開発
コンポーネント化開発とは、1つのappを複数のモジュールに分割することであり、各モジュールは1つのコンポーネント(Module)であり、開発の過程でこれらのコンポーネントを相互に依存させたり、一部のコンポーネントを個別にデバッグしたりすることができるが、最終的に発表されると、これらのコンポーネントを統合してapkに統一することがコンポーネント化開発である.
通常、1つのAppに複数のmoduleを持つことができますが、一般的には1つのmoduleがアプリケーションに設定されているだけで、その他はlibraryに設定されています.コンポーネント化開発は各moduleが実行できるため、開発期間(Debugバージョン)に各moduleがアプリケーションに設定され、リリース時(Releaseバージョン)にlibsに設定されてマージされます.
コンポーネントは2つの大きなクラスに分けることができます.1つはアプリケーションコンポーネントで、1つはlibsコンポーネントで、アプリケーションコンポーネントは実行可能なappです.libsコンポーネントはアプリケーションの依存として使用できますが、自身はプログラム実行の存在として使用できません.
コンポーネント化のメリット:
  • Moduleごとに開発を個別にデバッグでき、コンパイル時間
  • を節約できます.
  • 個別モジュール開発共有可能ツールクラス、ネットワークライブラリなど
  • は、テストにおいて単一モジュールを迅速にテストすることができる
  • 会社の業務は重くて絶えずモジュールを多重化することができて、開発時間の
  • を節約します
  • 個人にとって、個人の開発ツール
  • を蓄積することができる
    コンポーネント化の実装:
    if (isDebug.toBoolean()) {
        apply plugin: 'com.android.application'
    } else {
        apply plugin: 'com.android.library'
    }

    各moduleのgradleに上記のコードを追加して、サブエンジニアリングの動作を切り替えます.
    同様に、サブエンジニアリングのsrcディレクトリの下にManifestを2部必要とする.xmlファイルは、サブエンジニアリングのgradleで構成されます.
    android {
        sourceSets {
            main {
                if(isDebug.toBoolean()) {
                    manifest.srcFile 'src/debug/AndroidManifest.xml'
                } else {
                    manifest.srcFile 'src/release/AndroidManifest.xml'
                }
            }
        }
    }

    コンポーネント化では、次のような問題が発生します.
    1、moduleにおけるアプリケーション呼び出しの問題
    2、moduleにまたがるActivityまたはFragmentジャンプの問題
    3、AARまたはlibraryプロジェクトの重複依存
    4、資源名の衝突
    解決方法:
    第1点:インフラストラクチャ層構築BaseApplication、統一使用
    2点目:RListを構築し、パッケージ名を動的にロードしてジャンプします.
    4点目:ネーミングmoduelの先頭に従ってネーミング
    2.プラグイン開発
    ベース、ダイナミックロード
    AndroidアプリのJAvaファイルはコンパイル期間中にjavacコマンドでコンパイルされます.classファイル、最後にすべてを.classファイルをコンパイルします.dexファイルは.apkバッグの中.ダイナミックロードとは、実行時にプラグインapkをclassloaderに直接ロードする技術です.
    コードのロードについては、プラグインコードをロードするDexClassLoaderが用意されています.開発者は、各プラグインにDexClassLoaderを割り当てることもできます(これは現在最も一般的な方法です).また、現在の実行環境のclassloaderにプラグインを動的にロードすることもできます.
    プラグイン化開発のメリット
  • ホストとプラグインは別々にコンパイルされ、コンパイル速度は
  • 加速する.
  • 同時開発に有利
  • 動的更新プラグイン
  • オンデマンドダウンロードモジュール
  • 解決方法数または変数数が爆発し、単を超えた.dex制限(65536)
  • 現在githubには多くのオープンソースプラグイン化フレームワークがありますが、多くのピットが埋め込まれていません.demoは簡単に見えますが、実際の工事ではさまざまな問題が発生します.大手企業の成熟したプラグイン化フレームワークにはオープンソースがありません.
    3.コンポーネント化とプラグイン化の違い
    プラグイン化は〔実行時〕であり,コンポーネント化は〔コンパイル時〕である.すなわち,プラグイン化はマルチAPKに基づいているが,コンポーネント化は本質的に1つのAPKしかない.一般的なプラグイン化は、bugを動的に修復したり、モジュールを動的に更新したりするために使用され、比較的ブラックテクノロジーが多い.