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ごとに開発を個別にデバッグでき、コンパイル時間 を節約できます.個別モジュール開発共有可能ツールクラス、ネットワークライブラリなど は、テストにおいて単一モジュールを迅速にテストすることができる 会社の業務は重くて絶えずモジュールを多重化することができて、開発時間の を節約します個人にとって、個人の開発ツール を蓄積することができる
コンポーネント化の実装:
各moduleのgradleに上記のコードを追加して、サブエンジニアリングの動作を切り替えます.
同様に、サブエンジニアリングのsrcディレクトリの下にManifestを2部必要とする.xmlファイルは、サブエンジニアリングのgradleで構成されます.
コンポーネント化では、次のような問題が発生します.
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を動的に修復したり、モジュールを動的に更新したりするために使用され、比較的ブラックテクノロジーが多い.
コンポーネント化開発とは、1つのappを複数のモジュールに分割することであり、各モジュールは1つのコンポーネント(Module)であり、開発の過程でこれらのコンポーネントを相互に依存させたり、一部のコンポーネントを個別にデバッグしたりすることができるが、最終的に発表されると、これらのコンポーネントを統合してapkに統一することがコンポーネント化開発である.
通常、1つのAppに複数のmoduleを持つことができますが、一般的には1つのmoduleがアプリケーションに設定されているだけで、その他はlibraryに設定されています.コンポーネント化開発は各moduleが実行できるため、開発期間(Debugバージョン)に各moduleがアプリケーションに設定され、リリース時(Releaseバージョン)にlibsに設定されてマージされます.
コンポーネントは2つの大きなクラスに分けることができます.1つはアプリケーションコンポーネントで、1つはlibsコンポーネントで、アプリケーションコンポーネントは実行可能なappです.libsコンポーネントはアプリケーションの依存として使用できますが、自身はプログラム実行の存在として使用できません.
コンポーネント化のメリット:
コンポーネント化の実装:
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にプラグインを動的にロードすることもできます.
プラグイン化開発のメリット
3.コンポーネント化とプラグイン化の違い
プラグイン化は〔実行時〕であり,コンポーネント化は〔コンパイル時〕である.すなわち,プラグイン化はマルチAPKに基づいているが,コンポーネント化は本質的に1つのAPKしかない.一般的なプラグイン化は、bugを動的に修復したり、モジュールを動的に更新したりするために使用され、比較的ブラックテクノロジーが多い.