2017-06-21 9 views
0

私のアプリには便宜のためにflavoraflavorbという2つの味があります。製品のフレーバとソース階層

productFlavors { 
     flavora { 
      resValue "string", 'app_name', "App Name Flavor A" 
      applicationIdSuffix ".flavora" 
     } 
     flavorb { 
      resValue "string", 'app_name', "App Name Flavor B" 
      applicationIdSuffix ".flavorb" 
     } 
    } 

私はflavoraflavorbは、レイアウトファイルflavor_dependent_layout.xmlとJavaクラスFlavorDependentJavaClassのために異なる実装を使用したい場合を除き、両方の味は、すべて同じレイアウトなどすべて同じJavaコード、すべて同じリソースを、使用したいです。

が、これはそれを行うための正しい方法です:

sourceSets { 
    main { 
     res.srcDirs = ['src/main/res'] 
     java.srcDirs = ['src/main/java'] 
    } 
    flavora { 
     res.srcDirs = ['src/flavora/res', 'src/main/res'] 
     java.srcDirs = ['src/flavora/java', 'src/main/java'] 
    } 
    flavorb { 
     res.srcDirs = ['src/flavorb/res', 'src/main/res'] 
     java.srcDirs = ['src/flavorb/java', 'src/main/java'] 
    } 
} 

そして当然そこから私は、対応するファイルを配置するために必要なフォルダを作成したい、それがすべてうまくいきますか?メソッドを実行しようとすると、1つのフレーバにしか存在しない場合に備えて、両方のフレーバのクラスを含めたことをどうやって知っていますか?

は(?私も `/ srcに/メイン/資産持っているのでまた、私は明示的に資産フォルダを言及する必要があります)

答えて

1

これはそれを行うための正しい方法です:

だけsrc/flavora/res/src/flavora/java/src/flavorb/res/、およびsrc/flavorb/java/を作成し、そこにものを置きます。適切なビルドパスにが自動的にに追加されます。 srcDirsを調整する必要はありません。

私はメソッドを実行しようと、それが唯一例えば、1つの味のために存在する場合にどのように私は両方の味のためのクラスが含まれていたことを知っていますか?

これはビルドエラーです。 Javaコードでは、あなたは味でそれを持っているしたい場合:

  • 同じクラスがmainから参照何がために、そうflavoraflavorb

の両方に存在している必要がありmain

  • に存在することはできませんたとえば、AdStrategyクラスのどこかにsrc/flavora/java/とか、src/flavorb/java/のどこかにある場合は、でもにはAdStrategyがあります。src/main/java/mainAdStrategy(コンストラクタ、メソッドなど)を参照するものは、flavoraflavorbの実装がAdStrategyの両方で存在する必要があります。ビルド時に、flavoraをビルドするときは、src/main/java/src/flavora/java/のツリーが自動的に使用され、mainで参照するものは解決する必要があります(flavorbビルドの場合も同様です)。

  • 関連する問題