2017-09-29 7 views
0

ホワイトラベルアプリケーション(この記事の後半にある製品)を準備しており、非常に優れたアーキテクチャを設定したいと考えています。これにより、デザインを変更して機能を有効にして新しいクライアントを簡単に設定できます...ホワイトラベルアプリケーションの構造/アーキテクチャとは

私はいくつかのサーバー(開発、プリプロダクト、プロダクト)を持っていますので、フレーバーサイズserverが製品にあり、flavorDimension clientクライアント側にあります。

私はこの解決策を考えました: 1つのgitと1つのgitを製品に設定します。

クライアントはgitサブモジュールによって製品コードにアクセスできます。これにより、クライアントから特定のコードと製品のソースコードを分離することができます。

Git -> Client 1 
    Submodule -> Product v1 
Git -> Client 2 
    Submodule -> Product v1.2 

... 

Git -> Product v1.4 

しかし、すべて正しく実行する方法に問題があります。 flavorDimensions clientの使用は、ビルド前に私のサブモジュールからアプリケーションモジュールにコピーペースト(グラデーション付き)を行う必要があるため難しいです。 この構造の生成は、毎回同期する必要があるため、Gradleを破棄します。 (Androidスタジオでは今すぐ同期のフラグが設定されています)

私は自分自身に頼んでいい建築ですか?どう思いますか ?

他のアイデアや実装方法はありますか?

ご協力いただきありがとうございます。

答えて

0

Hmm interesting take it。 私は似たようなことをしましたが、それほど好きではありません。私はデルタだけの味を使っています。たとえば、テーマ、スキン、app_icons、Strings.xmlなどです。レイアウトやアクティビティのバリエーションは多少ありますが、追加の味がCIプロセスを大幅に遅くするため、さまざまな顧客展開のコードのメンテナンスを最小限に抑えるために全般的に役立ちます。

しかし、あなたがしていることの1つの重要な違いは、プラットフォームを構築していないということです(誰もが同じコードGITリポジトリとAPIサーバを使用しています。

これはメンテナンスの悪夢のように聞こえますが、顧客が製品の味のためにコードベースにアクセスする必要がある場合は、意味があると思います。コードはあなたの製品であるが、あなたは顧客のために再仕上げをしているのだろうか?

どうやら、あなたは私にあなたの推論の笑を尋ねることを求めていない。アーキテクチャー・ソリューションについて説明します。ここに私の考えがあります。

それぞれのフォルダを、現在のモジュールとまったく同じ新しいモジュール構造にコピーしますが、パッケージ名を少し変更してGITプッシュを実行するタスクを作成します。 Gradleからbashファイルを実行できるので、スクリプトを作成して相対パスから実行するか、Gradleファイル自体に直接書き込むことができます。 "COM:> ext.libs {gsonのような、そのファイルに依存関係を入れて - する

だから私はlibs.gradle

のような別の依存関係ファイルを持っている私のGradleを更新します。何でも:バージョン "} - > ../libs.gradle から適用されます - >依存関係{libs.gson、など。}

だから私はあなたのビルドタスクが

を行うだろうと仮定します - >名前を変更する必要がある場合、新しい名前でファイルを正しくコピーして、すべてのソースから新しいモジュールを作成します。- > Mavenサーバーを使用している場合は、コンパイル済みモジュールのaarまたはjarをデプロイします。 - >新しい動的グラデルファイルlibs.gradleを作成します。更新された現在のlibs.gradleファイルを置き換えて、デプロイされた成果物へのポインタ または作成済みモジュール - > gradlesyncを実行すると、assembleReleaseを実行した後、git pushなどを実行できます。

これらはすべて、ターミナルから同期化してコマンドにローカライズすることができます。フレーバーはビルドプロセスの一部であるため、この領域では役に立たないかもしれませんので、事前ビルドを行うためのタスクを作成できる事前ビルドプロセスが必要ですが、キーは依存関係のパッケージ化とlibs.gradleファイルの更新ですフレーバーごとに置き換えることを確認してください。または、フレーバーを修正した場合は、各フレーバーごとに特定のlibs.gradleを作成し、コンパイルされた依存関係に基づいて更新することができます。

あなたの全体像はわかりませんが、それはすべて実行可能です。希望が役立ちます。がんばろう。

+0

gitへのクライアントへのアクセスに関しては、彼が私たちともう仕事をしないかどうか尋ねると簡単です。彼にはソースコードがありますが、それは製品だと考えています。特定の部分へのアクセスしか持たないため、各クライアント間のgitが異なります。 私たちの製品でタグを使用すると、それを維持するのは桁外れだとは思わない。例:製品v1.2のClient1これにより、店舗での展開中に正確なバージョンの製品を入手することが可能になり、製品のバージョンを知っているため問題が発生した場合にバグの解決を簡単にすることができます。 – Julien

+0

私は仕事の構成に完全に同意します。 「Gradle Sync now」でどのようなタスクが使用されているかを確認し、一度自分のコピー(buildSrc(依存関係、バージョン管理...)とsrc(製品))を実行することができます。 私はライブラリを使ってクライアントの製品。それはより簡単になります。私はリソースを変更するだけです。マニフェストでライブラリアクティビティを使用することが可能かどうかをテストする必要があります。 – Julien

+0

もちろん、bash gradlew --recompile-scriptsやbash gradlew --refresh-dependenciesを試すこともできますが、すべての依存関係を強制的に取り戻し、遅くなる可能性があります。しかし、あなたはGIT部分の計画があるように聞こえるので、残りの部分は依存関係を別のファイルに抽出し、libs.gradleファイルをフレーバーで管理するだけです。がんばろう。 – Sam

関連する問題