谷歌 6 月 17 日 Firebase SDK 更新后,Ionic Cordova 应用程序停止编译

Posted

技术标签:

【中文标题】谷歌 6 月 17 日 Firebase SDK 更新后,Ionic Cordova 应用程序停止编译【英文标题】:Ionic Cordova app stopped compiling after Google's June 17th Firebase SDK update 【发布时间】:2019-11-01 09:36:00 【问题描述】:

在 Firebase 主要版本更新后,我无法编译 Ionic Cordova 应用程序并进行重大更改,特别是 2019 年 6 月 17 日的更新。

我尝试降级到 android Cordova 6.3.0,但我的项目必须是 7.0.0。

这是我的离子信息:

@ionic/cli-utils  : 1.19.2
    ionic (Ionic CLI) : 3.20.0

global packages:

    cordova (Cordova CLI) : 8.0.0

local packages:

    @ionic/app-scripts : 3.2.1
    Cordova Platforms  : android 7.0.0 browser 5.0.4
    Ionic Framework    : ionic-angular 3.9.3

System:

    Android SDK Tools : 26.1.1
    Node              : v8.9.1
    npm               : 5.5.1
    OS                : Windows 10

Environment Variables:

    ANDROID_HOME : C:\Development\android-sdk

Misc:

    backend : pro

这是我遇到的错误:

:app:processDebugResources C:\Users\mmzep.gradle\caches\transforms-1\files-1.1\core-1.0.0.aar\73b4a83ab5e76f20c84a66b1c8444d08\res\values\values.xml:133:5-70: AAPT: 错误: 资源 android:找不到 attr/fontVariationSettings。

C:\Users\mmzep.gradle\caches\transforms-1\files-1.1\core-1.0.0.aar\73b4a83ab5e76f20c84a66b1c8444d08\res\values\values.xml:133:5-70:AAPT:错误:资源 android:attr/ttcIndex 未找到。

C:\Users\mmzep\Desktop\mario\Seven\SevenPassengerApp\platforms\android\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:95: 错误:找不到资源 android:attr/fontVariationSettings。 C:\Users\mmzep\Desktop\mario\Seven\SevenPassengerApp\platforms\android\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:95: 错误:找不到资源 android:attr/ttcIndex。错误:链接失败 参考文献。

执行 aapt 失败

com.android.ide.common.process.ProcessException:执行失败 适配

【问题讨论】:

【参考方案1】:

此构建失败是由于 6 月 17 日的 major version release of the Google Play Services and Firebase libaries。

新的库版本有以下要求:

com.android.tools.build:gradle 升级到 v3.2.1 或更高版本。 将compileSdkVersion 升级到 28 或更高版本。 更新您的应用以使用 Jetpack (AndroidX)

前两个要求可以通过更新为使用cordova-android@8.0.0来解决。

第三个要求您的 Android 项目迁移到使用 AndroidX (Jetpack)。 AndroidX 是广泛使用的 Android Support Library 的继承者。 AndroidX 现在被最新版本的 Play Services/Firebase 库使用,而 Support 库被许多现有插件使用,例如 cordova-plugin-firebase。 这两个库不能同时存在于同一个 Android 构建中 - 这样做会导致构建失败。

要解决此问题,请在您的 Cordova 项目中添加以下两个插件:

cordova-plugin-androidx 在 Android 项目中启用 AndroidX。 cordova-plugin-androidx-adapter 使用支持库动态修补任何插件的源代码以使用 AndroidX 等效项。

有关如何在测试项目中试用此功能的工作示例,请参阅my comment on this Github issue。

注意:如果您使用cordova-plugin-firebase 并遇到错误,您可以改用my fork of that plugin,它以cordova-plugin-firebasex 发布,已修复以解决新Firebase SDK 引起的问题:

rm -Rf platforms/android
cordova plugin rm cordova-plugin-firebase
rm -Rf plugins/ node_modules/
npm install
cordova plugin add cordova-plugin-firebasex
cordova platform add android

【讨论】:

我有一个工作项目,所以我不得不删除插件目录 -rf ./plugins 并重新添加 android 平台 ionic cordova platform rm android ionic cordova platform add android@8.0.0 然后 @DaveAlden 解决方案完美运行。 您是救生员,您的解决方案在花费数小时试图恢复到以前的版本后神奇地发挥了作用。谢谢! 我已经尝试过了,但我无法从 fcm 获取令牌构建成功我的项目处于关键条件 @DanielGoncalves 我需要你的帮助,请你帮我我的 Skype id 是:离子。五个 @KishanOza 你能把我添加到你的 GitHub 存储库吗?也许我可以看看你的项目用户名> dan62 确定它在 bitbucket 中所以给我你的电子邮件@DanielGoncalves【参考方案2】:

1。第一个答案

We 已为此 https://github.com/wizpanda/cordova-plugin-firebase-lib/pull/13 创建了 PR,但这需要将 cordova-android 升级到 8.0.0

正在为cordova-android 7.x 做一个解决方法,但与此同时,关于是否继续支持它的讨论也在进行中。

2。编辑 - 2019 年 6 月 19 日

发布新版本 v3.3.0 以解决支持cordova-android <= 7.1.4 的 Google Firebase 版本导致的问题。 https://github.com/wizpanda/cordova-plugin-firebase-lib/pull/14#issuecomment-503499409

cordova plugin remove cordova-plugin-firebase-lib
# Or if you were using original fork
#cordova plugin remove cordova-plugin-firebase
cordova plugin add cordova-plugin-firebase-lib@3.3.0

3。编辑 - 2019 年 6 月 20 日

发布了一个新版本 v4.0.1,以解决支持 cordova-android >= 8.0.0 的 Google Firebase 版本引起的问题。 https://github.com/wizpanda/cordova-plugin-firebase-lib/pull/14#issuecomment-503499409

cordova plugin remove cordova-plugin-firebase-lib
# Or if you were using original fork
#cordova plugin remove cordova-plugin-firebase
cordova plugin add cordova-plugin-firebase-lib

【讨论】:

【参考方案3】:

在 platform/android/project.properties 中有以下设置:

cordova.gradle.include.1=cordova-plugin-firebase/app-build.gradle
cordova.system.library.4=com.google.firebase:firebase-core:+
cordova.system.library.5=com.google.firebase:firebase-messaging:+
cordova.system.library.6=com.google.firebase:firebase-config:+
cordova.system.library.7=com.google.firebase:firebase-perf:+

我遇到了同样的问题(错误:找不到资源 android:attr/ttcIndex)。

cordova-android@8.0.0 + cordova-plugin-androidx + cordova-plugin-androidx-adapter 完美地为我工作。

感谢您的解决方案。

我只是想知道长期使用这两个插件是否合适。有意见吗?

【讨论】:

【参考方案4】:

对于cordova-android

cordova 平台移除 android 科尔多瓦插件删除科尔多瓦插件火力基地 cordova 插件添加 cordova-plugin-firebase-lib@3.3.0 科尔多瓦平台添加安卓

cordova-plugin-firebase 现在包含在 cordova-plugin-firebase-lib 中

【讨论】:

你应该得到更多的支持。我发现解决问题的最简单的解决方案。 绝对最佳答案!如此简单,而且确实有效!【参考方案5】:

我建议您尝试在项目的 platform/android 文件夹中添加 build-extras.gradle:

configurations.all 
    resolutionStrategy 
         force 'com.android.support:support-v4:27.1.1'
         force 'com.google.android.gms:play-services-tagmanager:16.0.8'
         force 'com.google.android.gms:play-services-base:16.1.0'
         force 'com.google.android.gms:play-services-tasks:16.0.1'
         force 'com.google.android.gms:play-services-basement:16.2.0'
         force 'com.google.android.gms:play-services-gcm:16.1.0'
         force 'com.google.android.gms:play-services-stats:16.0.1'
         force 'com.google.android.gms:play-services-location:16.0.0'
         force 'com.google.android.gms:play-services-auth:16.0.1'
         force 'com.google.android.gms:play-services-identity:16.0.0'
    

这样,您将强制构建命令忽略更新并使用以前的版本。 您甚至不需要更改任何插件(也不需要更改 android 平台版本)!

每次更新 firebase 的库时都会发生这种情况.. 这很烦人。我希望能够关闭 build 命令的自动依赖更新,但我认为这是不可能的。

【讨论】:

【参考方案6】:
ionic cordova platform remove android

ionic cordova plugin remove cordova-plugin-firebase

ionic cordova plugin add cordova-plugin-firebase-lib@3.3.0

(如果你删除了这个 npm install --save @ionic-native/firebase@4 install 再次)

我在 android 7.0.0 中存在 dex 合并 问题。所以我用过android 8.0.0

使用安卓8.0.0

ionic cordova platform add android@8.0.0

if required install below 2 plugin for android 8.0.0

ionic cordova plugin add cordova-plugin-androidx

ionic cordova plugin add cordova-plugin-androidx-adapter

【讨论】:

【参考方案7】:

如果您已经尝试了所有方法,但仍无法构建您的 cordova android 项目,请按照这些步骤操作。

我已经在这个问题上工作了五天,这是唯一对我有用的解决方案(它是对解决方案和 cmets 的重新编译,按照我为使我的项目工作而遵循的顺序排序):

    安装最新的cordova版本 (cordova@9.0.0):

    npm install -g 科尔多瓦

    创建一个新的空白cordova项目(使用相同的反向域和项目名称):

    cordova create folderName com.projectName.app projectName

    添加最新的cordova-android平台(cordova-android@8.0.0):

    cordova平台添加android

    安装原始项目中出现的每个插件(cordova-plugin-firebase 除外)。我建议您在每次安装插件后构建您的应用程序,以检查一切是否正常。

    安装cordova-plugin-firebase-lib

    cordova 插件添加 cordova-plugin-firebase-lib

    安装cordova-plugin-androidx

    cordova插件添加cordova-plugin-androidx

    安装cordova-plugin-androidx-adapter

    cordova插件添加cordova-plugin-androidx-adapter

    将 firebase 设置文件复制到项目的根目录:Android 的 google-services.json 和 ios 的 GoogleService-Info.plist

    config.xml 复制资源标签(用于图标和启动画面)并将它们粘贴到新的 config.xml 中。

<platform name="android">
    <icon src="res/android/drawable-hdpi/icon.png" />
    <icon density="ldpi" src="res/android/drawable-ldpi/icon.png" />
    <icon density="mdpi" src="res/android/drawable-mdpi/icon.png" />
    <icon density="hdpi" src="res/android/drawable-hdpi/icon.png" />
    <icon density="xhdpi" src="res/android/drawable-xhdpi/icon.png" />
</platform>
<platform name="ios">
    <icon  src="res/ios/icon/1024x1024.png"  />
    <icon  src="res/ios/icon/Icon-60x60@3x.png"  />
    <icon  src="res/ios/icon/Icon-20x20@3x.png"  />
    <icon  src="res/ios/icon/Icon-40x40@3x.png"  />
    <icon  src="res/ios/icon/Icon-76x76@1x.png"  />
    <icon  src="res/ios/icon/Icon-76x76@2x.png"  />
    <icon  src="res/ios/icon/Icon-20x20@2x.png"  />
    <icon  src="res/ios/icon/Icon-40x40@2x.png"  />
    <icon  src="res/ios/icon/Icon-29x29@2x.png"  />
    <icon  src="res/ios/icon/Icon-29x29@1x.png"  />
    <icon  src="res/ios/icon/Icon-29x29@2x.png"  />
</platform>

    old res 文件夹复制到项目的根目录(包含所有图标和启动画面的文件夹)。

    李>

    将新 /www 文件夹的内容替换为原始文件夹的内容

    最后,构建您的项目

    cordova 构建安卓

就我而言,我有两个与新的 cordova、cordova-android、firebase sdk 版本冲突的插件:cordova-plugin-firebasecordova-plugin-locationservices,这些步骤让我可以继续我的项目。

【讨论】:

【参考方案8】:

删除文件夹node_modules和文件package-lock.json,然后在终端运行:

npm install

【讨论】:

【参考方案9】:

这是我修复的具体步骤

cordova build android

删除平台文件夹

ionic cordova platform remove android
ionic cordova plugin remove cordova-plugin-firebase
ionic cordova plugin add cordova-plugin-firebase-lib@3.3.0
ionic cordova plugin add cordova-plugin-androidx-adapter
cordova build android
ionic cordova platform add android
cordova plugin add cordova-plugin-whitelist
ionic cordova emulate

【讨论】:

【参考方案10】:

解决方案: 请按照以下顺序获取 科尔多瓦安卓平台

cordova 平台移除 android 科尔多瓦插件删除科尔多瓦插件火力基地 cordova 插件添加 cordova-plugin-firebase-lib@3.3.0 科尔多瓦平台添加安卓

【讨论】:

以上是关于谷歌 6 月 17 日 Firebase SDK 更新后,Ionic Cordova 应用程序停止编译的主要内容,如果未能解决你的问题,请参考以下文章

2017年6月17日 星期六 --出埃及记 Exodus 26:36

9月10日 星期六 --出埃及记 Exodus 17:6

历史上的今天10 月 5 日:Linux 内核正式面世;乔布斯逝世;谷歌发布 Android 6.0

备忘录2020 开发者大会明天见!

6月17日 TP框架增删改查

17年9月6日