标签: android-sourcesets

使用"initWith"为"productFlavors"和"sourceSets"复制构造函数

参考这个答案.是否可以像链接答案中的那个一样创建productFlavorssourceSets使用复制构造函数initWith.那一个很有用buildTypes.

因为buildTypes它是这样做的:

debugfree.initWith(buildTypes.debug)
Run Code Online (Sandbox Code Playgroud)

这是可能的productFlavorssourceSets呢?

android gradle android-productflavors android-build-type android-sourcesets

11
推荐指数
0
解决办法
282
查看次数

对具有完全相同配置的许多源集中的一些进行分组

可以说我有以下内容sourceSets:

sourceSets {
    flavor1 {
        assets.srcDirs = ['repo-assets/flavor1']
        res.srcDirs = ['repo-res/flavor1']
    }
    flavor2 {
        assets.srcDirs = ['repo-assets/flavor2']
        res.srcDirs = ['repo-res/flavor2']
    }
    flavor3 {
        assets.srcDirs = ['repo-assets/flavor1']
        res.srcDirs = ['repo-res/flavor1']
    }
    flavor4 {
        assets.srcDirs = ['repo-assets/flavor2']
        res.srcDirs = ['repo-res/flavor2']
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你注意到flavor1并且flavor3有相同的srcDirs,那么flavor2flavor4.


尝试可能性#1

我试图找出是否有办法通过使用这样的东西来避免冗余:

sourceSets {
    flavor1, flavor3 {
        assets.srcDirs = ['repo-assets/flavor1']
        res.srcDirs = ['repo-res/flavor1']
    }
    flavor2, flavor4 {
        assets.srcDirs = ['repo-assets/flavor2']
        res.srcDirs = ['repo-res/flavor2']
    }
}
Run Code Online (Sandbox Code Playgroud)

以上不起作用(已经尝试过).寻找类似的东西,这样我就可以提供一套通用sourceDirs的一套口味.有人试过做类似的事情,可以提供一些指示吗?


尝试可能性#2 …

android gradle android-studio android-productflavors android-sourcesets

5
推荐指数
1
解决办法
387
查看次数

使用CSV/TXT文件中的名称列表(带属性)动态生成productFlavors和sourceSets

这个问题继续我的另一个问题,我想进一步改进.

我能够sourceSets使用以下代码对flavor(具有通用配置)进行分组:

(从上面链接问题的天才那里得到它)

import com.android.build.gradle.api.AndroidSourceSet
android {
    sourceSets {
        [flavor2, flavor4].each { AndroidSourceSet ss ->
            ss.assets.srcDirs = ['repo-assets/flavor2']
            ss.res.srcDirs = ['repo-res/flavor2']
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我想知道列表[flavor2, flavor4]是否可以从以下任何一个中提取:

  • 一个XML文件,我可以通过它来迭代以获得所有的味道(我将放在那里)
  • 一个CSV文件,我可以通过它迭代并获取值.
  • 一个自定义类,我可以在一个单独的文件中编写,并从类中的静态成员中获取数据.

除了风味名称,我打算将以下内容存储在外部源(上面的一个)中:

  • 应用程序ID(我将拉到productFlavors)
  • 广告单元ID(每种风格两个)
  • 一些其他自定义值,如类别等.

PORPOSE: 我想写一个通用的代码片段来迭代并动态创建productFlavorssourceSets.我已经推广sourceSets到几乎90%,一个块现在足以满足各种口味.

它现在看起来像这样:

sourceSets {
    [flavor1, flavor2, flavor3 ...].each { AndroidSourceSet ss ->
                ss.assets.srcDirs = ['repo-assets/' + ss.name.split('_')[0]]
                ss.res.srcDirs = ['repo-mipmap/' + ss.name.split('_')[0] , 'repo-strings/' + ss.name]
            }
}
Run Code Online (Sandbox Code Playgroud)

也想像productFlavors上面提到的那样做同样的事情.

STUCK …

android android-build android-gradle-plugin android-productflavors android-sourcesets

5
推荐指数
1
解决办法
917
查看次数

Android Gradle插件无法识别SourceSet'commonTest'。也许您拼错了什么?

看似与该问题相同的根本原因,但那里的答案对我不起作用。我有一个自定义的源集commonTest,用于在testandroidTest源集之间共享某些测试实用程序代码。这是我相关的项目配置:

sourceSets {
    // This lets us write test utility code that can be used by both unit tests and android tests
    commonTest {
        java
    }
    test {
        java.srcDirs += commonTest.java.srcDirs
    }
    androidTest {
        java.srcDirs += commonTest.java.srcDirs
    }
}
Run Code Online (Sandbox Code Playgroud)

这在AGP 3.0.1上可以正常使用,但在AGP 3.1.0上无法使用。不再支持自定义源集吗?

android source-sets android-gradle-plugin android-sourcesets

5
推荐指数
1
解决办法
3607
查看次数

未为多个布局文件夹生成数据绑定类

在 Android studio 3.6 中,创建新项目后,我无法为多个文件夹创建绑定生成的类。

我有多个布局文件夹:

res/layout
res/layouts/dashboard
res/layouts/notifications
Run Code Online (Sandbox Code Playgroud)

我能够为

资源/布局

但它不适用于其他布局文件夹。

应用程序gradle文件:

dataBinding{
        enabled = true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
    sourceSets {
        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
            java.srcDirs = ['src/main/java']
            res.srcDirs =
                    [
                            'src/main/res/layouts/notification',
                            'src/main/res/layout/dashboard',
                            'src/main/res/layouts',
                            'src/main/res/layout',
                            'src/main/res'
                    ]
            assets.srcDirs = ['src/main/assets', 'src/main/assets/']
        }
    }
Run Code Online (Sandbox Code Playgroud)

资源文件夹结构:

在此处输入图片说明

我附上了我在 android studio 3.6 中创建的示例项目。 源代码链接

data-binding android android-databinding android-sourcesets android-studio-3.6

5
推荐指数
1
解决办法
520
查看次数