标签: android-productflavors

使用resConfig强制Android风格的区域设置

我正在尝试使用Android Build系统中的resConfig和resConfigs.

  • Android Studio版本1.2.2
  • Gradle构建版本1.2.3
  • OSX 10.10.3

我的项目有这两个选项的问题,所以我用android studio开始了一个新的空白项目.我附上了我的build.gradle,我只在其中添加了resConfigs"en","fr"

android { 
   defaultConfig {
        ...
        resConfigs "en", "fr" 
        ...
   }
}
Run Code Online (Sandbox Code Playgroud)

并定义了2种基本口味

productFlavors {
        fr {
            resConfig "fr"
        }

        en {
            resConfig "en"
        }
}
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个2 strings.xml文件并翻译了hello_world默认标签

/src/main/res/values/strings.xml(默认)
/src/main/res/values-en/strings.xml
/src/main/res/values-fr/strings.xml

有了这个,我希望在MyApplication/app/builds/intermediates/res/en/debug中只看到3个值文件夹,因为我在resConfigs中定义只使用"en"和"fr"并过滤其他任何内容

/ values/
/values-en/
/values-fr /

虽然,所有语言值文件夹仍然在那里,所以resConfigs没有明显过滤任何东西.

我还希望在运行enDebug flavor变量时从values-en看到标签hello_world,因为我指定了flavor en将使用resConfig"en",尽管当我运行测试应用程序时,我看到来自/ values-fr/strings的标签. xml而不是/values-en/strings.xml,因为平板电脑上的语言配置为法语加拿大

我是否误解了resConfig背后的目的?如果是这样,我应该如何强制只使用语言运行并且不依赖于操作系统区域设置?此解决方案必须与flavorDimensions兼容,因为我在我正在尝试配置的真实应用程序中使用它们.

注意:我也提交了一个错误,因为我认为这个resConfig行为确实存在问题https://code.google.com/p/android/issues/detail?id=180694

谢谢

android locale localization gradle android-productflavors

10
推荐指数
2
解决办法
1万
查看次数

如何使用不同的插件聚合mutli-project构建的测试报告?

如何迭代每个不同类型项目的测试结果并将其收集到一个报告中?

示例项目设置:

Root Project
    |
    |- Java Project
    |- test task
    |
    |- Android Library Project (has Build Types)
    |- testDebug task
    |- testRelease task
    |
    |- Android application Project (has Product Flavors and Build Types)
    |- testFreeDebug task
    |- testFreeRelease task
    |- testPaidDebug task
    |- testPaidRelease task
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的:

这将聚合所有项目的所有测试结果:

task aggregateResults(type: Copy) {
    outputs.upToDateWhen { false }
    subprojects { project ->
        from { project*.testResultsDir }
    }
    into { file("$rootDir/$buildDir/results") }
}

task testReport(type: TestReport) {
    outputs.upToDateWhen { false } …
Run Code Online (Sandbox Code Playgroud)

android gradle test-reporting android-gradle-plugin android-productflavors

10
推荐指数
1
解决办法
524
查看次数

我可以一次构建所有的gradle构建口味吗?

我有一些应用程序的构建风格.我想一次构建所有不同风格的apks,并在my/output文件夹中找到它们.我不想选择每种风味并单独构建它.我怎样才能做到这一点?

android gradle android-productflavors

9
推荐指数
1
解决办法
2932
查看次数

Android风味和资源文件

我有android gradle构建的问题.长话短说,我创造了两种口味:

productFlavors{
        abcDemoFree{
        }

        abcDemo{
        }
}
Run Code Online (Sandbox Code Playgroud)

Eeach flavor为此活动提供了自己的Activity(Settings.java)和布局(settings_layout.xml).从main开始,两个文件都被删除了,因此Settings.java和settings_layout.xml只存在于各种风格中.

abcDemoFree
    - java
        - Settings.java
    - res
        - settings_layout.xml

abcDemo
    - java
        - Settings.java
    - res
        - settings_layout.xml
Run Code Online (Sandbox Code Playgroud)

Android Studio创建了4种构建变体:

abcDemoFreeDebug
abcDemoFreeRelease
abcDemoDebug
abcDemoRelease
Run Code Online (Sandbox Code Playgroud)

一切都很好,我能够创建apk我期待从每个味道的行为.问题是当我切换到一个buildVariant时,例如abcDemoDebug,android studio报告来自另一种风格的资源文件的bug,在我的例子中来自abcDemoFreeDegub/res/settings_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
              xmlns:app="http://schemas.android.com/apk/res-auto"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

这些线

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
Run Code Online (Sandbox Code Playgroud)

生成错误:URI未注册.

如何摆脱这些错误?或者这可能是正常行为?

android gradle android-productflavors

9
推荐指数
1
解决办法
2113
查看次数

Android Studio:如何在产品风格中排除google-services模块?

在我的Android项目中,有几种产品风格:

buildTypes {
    release {}
    debug {}
    staging {}
}

productFlavors {
    freeVersion {}
    proVersion {}
    partnerVersion {}
}
Run Code Online (Sandbox Code Playgroud)

另外,我使用Google Analytics:

apply plugin: 'com.google.gms.google-services'

dependencies {
    compile 'com.google.android.gms:play-services-analytics:8.4.0'
}
Run Code Online (Sandbox Code Playgroud)

如何在其中一个中排除google-services?例如,在:

freeVersion {}
Run Code Online (Sandbox Code Playgroud)

java android gradle android-productflavors

9
推荐指数
3
解决办法
2726
查看次数

如何单元测试(junit)Android Flavor/Variant - 类不存在

我们的应用程序中有2种产品口味,一种口味有一种类型(FlavorSpecificClass),另一种则没有.我们在src/test文件夹中对FlavorSpecificClass进行了junit测试,当我们在我们的核心变体上时,它将无法编译,因为该变体中不存在该类.

我找不到一种方法来为每个变体分别进行单元测试,除非我注释掉对FlavorSpecificClass的引用,否则代码不会在我们的核心变体中编译.我怎么能绕过这个?

android junit4 android-studio android-productflavors

9
推荐指数
1
解决办法
2541
查看次数

安卓摇篮。如何将 Flavors 与 buildTypes 结合起来

我正在开发一个白色品牌的应用程序。

我们创建每个客户不同的风味并且每个客户都DebugProductionAPI的,所以我试图建立起来的摇篮。

我该怎么做?

这是我尝试过的:

buildTypes {
    debug {
        // some configurations
    }
    release {
        // some configurations
    }
}

flavorDimensions "client"
productFlavors {
    company1{
        dimension "client"
        buildConfigField("String", "BASE_URL", "\"https://app.company1/devApi/\"")
    }

    company2 {
        dimension "client"
        buildConfigField("String", "BASE_URL", "\"https://app.company2/devApi/\"")
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我希望能够为BASE_URL每个 Flavor 和 Buildtype定义一个不同的。

风味公司1,BuildType调试

https://app.company1.com/devApi/
Run Code Online (Sandbox Code Playgroud)

Flavor company1, BuildType 发布

https://app.company1.com/prodApi/
Run Code Online (Sandbox Code Playgroud)

风味公司2,BuildType调试

https://dev.company2.com/api/
Run Code Online (Sandbox Code Playgroud)

Flavor company2, BuildType 发布

https://prod.company2.com/api/
Run Code Online (Sandbox Code Playgroud)

android android-gradle-plugin android-productflavors android-build-type

8
推荐指数
1
解决办法
3720
查看次数

尝试使用风味时 Flutter 应用程序构建失败

我正在尝试在我的应用程序中使用风味。我遵循了各种指南,但每次都因同样的问题而无法构建。(因为基本上每个博客文章和 SE 问题都引用相同的文章和资源,所以我不会再这样做了)

为了调试,我决定简化问题并启动一个新项目(正常示例项目),并添加风味,每种风味只有一个元素:应用程序。这有效。各种其他更复杂的属性,例如使用 res/values/strings.xml 作为应用程序标签也可以正常工作。

然后,我使用我的应用程序尝试了最简单的风味设置,其中的grade.build如下所示,然后很快就失败并出现相同的错误。

flavorDimensions "app"
productFlavors {
    dev {
        dimension "app"
    }
    qa {
        dimension "app"
        applicationId "com.example.app1"
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:我还使用单独的入口点来实现运行时配置。这按预期工作并且已经使用了一段时间。

johan@komp:~/AndroidStudioProjects/parent_lite$ flutter run --flavor qa -t lib/main-qa.dart
Using hardware rendering with device Android SDK built for x86. If you get graphics artifacts, consider enabling software rendering with "--enable-software-rendering".
Launching lib/main-qa.dart on Android SDK built for x86 in debug mode...
Initializing gradle...                                              0.4s
Resolving dependencies...                                           1.2s
Running Gradle task 'assembleQaDebug'...                                
Running Gradle task 'assembleQaDebug'... Done                       1.1s …
Run Code Online (Sandbox Code Playgroud)

build android-productflavors flutter android-build-flavors

8
推荐指数
1
解决办法
1万
查看次数

java.lang.NoSuchMethodError:没有静态方法“myMethod”

我有一个扩展方法:

fun StoresClientFragment?.onClickButtonBack(){
   this?.listener?.onStoresFragmentClickBtnMenu()
}
Run Code Online (Sandbox Code Playgroud)

应用程序安装没有任何错误;但是当在运行时调用该方法时,它会给出以下错误:

java.lang.NoSuchMethodError:类 Lcom/app/common_client/commons/CommonsAppTypeGroupKt 中没有静态方法 onClickButtonBack (Lcom/app/common_client/ui/fragment /stores/StoresClientFragment;) V;或其超类(“com.app.common_client.commons.CommonsAppTypeGroupKt”的声明出现在 /data/app/com.myapp.client-DWp0y3iNC3tsmBZkowlpfw==/base.apk!classes2.dex 中)。

我启用了多重索引

在 build.gradle 中

android {
    defaultConfig {
        multiDexEnabled = true
    }
}

dependencies {
   implementation 'androidx.multidex:multidex:2.0.1'
}
Run Code Online (Sandbox Code Playgroud)

在应用程序类中

class ApplicationClient : MultiDexApplication(){
}
Run Code Online (Sandbox Code Playgroud)

在清单中

<application
        android:name=".commons.application.ApplicationClient"
Run Code Online (Sandbox Code Playgroud)

注意:我正在使用产品风格和模块,该方法位于某些产品风格共享的 src 中

sourceSets {
         flavorA {
             java.srcDirs + = "src/sharedFolder/java" //here is 'onClickButtonBack' method
         }
         flavorB {
             java.srcDirs + = "src/sharedFolder/java"
         }
}
Run Code Online (Sandbox Code Playgroud)

android kotlin android-studio android-productflavors android-module

8
推荐指数
2
解决办法
2万
查看次数

ProductFlavors main ~ Gradle 错误:具有相同键的多个条目:main=[] 和 main=[]

当我将 gradle 版本增加到gradle-7.3.3from时gradle-7.2,我收到一个 gradle 同步错误,内容是Multiple entries with same key: main=[] and main=[].

当我将 ProductFlavors 名称更改为mainCore或其他名称时main,gradle 同步时不会出现错误。

我想知道如何继续使用mainproductFlavor。有任何想法吗?

构建.gradle(应用程序):
    .....
flavorDimensions "mode", "client"
        productFlavors {
            /////// Distribution Modes ///////
            main {
                dimension "mode"
                versionName generateVersionName()
                manifestPlaceholders = [
                        app_label: "@string/app_name",
                        appIcon: "@mipmap/ic_launcher",
                        appIconRound: "@mipmap/ic_launcher_round"
                ]
            }
            beta {
                dimension "mode"
                applicationIdSuffix ".beta"
                manifestPlaceholders = [
                        app_label: "@string/app_name",
                        appIcon: "@mipmap/ic_launcher_beta",
                        appIconRound: "@mipmap/ic_launcher_beta_round"
                ]
            } .....
Run Code Online (Sandbox Code Playgroud)

android gradle android-productflavors

8
推荐指数
0
解决办法
1075
查看次数