【问题标题】:Ionic android build error : "All flavors must now belong to a named flavor dimension"Ionic android 构建错误:“所有风味现在必须属于一个命名风味维度”
【发布时间】:2018-05-04 22:46:48
【问题描述】:

我已经在我的计算机上启动了一个新项目,但我无法再为 android 构建项目

当我跑步时

ionic cordova platform run android

我得到这个错误:

All flavors must now belong to a named flavor dimension. 

【问题讨论】:

  • 你有这方面的代码参考吗?
  • 绝对是我见过的最奇怪的错误 :)

标签: android cordova ionic-framework gradle


【解决方案1】:

如果您在项目中安装了cordova-plugin-crosswalk-webview 插件并尝试使用 Gradle v4 进行构建,则会出现“flavors”错误。

但是,如果您想升级到cordova-android@6.4.0(例如,在 Android Studio 3 中打开您的 Cordova Android 平台项目以调试原生插件代码),则需要升级到 Gradle v4。 因此cordova-plugin-crosswalk-webview 目前与cordova-android@6.4.0 不兼容。

作为“风味”错误的手动解决方法,您可以在 platforms/android/build.gradle (see here) 中插入默认风味:

android { 
    ...
    flavorDimensions "default"
    ...
} 

更新

如果您想使用 Gradle v4/cordova-android@6.4+cordova-plugin-crosswalk-webview 构建,请更新到 Gradle v4,然后在 master 分支上安装 cordova-android,因为 this PR 解决多个 APK 构建的“风味”错误现已合并:

cordova platform rm android 
  && cordova platform add https://github.com/apache/cordova-android

【讨论】:

  • > 因此,cordova-plugin-crosswalk-webview 目前与 cordova-android@6.4.0 不兼容,只有在为两个版本构建单独的 apk 时才适用。如果您将 xwalkMultipleApk 设置为 false - 例如` ` 在config.xml,你可以使用 gradle 4 + cordova-android@6.4。 $ gradle -v --------------------- Gradle 4.4.1 --------- $ cordova platform ls 已安装平台:android 6.4.0 ios 4.5.4
  • 我已经检查了你告诉的 PR,但是这个代码不在 6.4.0 和 7.0.0 上
  • 现在我在添加了 flavorDimention 后出现了这个错误:默认 A problem occurred configuring root project 'android'. > Flavor 'armv7' has no flavor dimension.
  • @SriKrishna 你为Flavor 'armv7' has no flavor dimension.找到了什么?
【解决方案2】:

我遇到了同样的错误,我已经创建了一个脚本来解决它。

正如答案中所说,问题是:gradle 4 想要 gradle.build 上的 flavorDimensions。

如果您在此处查看:https://cordova.apache.org/docs/en/latest/guide/platforms/android/#extending-buildgradle

我们可以创建一个名为 gradle-extra.build 的文件,该文件将包含在 gradle.build 中,我们只需要创建一个脚本将该文件粘贴到 /platform/android/ 上。

所以我在我的项目根目录中创建了这个文件 build-extras.gradle

android { 
    flavorDimensions "default"
} 

以及 ./hooks/after_platform_add/copy_build-extras.gradle.js 上的脚本

#!/usr/bin/env node

var fs = require('fs');
var path = require('path');

if(fs.existsSync(path.resolve(__dirname, '../../platforms/android'))) {
  fs.createReadStream(path.resolve(__dirname, '../../build-extras.gradle')).pipe(fs.createWriteStream(path.resolve(__dirname, '../../platforms/android/build-extras.gradle')));
}

你可以在这里查看钩子:https://cordova.apache.org/docs/en/latest/guide/appdev/hooks/index.html

/hooks/after_platform_add 下的每个脚本都会在 ionic platform add 之后执行 ***

有了这个,我们不需要降级 gradle 也不需要更改 cordova-android 版本。

【讨论】:

    【解决方案3】:

    找到了解决方案。 :)

    Gradle 版本是问题所在。我不得不从 4.X 降级到 3.5.1,效果很好!

    检查你的gradle版本

    gradle -v
    

    如果 if > 4.x,请降级!

    【讨论】:

    • 不是真正的解决方案。将 flavorDimensions “default”添加到 build.gradle 可以解决问题。
    • 是的,但您正在修改未版本控制的文件。对我来说似乎不是一个好的解决方案。
    • platforms/android/build.gradle 在版本控制系统中
    • 我认为默认情况下,node_modules、platforms 和 plugins 文件夹不是由 ionic 团队版本化的;)
    • "platforms" 还应该包含您的 Java 或 ObjC 代码,或者应该在哪里?
    【解决方案4】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多