当前位置: 首页 > 知识库问答 >
问题:

与gradle签署产品口味

林和煦
2023-03-14

我正在尝试将我的项目迁移到gradle。我的一个项目有多种产品风格,并且每个项目都必须在其发布版本中使用不同的signingConfig进行签名。所以这是我到目前为止尝试的:

buildscript {
    ...
}

apply plugin: 'android'

android {
    compileSdkVersion 17
    buildToolsVersion '17'

    signingConfigs {
        flavor1 {
            storeFile file("keystore")
            storePassword "secret"
            keyAlias "aliasForFlavor1"
            keyPassword "secretFlavor1"
        }

        flavor2 {
            storeFile file("keystore")
            storePassword "secret"
            keyAlias "aliasForFlavor2"
            keyPassword "secretFlavor2"
        }
    }

    productFlavors {
        flavor1 {
            signingConfig signingConfigs.flavor1
        }

        flavor1 {
            signingConfig signingConfigs.flavor2
        }
    }
}

dependencies {
    ...
}

当我运行gradle build时,我得到一个groovy.lang.MissingFieldException和以下错误消息:

No such field: signingConfigs for class: com.android.build.gradle.internal.dsl.GroupableProductFlavorFactory

所以我假设productFlavors。*Gradle脚本的一部分不是放置代码签名配置的正确位置。

共有3个答案

徐友樵
2023-03-14

android的gradle插件只支持按构建类型签名,而不支持按风格签名。这样做的原因是,任何给定的变体(构建类型风格)只能由一个键签名,但可以是多个风格组的组合。例如,您的口味组可以是cpu(x86/arm)和版本(免费/付费),这是四种不同的变体。

您正在寻找的解决方案是为不同的发布版本创建单独的构建类型。例如,您的生成类型可能是调试版、发布版、测试版,如下所示:

...

android {

    ...

    buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }

        release {
            signingConfig signingConfigs.release
        }

        release-beta {
            initWith release
            signingConfig signingConfigs.release-beta
        }
    }
}

上面的initWith告诉gradle,beta版应该是构建类型的副本,只使用不同的密钥签名。

欧阳智志
2023-03-14

根据用户指南,支持为口味签名配置。

这里的问题与signingConfigs对象的范围有关。我刚刚将其分配给productFlavors块内的一个变量,但在flavor1块外,以解决此问题:

productFlavors {
    def flavor1SigningVariable = signingConfigs.flavor1

    flavor1 {
        ...
        signingConfig flavor1SigningVariable
        ...
    }
孔彭祖
2023-03-14

您可以在构建类型中为每个风格声明签名配置。这是我的gradle文件,用于不同密钥库的版本签名风格。

android {
  signingConfigs {
    configFirst {
        keyAlias 'alias'
        keyPassword 'password'
        storeFile file('first.keystore')
        storePassword 'password'
    }

    configSecond {
        keyAlias 'alias'
        keyPassword 'password'
        storeFile file('second.keystore')
        storePassword 'password'
    }
  }

  compileSdkVersion 23
  buildToolsVersion "23.0.2"
  defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
  }

  productFlavors{
    flavor1 {
        applicationId "com.test.firstapp"
    }

    flavor2 {
        applicationId "com.test.secondapp"
    }
  }

  buildTypes {
    release {
        productFlavors.flavor1.signingConfig signingConfigs.configFirst
        productFlavors.flavor2.signingConfig signingConfigs.configSecond           

        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'

    }
  }
}

构建类型块应该放在productFlavors块之后,我的意思是顺序很重要。

 类似资料:
  • 当我试图给我的项目添加一种风格时,Gradle就是不想同步,即使我同步了,我也看不到构建变量中的风格。什么会导致这个问题?该项目有几个模块,我需要添加应用程序的味道。我的文件: 我从这里删除了一些信息,比如依赖关系、id等等,只是为了显示一个结构。

  • 似乎WooCommerce产品的搜索功能没有检查“产品标签”分类术语,也没有检查SKU字段?我将SKU作为产品标签添加到它们各自的产品中,但当我搜索SKU时,它仍然没有返回任何内容。。。。如何使搜索功能检查产品标签术语?我尝试了很多方法,从添加tax\u查询到pre\u get\u post过滤器,再到一个全新的WP\u查询循环,由于某种原因,它无法搜索产品标签。。。。那么,产品标签的意义是什么呢

  • 我想按价格、日期和发布年份等项目对产品进行排序。在发布年份的情况下,我做了一个分类法=发布年份 但它是不工作.我怎么能改变代码可能排序按发布年份顺序?

  • 我试图做一些事情,比如:Woocommerce更新签出ajax!我正在为我的客户构建一个多步骤表单,其中客户正在使用ajax将产品添加到购物车中。当产品添加到购物车中时,我需要更新收银台。我尝试执行onclick功能,因此当用户在购物车中添加产品时,签出步骤将更新,而不刷新页面: 但它不起作用,我觉得我错过了一些明显的东西......任何提示?:)

  • null 我尝试过的相关帖子: 从单个生成类型生成使用不同密钥签名的多个生成 这需要为每种口味配置 它似乎没有使用我自定义的 null null 我的的重要部分如下所示:

  • 更新:不推荐使用GCM,请使用FCM 我正在按照Google Developers页面中的指南实现新的Google云消息 我已经成功地运行并测试了它。但我现在的问题是,我有不同的产品风格,有不同的applicationID/packageName和不同的Google Cloud Messaging Project ID。必须放在而不是flavors文件夹中。 有什么方法可以使配置针对多种口味不同吗