Androidスタジオとフレーバーを使用するためのセットアップに移動した古いEclipseプロジェクトがあります。別のJava私のフレーバー間のファイル。
私のプロジェクトのセットアップはこれです:
ProjectRoot
+- acitonbarsherlock
+- facebook
+- myLib1
+- myProject
+- src
+- commonFiles
+- flavor1
+- flavor2
+- res
+- flavor1
+- flavor2
MyProject gradleファイルの内部Androidクロージャーは次のようになります。
Android {
compileSdkVersion 17
buildToolsVersion "18.0.1"
signingConfigs {
...
}
productFlavors {
flavor2 {
}
flavor1 {
}
}
sourceSets{
main {
manifest.srcFile 'AndroidManifest.xml'
Java.srcDirs = ['src/commonFiles/Java']
resources.srcDirs = ['src/commonFiles/Java']
aidl.srcDirs = ['src/commonFiles/Java']
renderscript.srcDirs = ['src/commonFiles/Java']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
flavor2 {
manifest.srcFile 'AndroidManifest-flavor2.xml'
res.srcDirs = ['res-flavor2', 'res']
Java.srcDirs = ['src/flavor2/Java','src/commonFiles/Java']
resources.srcDirs = ['src/flavor2/Java','src/commonFiles/Java']
aidl.srcDirs = ['src/flavor2/Java','src/commonFiles/Java']
renderscript.srcDirs = ['src/flavor2/Java','src/commonFiles/Java']
}
flavor1 {
manifest.srcFile 'AndroidManifest.xml'
Java.srcDirs = ['src/flavor1/Java','src/commonFiles/Java']
resources.srcDirs = ['src/flavor1/Java','src/commonFiles/Java']
aidl.srcDirs = ['src/flavor1/Java','src/commonFiles/Java']
renderscript.srcDirs = ['src/flavor1/Java','src/commonFiles/Java']
res.srcDirs = ['res-flavor1','res']
assets.srcDirs = ['assets']
}
// Move the tests to tests/Java, tests/res, etc...
instrumentTest.setRoot('tests')
// Move the build types to build-types/<type>
// For instance, build-types/debug/Java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
このような私の設定では、gradleはflavor1またはflavor2のcommonFilesから継承しようとしているクラスを見つけることができないことについて不平を言っています。
ここで見た他のさまざまなトピックから、ソースセットを定義することすらできない人がいることがわかります。
誰もこれを以前に実験し、これを適切に設定する方法を知っていますか?
カスタムsourceSets
を定義するのではなく、デフォルトのgradle構成を使用する方が良いと思います。慣習が非常に便利であることに気付くまで、私はカスタムソースセットを使用していました。
次のようなものが必要です。
+ src
+ main // this is your common code
+ Java
+ res
+ flavor1
+ Java
+ res
+ flavor2
+ Java
+ res
次に、build.gradle
からソースセットクロージャを削除します。
注:gradle
構成の場合、リソースはマージまたはオーバーライドされますが、すべてのJava
コードは同じクラスパスに配置されます。たとえば、各フレーバーのAndroidManifest.xml
ファイルには、main
のマニフェストファイルとの違いのみが必要です。たとえば、フレーバーにic_launcher
というアセットがある場合、そのようなファイルが存在する場合、mainからのic_launcher
がオーバーライドされます。ただし、main
とフレーバーの両方にファイルHomeActivity.Java
を含めることはできず、ファイルの重複エラーが発生します。
必要に応じて、カスタムsourceSets
およびflavours
(またはbuildTypes
)を使用することもできます。
例として、次のようにGradleファイルに設定できます:
productFlavors {
flavor2 {
}
flavor1 {
}
}
sourceSets{
main {
manifest.srcFile 'AndroidManifest.xml'
Java.srcDirs = ['src/commonFiles/Java']
resources.srcDirs = ['src/commonFiles/Java']
aidl.srcDirs = ['src/commonFiles/Java']
renderscript.srcDirs = ['src/commonFiles/Java']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
flavor1 {
Java.srcDirs = ['src-flavor1']
res.srcDirs = ['res-flavor1']
...
}
}
私のGradleは次のようになります:
productFlavors {
// Still keeping the productFlavors closure in case we decide to add flavors later
normal {
applicationId 'com.akshat'
}
qa {
applicationId 'com.akshat.qa'
}
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
Java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jni.srcDirs = [] // Set empty since we use our own ndkBuild task
jniLibs.srcDirs = ['libs']
}
normal {
Java.srcDirs = ['src_normal']
}
qa{
Java.srcDirs = ['src_qa']
}
そして、これが私のディレクトリ構造です。
MyApplication
- res
- libs
- jni
- src
-com/akshat/
- src_qa
- com/akshat/util/FlavorConst.Java
- src_normal
- com/akshat/util/FlavorConst.Java
この方法は私には有効です。楽しい
sourceSets {
main {
manifest.srcFile 'src/AndroidManifest.xml'
Java.srcDirs = ['src/Java']
resources.srcDirs = ['srs/others']
res.srcDirs = ['src/res']
assets.srcDirs = ['src/assets']
jniLibs.srcDirs = ['jniLibs']
}
development{
res.srcDirs += ['development/src/res']
}
standford{
res.srcDirs += ['standford/src/res']
}
commercial{
res.srcDirs += ['commercial/src/res']
}
}
productFlavors {
development{
flavorDimensions "default"
}
standford{
flavorDimensions "default"
}
commercial{
flavorDimensions "default"
}
}
以下の例のようにコーディングできます
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
res.srcDirs = ['res']
Java.srcDirs = ['src', '../3party/Alohalytics/src/Android/Java', 'ttsearch/jni/out']
assets.srcDirs = ['assets', 'flavors/mwm-ttf-assets']
jniLibs.srcDirs = ['libs', 'jniLibs', 'ttsearch/libs']
}
flavor {
manifest.srcFile 'flavor'
assets.srcDirs = ['flavor/assets']
res.srcDirs = ['flavor/res']
res.srcDirs = ['flavor/res']
....
}
}