标签: android-productflavors

如何修改产品风格之间的代码

我正在创建一个非常简单的应用程序,具有免费和付费版本,为此我使用 Android Gradle 插件中出色的 ProductFlavors 功能。我了解应该如何配置 build.gradle 文件并编写它,所以我的构建选项是:

  • 免费发布
  • 自由调试
  • 付费发布
  • 付费调试

看起来如下

buildTypes {
    release {
        runProguard false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        signingConfig signingConfigs.someconfig
    }
}
productFlavors {
    free {
        packageName "com.somepackagename.appfree"
    }
    paid {
        packageName "com.somepackagename.appPaid"
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,我想做的就是限制一些功能并将 AdMod 添加到免费版本中,我该怎么做?我是否在主 java 类中添加 if-else 语句来检查它是免费还是付费?或者我可以覆盖免费目录中的java类吗?我该怎么做呢?

java android android-productflavors

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

基于其他风味的 Gradle 风味

有没有可能一种味道是基于另一种味道的?

例如 构建.gradle:

productFlavors {
    flavor1 {
        flavorBase "main"
    }
    flavor2 {
        flavorBase "main"
    }
    flavor3 {
        flavorBase "main"
    }
    flavor4 {
        flavorBase "flavor3"
    }
    flavor5 {
        flavorBase "flavor3"
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

android gradle android-productflavors

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

AndroidManifest 包名称与 Android 中的风格冲突

我正在尝试制作两种风格的应用程序。

摇篮:

defaultConfig {
        applicationId "be.myname.firstapp"
        minSdkVersion 15
        targetSdkVersion 23 }

productFlavors {
        raterate {
            applicationId = "be.myname.firstapp"
        }
        scarsforlife {
            applicationId = "be.myname.secondapp"
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的主文件夹、fistapp 文件夹和 secondaryapp 文件夹中有一个 AndroidManifest。

第一个文件夹中的包名称:be.myname.fistapp,第二个文件夹中的包名称:be.myname.secondapp。

在主文件夹中,我首先有:be.myname.firstapp,但这与 be.myname.secondapp 冲突。现在我尝试了:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="${packageId}">

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

并得到这个:

Attribute manifest@package at AndroidManifest.xml:3:5-27 requires a placeholder substitution but no value for <packageId> is provided.
AndroidManifest.xml Error:
    Overlay manifest:package attribute declared at AndroidManifest.xml:3:5-45 value=(be.myname.secondapp)
    has a different value=(be.myname.secondapp) declared in main manifest at AndroidManifest.xml:3:5-27
    Suggestion: remove the …
Run Code Online (Sandbox Code Playgroud)

android android-productflavors

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

Android 模块与风味之间的区别

android模块和风格之间的主要区别是什么?

来自模块定义 https://developer.android.com/studio/projects/add-app-module.html

模块为应用程序的源代码、资源文件和应用程序级别设置(例如模块级别构建文件和 Android 清单文件)提供容器。每个模块都可以独立构建、测试和调试。

但对于口味我也可以说同样的话。

有人可以指出这两者之间的主要区别吗?

android android-productflavors android-module

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

如何将签名配置添加到 Multi-FlavorDimensions (ProductFlavors)?

例如,我有一个 gradle 构建,如下所示:

signingConfigs {
        configFlavor1 {
        keyAlias 'alias1'
        keyPassword 'password1'
        storeFile file('location1')
        storePassword 'password1'
        v1SigningEnabled true
        v2SigningEnabled true
    }

    configFlavor2 {
        keyAlias 'alias2'
        keyPassword 'password2'
        storeFile file('location2')
        storePassword 'password2'
        v1SigningEnabled true
        v2SigningEnabled true
    }

    configFlavor3 {
        keyAlias 'alias3'
        keyPassword 'password3'
        storeFile file('location3')
        storePassword 'password3'
        v1SigningEnabled true
        v2SigningEnabled true
    }
}

flavorDimensions "dimen1", "dimen2"
productFlavors {
    flavor1 {
        dimension "dimen1"
    }
    flavor2 {
        dimension "dimen1"
    }
    testing {
        dimension "dimen2"
    }
    dev {
        dimension "dimen2"
    }
    prod {
        dimension "dimen2" …
Run Code Online (Sandbox Code Playgroud)

android gradle android-productflavors android-flavordimension android-signing

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

错误:配置“internalRelease”的配置“implementation”未在项目描述符中声明

我有一个core模块是我的应用程序的基础。该模块有 2 种风格。当我尝试将其导入到app没有风味的模块中时,我收到以下错误:

> Could not resolve all task dependencies for configuration ':app:releaseRuntimeClasspath'.
   > Could not resolve project :core.
     Required by:
         project :app
      > Project :app declares a dependency from configuration 'implementation' to configuration 'internalRelease' which is not declared in the descriptor for project :core.
Run Code Online (Sandbox Code Playgroud)

这是我的核心 build.gradle 配置:

android {
    compileSdkVersion 27

    publishNonDefault true

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    } …
Run Code Online (Sandbox Code Playgroud)

android build.gradle android-gradle-plugin android-productflavors android-build-flavors

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

多维构建风格中的不同签名配置

小例子将描述这种情况:

flavorDimensions 'shape', 'api'

productFlavors {
        fruit {
             dimension "shape"
        }

        vegtable {
             dimension "shape"
        }

        production {
             dimension "api"
        }

        development {
             dimension "api"
        }
}
Run Code Online (Sandbox Code Playgroud)

任务: 我需要为fruitProductionfruitDevelopment风格保留不同的签名配置。

我研究了 gradle 文档,但没有找到合适的任务,可以覆盖特殊风格的配置。

android android-productflavors android-build-flavors android-flavors apk-signing

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

如何在多模块 Gradle 项目中声明“传递”风格依赖项?

例如,我有 3 个模块(A、B 和 C),其中 A 依赖于 B,B 依赖于 C(A->B->C)。模块 A 是构建过程的入口点,没有其他模块依赖于它,例如 Android 应用程序中的 :app 模块。模块 A 和 C 具有相同的风味维度和相同的风味集(例如风味 1、风味 2、风味 3、风味 4 等)。模块 B 没有任何风格。

现在的问题是:如何将这些依赖关系定义为“可传递的”,使模块 A i 模块 C 的风格始终匹配?

模块 A(风味 1) -> 模块 B -> 模块 C(风味 1)

模块 A(风味 2) -> 模块 B -> 模块 C(风味 2)

模块 A(口味 3) -> 模块 B -> 模块 C(口味 3)

ETC..

如果所有 3 个模块具有相同的风格,Gradle 会自动匹配它们,但由于 B 没有风格,因此会发生错误,这已在这个问题中描述过:Singleflavor module based on multi Flavor Library in Gradle but non …

android gradle android-gradle-plugin android-productflavors android-build-flavors

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

如何在react-native中编写风味特定的代码?

大约一周前,我开始开发一个白标应用程序,其中每个应用程序唯一不同的是一些颜色值、图像源和 API 端点,但应用程序本身执行完全相同的操作。

因此,在过去的几天里,我尝试学习如何从同一个项目构建多个应用程序...(这里主要关注 Android)在我的旅程中,我找到了一些指南,并设法通过遵循本指南来使其工作在我的 build.gradle 中设置产品风格。

    productFlavors {
    firstapp {
        applicationIdSuffix '.firstapp'
        resValue "string", "build_config_package", "com.myapp"
    }
    secondapp {
        applicationIdSuffix '.secondapp'
        resValue "string", "build_config_package", "com.myapp"
    }
}
Run Code Online (Sandbox Code Playgroud)

好的,现在我可以react-native run-android --variant=firstappDebug在开发时运行模拟应用程序,然后在发布时模拟应用程序gradlew assembleFirstappRelease,并能够生成多个(在本例中为 2 个)不同的构建。

但是,由于我是一个初学者,我无法找到正确的方法来编写特定风格的代码,以便在我为特定风格构建时呈现。

此外,我遵循了其他指南,或多或少地展示了如何做到这一点,但同样,我缺乏正确执行某些步骤的知识,所以我失败了。我不知道应该在哪个文件中纠正第 2 步中的代码,也不知道第 3 步BuildConfig.FLAVOR中的、NSBundle.mainBundle()和是什么, UtilityManager.getTarget()RNBuildConfig.FLAVOR

总之......我仍在努力学习以成长,我会更深入地研究环境变量......但我觉得有必要向社区寻求帮助。

javascript android-productflavors react-native

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

针对特定口味禁用 R8

我想针对我的应用程序的特定风格禁用 R8(因此设置 android.enableR8=false)。有谁知道该怎么做,或者是否可能?我可以以某种方式指定 gradle.properties 文件吗?或者它如何工作?

android build gradle android-productflavors android-flavors

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