AndroidマルチModuleが開発し、最終的にaarにパッケージ化して提供


文書ディレクトリ
  • 前言
  • 問題
  • ソリューション
  • 前言
    現在、Android StudioによるマルチModuleの開発は非常に一般的であり、プロジェクト業務の分離を容易にするだけでなく、基礎コードの多重化をうまく実現することができます.
    に質問
    私たちはマルチModuleの開発後、apkを直接パッケージ化するならまだしも、gradleコマンドやASグラフィックスインタフェースを通じてパッケージ化apkを直接実現することができます.しかし、もし私たちがただ1つの機能モジュールを提供するために、他の開発者のアクセスを便利にするために、私たちは複数のModuleを使用して、最終的に1つのaarだけを外部に提供することができますか?各Moduleが1つのaarを生成するのではなく、
    ソリューション
    githubには似たようなプロジェクトがあり、gradleのパッケージタスクの異なるtaskにtaskを挿入し、複数のModuleを最終的に1つのaarにパッケージ化することを実現することが考えられています.プロジェクトアドレスの欠点:Android gradleのバージョンの更新が速く、メンテナンスコストが大きすぎて、作者もメンテナンスコストが大きいのを見ているはずなので、後でメンテナンスしないでしょう.
    需要の絶え間ない緊迫の下で、最終的に私たちは別の方法で実現して、構想は以下の通りです:aarをパッケージ化する前に、まず複数のModuleを1つのModuleに統合して、1つのModuleに統合した後にgradleを通じてaarをパッケージ化して、このようにパッケージ化するのは1つのaarです.主に次の2つの問題を解決する必要があります.
  • リソースファイルのマージ
  • 複数のModuleの下にあるManifestファイルのラベルのマージ
  • リソースのマージは、同じModuleにコピーする前に、異なるModuleの下のリソースファイルの名前を変更すればよいので、開発時に異なるModuleに対して異なる接頭辞を使用して区別すると、マージがより便利になります.Manifestの合併は、依存する3つの側が私たちを合併する必要はありません(アクセス者が依存するとASが自動的に3つの側を合併します)、主に私たち自身のModuleの中でManifestの合併で、主に以下のいくつかの考え方があります:
  • 現在、すべてのラベルをModuleに統合することもできます.aarをパッケージ化するときに指定したManifestでいいです.
  • Android Developers上のManifestマージルールに従って、マージスクリプト
  • を作成します.
  • Android gradleを使用したManifest合併task
  • ここでは主に第3の考え方を述べ、対応するtaskはprocessReleaseManifestであり、手順は以下の通りである.
  • は、各ModuleのassembleReleaseを実行し、各Moduleに対してaar
  • を生成する.
  • アプリケーションのModuleを新規作成します.すなわち、apply plugin: 'com.android.application'はapkのModuleを生成します(このModuleだけがprocessReleaseManifestというtaskを持つためです).
  • Moduleを変更するprocessReleaseManifestを実行すると、buildディレクトリの下のファイルに生成されたManifestファイルが見つかります(ここでは、Android gradleの大バージョンがアップグレードされるたびに、生成されたManifestディレクトリが異なることに注意してください).
  • このManifestと統合されたリソースファイル/Javaソースファイルを介してModuleを構成し、assembleReleaseによってaar
  • にパッケージ化する
    以上の手順はgradleスクリプトで一時ディレクトリの下で行うことができ、パッケージングが完了した後、削除を行い、最終生成物のみを出力し、自動化を実現する.