标签: android-productflavors

Android Studio 无法识别多维度风味的测试源目录

我对多维风格的 test 和 androidTest 源目录有疑问。

给出以下口味:

flavorDimensions "taste", "serving"

productFlavors {
    chocolate {
        flavorDimension "taste"
    }
    strawberry {
        flavorDimension "taste"
    }
    kiwi {
        flavorDimension "taste"
    }
    sample {
        flavorDimension "serving"
    }
    whole {
        flavorDimension "serving"
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Android Studio 中识别“非测试”源目录(任何风格组合)都没有问题:

src/样本、src/整个、src/巧克力、src/草莓、src/猕猴桃、src/chocolateSample、src/chocolateWhole、src/strawberrySample、src/strawberryWhole、src/kiwiSample、src/kiwiWhole

我的问题是“测试”源目录。
仅识别单维度 口味: src/testSample、src/testWhole、src/testChocolate、src/testStrawberry、src/testKiwi
多维度口味不包括: src/testChocolateSample、src/testChocolateWhole、src/testStrawberrySample、src/testStrawberryWhole、src/testKiwiSample、src/testKiwiWhole

“androidTest”等效源目录也是如此。

我的印象是 app.iml 没有正确生成。虽然我们知道我们永远不应该这样做,但如果我手动添加丢失的条目,文件夹就会被正确识别。

为什么这应该适用于非测试源目录,但适用于测试源目录却失败?这是已知问题还是 gradle 插件的限制?

我尝试对此进行研究,但只找到与测试源文件夹的单一风味维度或非测试源文件夹的多维风味相关的主题。测试源文件夹的多维风格没有任何内容。

android android-gradle-plugin android-productflavors

6
推荐指数
1
解决办法
775
查看次数

如何在BuildSrc中创建FlavorConfig?

我正在尝试创建一个 Flavor 配置以避免每个模块和库 gradle 文件中出现样板代码。

为此,我尝试转换 Piotr Zawadzki 解决方案(https://medium.com/stepstone-tech/modularizing-your-flavored-android-project-5db75c59fb0d),该解决方案使用 groovy with() 方法与包含的闭包相结合风味配置。

ext.flavorConfig = { // 1

    flavorDimensions "pricing"
    productFlavors {
        free {
            dimension "pricing"
            ext.myApplicationIdSuffix = '.free' // 2
        }
        paid {
            dimension "pricing"
            ext.myApplicationIdSuffix = '.paid'
        }
    }

    productFlavors.all { flavor -> // 3
        if (flavor.hasProperty('myApplicationIdSuffix') && isApplicationProject()) {
            flavor.applicationIdSuffix = flavor.myApplicationIdSuffix
        }
    }

}

def isApplicationProject() { // 4
    return project.android.class.simpleName.startsWith('BaseAppModuleExtension')
    // in AGP 3.1.x with library modules instead of feature modules:
    // return project.android …
Run Code Online (Sandbox Code Playgroud)

android gradle kotlin android-productflavors

6
推荐指数
1
解决办法
761
查看次数

Android基础风格没有重复的类错误

我有我的应用程序的几个版本:普通版,说mainapp和几个建立每个客户的具体,比如说custom1,custom2,custom3.我希望所有customX口味都有基调.

我试图这样做:

创建项目结构:

app\src\main
app\src\mainapp
app\src\commonflavor
app\src\custom3
Run Code Online (Sandbox Code Playgroud)

并配置:

productFlavors {
    mainapp {
    }
    custom1 {
    }
    custom2 {
    }
    custom3 {
    }
}

sourceSets {
    custom1 {
        java.srcDirs = ['src/commonflavor/java']
    }
    custom2 {
        java.srcDirs = ['src/commonflavor/java']
    }
    custom3 {
        java.srcDirs = ['src/commonflavor/java', 'src/custom3/java']
    }
}
Run Code Online (Sandbox Code Playgroud)

commonflavor我为所有customX风格添加常见的java类时,请说MainActivity.javaSecondActivity.java.但是custom3我需要分开SecondActivity.java.

在这种情况下,我有一个错误error: duplicate class: SecondActivity来自src/commonflavor/javasrc/custom3/java.

现在我已经使用class dupllication解决了这个问题:

sourceSets {
    custom1 { …
Run Code Online (Sandbox Code Playgroud)

android gradle android-productflavors

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

buildConfigField VS类字段?resValue VS资源

buildConfigFieldConstants.java每种口味的文件相比,通过gradle添加到我的味道有什么好处?

resValue与每种口味的常规资源相比,通过gradle添加到我的口味中的优势是什么?

谢谢!

android gradle android-gradle-plugin android-productflavors

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

如何使用不同风格或不同构建类型的不同proguard文件?

我需要为测试库制作不同的风格.为什么?好吧,我希望项目完全安全,所以我想缩小一直启用(即使是调试版本类型).

在进行测试时,我正在使用项目中的不同类,所以我决定使用flavor更改proguard文件.它看起来像这样:

android {
    ...
    buildTypes {
        release {
            minifyEnabled true
            testProguardFile 'test-proguard-rules.pro'
        }
        debug {
            minifyEnabled true
            testProguardFile 'test-proguard-rules.pro'
        }
    }
    ...
    productFlavors{
        forTest{
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules1.pro', 'debug-rules.pro'
        }
        forRelease{
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'debug-rules.pro'
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

和proguard-rules*文件

ProGuard的规则:

-dontwarn blablabla.**
-dontwarn blabla.**
-keep class bla.** { *; }
Run Code Online (Sandbox Code Playgroud)

ProGuard的-rules1:

-dontshrink
-dontobfuscate
-dontwarn
Run Code Online (Sandbox Code Playgroud)

但这对我没有帮助.我想在没有混淆的情况下运行测试.Flavors没有minifyEnabled这样的参数,所以我试图找到任何解决方案.那么有关解决问题的任何建议吗?可能有人有同样的问题,并找到另一种解决方案(不使用口味)?

obfuscation android proguard gradle android-productflavors

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

使用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
查看次数

仅限Gradle的解决方案,用于根据Build Variant修改App名称

我正在尝试修改我的gradle文件以允许基于Flavor和的我的应用程序的不同名称Build Type.到目前为止,我已成功通过Android Gradle插件文档Flavor使用Manifest Merging技术进行基于命名的简洁

当前

这些是我的主屏幕上的应用程序的名称,包括我的debugrelease构建.

Flavor     Debug App Name             Release App Name
--------   --------------             ----------------
entity_1   App Name                   App Name
entity_2   App Name                   App Name
...        ...                        ...
entity_2   App Name                   App Name
hub        Hub                        Hub
Run Code Online (Sandbox Code Playgroud)

它很接近,但......

期望

Flavor     Debug App Name             Release App Name
--------   --------------             ----------------
entity_1   App Name - Entity_1_name   App Name
entity_2   App Name - Entity_2_name   App Name
...        ...                        ...
entity_n …
Run Code Online (Sandbox Code Playgroud)

android android-productflavors manifest-merging android-build-type

5
推荐指数
2
解决办法
2344
查看次数

Android Manifest如何通过Flavor Activity替换Activity

如何使用manifest命令"replace"通过具有相同名称但在flavor包中的活动替换主包中的活动?

com.name.project/main/
-ActivityA
Run Code Online (Sandbox Code Playgroud)

替换为

com.name.project/pro/
-ActivityA
Run Code Online (Sandbox Code Playgroud)

merge android manifest android-productflavors

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

适用于Java Web项目的Android产品风味

我想知道是否有人试图将Android产品风味用于简单的Java Web项目(例如Spring Boot)并且可以向我展示最好的方法吗?我们使用IntelliJ进行Web服务开发,它应该像Android Studio一样反映所选的风格.

我们不想使用弹簧轮廓,也不想维护多个分支.

java intellij-idea android-productflavors android-flavors

5
推荐指数
0
解决办法
121
查看次数

Android:不同风格的不同权限

我有一个带两种口味的应用程序......只有其中一个需要一些权限.如何在构建apk期间仅为此风格请求这些权限?

这些是所需的权限:

 <uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)

android android-productflavors

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