ビルドフレーバーの使用 - ソースフォルダーとbuild.gradleを正しく構成する 質問する

ビルドフレーバーの使用 - ソースフォルダーとbuild.gradleを正しく構成する 質問する

ご注意ください:Xavier の回答の後に編集された回答

私は違うものを使ってみていますフレーバーを構築するAndroid Studio の同じアプリケーション プロジェクトに対して。ただし、適切に動作するように構成するのに非常に苦労しているようです。

手順:

  1. 「Test」という名前の新しい Android Studio プロジェクトを作成します。
  2. build.gradle* を開き、次の行を追加します。

    productFlavors {
    flavor1 {
        packageName 'com.android.studio.test.flavor1'
        }
    flavor2 {
        packageName 'com.android.studio.test.flavor2'
        }
    }
    
  3. Android Studioを再起動すると、4つのビルドバリエーションビルドバリアントセクションの下にあります。つまり、これまでのところ、製品フレーバーの設定に成功したということです。**
  4. 新しいソースフォルダを作成しましたフレーバー1ただし、正しいやり方かどうかはわかりません。私がやった方法は次のとおりです。

    • このプロジェクトのパッケージ名は次の通りです:com.foo.test
    • フォルダーを右クリックしますsrc。flavor1 の場合、実際には、構造が となるようにエクスプローラーで個別のフォルダーを作成しましたsrc/flavor1/java/com/foo/test/MainActivity.java
    • 上記はうまくいきました。「java」フォルダはつまり、IDE はそれがアクティブなソース ディレクトリであることを認識しています。また、パッケージは自動的に作成されました。それにもかかわらず、重複したクラスが見つかったという警告が表示されます。スクリーンショットはこちらをご覧ください。
    • flavor2 については、パッケージを手動で作成しようとしましたが、flavor2 の「src」フォルダーが青色になっていないようで、右クリックしたときのオプションが異なり、「新しいパッケージ」は使用できません。画像はこちらをご覧ください。
    • なお、flavor1 では、「res」ディレクトリも作成しました。このディレクトリは青色に変わりますが、それにもかかわらず、異なるフレーバーに異なるリソースを使用したい場合に、Android リソース ファイルまたは Andorid リソース ディレクトリを作成する機能は提供されません。

何か間違ったことをしているのでしょうか? あるいは、何か見落としているのでしょうか? さらに情報が必要な場合はお知らせください。

*私のプロジェクトにはbuild.gradle ファイル。1 つはプロジェクト フォルダーのルート (\GradleTest) にあり、これは空です。2 つ目は \GradleTest のサブフォルダーのルートにあり、これも「GradleTest」(GradleTest-GradleTest) というラベルが付けられています。これは開いたときにすでにコードが含まれていたファイルなので、私が編集したのはこのファイルです。

** Gradleの設定を確認したところ、どうやら自動インポートを使用するだったすでに有効になっています。それにもかかわらず、build.gradleファイルに変更を加えると自動的に更新されないビルドのバリエーション。注記:また、「ビルド - プロジェクトの再構築」や「ビルド - プロジェクトの作成」も試しましたが、うまくいきませんでした。変更を有効にするには、プロジェクトを閉じて再度開く必要があります。

ベストアンサー1

Studio の設定の Gradle セクションで、プロジェクトの自動インポートを有効にすることができます (後でデフォルトで有効にします)。これにより、build.gradle を編集するたびに Studio がそれを再インポートできるようになります。

フレーバーを作成するということは、フレーバーにカスタム コードを使用することを意味するわけではないので、フォルダーは作成しません。 自分で作成する必要があります。

見てみると私のIOトークフレーバーとビルドタイプの値を組み合わせてバリアントを作成する方法がわかります。

Java ソースの場合:

src/main/java
src/flavor1/java
src/debug/java

これら 3 つはすべて 1 つの出力を作成するために使用されます。つまり、同じクラスを定義することはできません。

2 つのフレーバーで同じクラスの異なるバージョンを使用する場合は、両方のフレーバーで作成する必要があります。

src/flavor1/java/com/foo/A.java
src/flavor2/java/com/foo/A.java

そして、src/main/javaのコードでは、

import com.foo.A

選択したフレーバーに応じて、適切なバージョンの com.foo.A が使用されます。

これは、A の両方のバージョンが同じ API を持つ必要があることも意味します (少なくとも、src/main/java/... 内のクラスで使用される API に関しては)。

修正された質問に合わせて編集

さらに、同じ A クラスは、相互に排他的なソース フォルダーにのみ配置することが重要です。この場合、src/flavor1/java と src/flavor2/java は一緒に選択されませんが、main と flavor1 は一緒に選択されます。

異なるフレーバーの異なるバージョンのアクティビティを提供する場合は、それを src/main/java に配置しないでください。

3 つのフレーバーがあり、flavor1 にのみカスタム フレーバーが必要な場合、flavor2 と flavor3 は同じアクティビティを共有し、他の 2 つのアクティビティに共通のソース フォルダーを作成できます。新しいソース フォルダーを作成し、それらを使用するようにソース セットを構成する際の柔軟性は完全にあります。

他の点については、

2番目のフレーバーのソースフォルダが青くないのは正常です。2番目のフレーバーに切り替えると、それを有効にして、その中にパッケージとクラスを作成できるようになります。それまでは、Studioはそれをソースフォルダとして認識しません。将来的には、IDEがそれらを認識できるように改善する予定です。非アクティブソースフォルダー。

res フォルダにリソース ファイルを作成できないのも普通だと思います。メニュー システムは、これらすべての追加のリソース フォルダを処理するように更新されていません。これは後で対応します。

おすすめ記事