Ionic Cordova 应用程序在 Google 的 6 月 17 日 Firebase SDK 更新后停止编译
Ionic Cordova app stopped compiling after Google's June 17th Firebase SDK update
在具有重大更改的 Firebase 主要版本更新后,特别是 2019 年 6 月 17 日更新后,我无法编译 Ionic Cordova 应用程序。
我尝试降级到 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.aarb4a83ab5e76f20c84a66b1c8444d08\res\values\values.xml:133:5-70: AAPT: error: resource android:attr/fontVariationSettings not found.
C:\Users\mmzep.gradle\caches\transforms-1\files-1.1\core-1.0.0.aarb4a83ab5e76f20c84a66b1c8444d08\res\values\values.xml:133:5-70: AAPT: error: resource android:attr/ttcIndex not found.
C:\Users\mmzep\Desktop\mario\Seven\SevenPassengerApp\platforms\android\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:95:
error: resource android:attr/fontVariationSettings not found.
C:\Users\mmzep\Desktop\mario\Seven\SevenPassengerApp\platforms\android\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:95:
error: resource android:attr/ttcIndex not found. error: failed linking
references.
Failed to execute aapt
com.android.ide.common.process.ProcessException: Failed to execute
aapt
此构建失败是由于 6 月 17 日的 major version release of the Google Play Services and Firebase libaries。
新的库版本有以下要求:
- Upgrade
com.android.tools.build:gradle
to v3.2.1 or later.
- Upgrade
compileSdkVersion
to 28 or later.
- Update your app to use Jetpack (AndroidX)
前两个要求可以通过更新为使用cordova-android@8.0.0
来解决。
第三个要求您的 Android 项目迁移到使用 AndroidX (Jetpack)。
AndroidX is the successor to the widely-used Android Support Library。
AndroidX 现在被最新版本的 Play Services/Firebase 库使用,Support 库被许多现有插件使用,例如 cordova-plugin-firebase。
这两个库不能 side-by-side 在同一个 Android 构建中 - 这样做会导致构建失败。
要解决此问题,请在您的 Cordova 项目中添加以下两个插件:
- cordova-plugin-androidx 在 Android 项目中启用 AndroidX。
- cordova-plugin-androidx-adapter 动态修补任何使用支持库的插件的源代码,以使用 AndroidX 等效项。
有关如何在测试项目中进行尝试的工作示例,请参阅 my comment on this Github issue。
注意: 如果您使用 cordova-plugin-firebase 并遇到错误,您可以改用 我的那个插件的分支 作为 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
1。第一个回答
We have created a PR for this https://github.com/wizpanda/cordova-plugin-firebase-lib/pull/13 但这需要将 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
在 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-适配器非常适合我。
感谢您提供此解决方案。
我只是想知道使用这两个插件是否是一个很好的长期赌注。有什么意见吗?
我建议您尝试在 build-extras.gradle 项目的 platform/android 文件夹中添加:
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 的库时都会发生这种情况.. 这非常烦人。我希望能够关闭构建命令的自动依赖更新,但我认为这是不可能的。
按照下面的顺序 cordova-android <= 7.1.4
cordova 平台删除 android
cordova 插件删除 cordova-plugin-firebase
cordova插件添加cordova-plugin-firebase-lib@3.3.0
cordova 平台添加 android
cordova-plugin-firebase 现在包含在 cordova-plugin-firebase-lib
中
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 again)
我在 android 7.0.0 中有一个 dex 合并 问题。所以我用了android 8.0.0
使用android8.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
如果您尝试了所有方法但仍无法构建您的 cordova android 项目,请按照以下步骤操作。
我已经在这个问题上工作了五天,这是唯一适合我的解决方案(它是解决方案和评论的重新编译,按照我遵循的顺序排列以使我的项目工作):
安装最新的cordova版本 (cordova@9.0.0):
npm install -g cordova
新建一个空白的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-适配器
cordova 插件添加 cordova-plugin-androidx-适配器
将 firebase 设置文件复制到项目的根目录:google-services.json for Android 和GoogleService-Info.plist iOS
从您的旧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 height="180" src="res/ios/icon/1024x1024.png" width="1024" />
<icon height="180" src="res/ios/icon/Icon-60x60@3x.png" width="180" />
<icon height="60" src="res/ios/icon/Icon-20x20@3x.png" width="60" />
<icon height="120" src="res/ios/icon/Icon-40x40@3x.png" width="120" />
<icon height="76" src="res/ios/icon/Icon-76x76@1x.png" width="76" />
<icon height="152" src="res/ios/icon/Icon-76x76@2x.png" width="152" />
<icon height="40" src="res/ios/icon/Icon-20x20@2x.png" width="40" />
<icon height="80" src="res/ios/icon/Icon-40x40@2x.png" width="80" />
<icon height="57" src="res/ios/icon/Icon-29x29@2x.png" width="57" />
<icon height="29" src="res/ios/icon/Icon-29x29@1x.png" width="29" />
<icon height="58" src="res/ios/icon/Icon-29x29@2x.png" width="58" />
</platform>
将 old res 文件夹复制到项目的根目录(包含所有图标和闪屏)。
将新 /www 文件夹 的内容替换为原始文件夹的内容。
最后,构建你的项目
科尔多瓦构建android
就我而言,我有两个插件与新的 cordova cordova-android、firebase sdk 版本冲突:cordova-plugin-firebase 和 cordova-plugin-locationservices,这些步骤让我继续我的项目。
删除文件夹 node_modules
和文件 package-lock.json
,然后在终端 运行:
npm install
这是我修复的具体步骤
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
解决方案:
按照下面的顺序
科尔多瓦 android 平台 <= 7.1.4
cordova 平台删除 android
cordova 插件删除 cordova-plugin-firebase
cordova 插件添加 cordova-plugin-firebase-lib@3.3.0
cordova 平台添加 android
在具有重大更改的 Firebase 主要版本更新后,特别是 2019 年 6 月 17 日更新后,我无法编译 Ionic Cordova 应用程序。
我尝试降级到 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.aarb4a83ab5e76f20c84a66b1c8444d08\res\values\values.xml:133:5-70: AAPT: error: resource android:attr/fontVariationSettings not found.
C:\Users\mmzep.gradle\caches\transforms-1\files-1.1\core-1.0.0.aarb4a83ab5e76f20c84a66b1c8444d08\res\values\values.xml:133:5-70: AAPT: error: resource android:attr/ttcIndex not found.
C:\Users\mmzep\Desktop\mario\Seven\SevenPassengerApp\platforms\android\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:95: error: resource android:attr/fontVariationSettings not found. C:\Users\mmzep\Desktop\mario\Seven\SevenPassengerApp\platforms\android\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:95: error: resource android:attr/ttcIndex not found. error: failed linking references.
Failed to execute aapt
com.android.ide.common.process.ProcessException: Failed to execute aapt
此构建失败是由于 6 月 17 日的 major version release of the Google Play Services and Firebase libaries。
新的库版本有以下要求:
- Upgrade
com.android.tools.build:gradle
to v3.2.1 or later.- Upgrade
compileSdkVersion
to 28 or later.- Update your app to use Jetpack (AndroidX)
前两个要求可以通过更新为使用cordova-android@8.0.0
来解决。
第三个要求您的 Android 项目迁移到使用 AndroidX (Jetpack)。 AndroidX is the successor to the widely-used Android Support Library。 AndroidX 现在被最新版本的 Play Services/Firebase 库使用,Support 库被许多现有插件使用,例如 cordova-plugin-firebase。 这两个库不能 side-by-side 在同一个 Android 构建中 - 这样做会导致构建失败。
要解决此问题,请在您的 Cordova 项目中添加以下两个插件:
- cordova-plugin-androidx 在 Android 项目中启用 AndroidX。
- cordova-plugin-androidx-adapter 动态修补任何使用支持库的插件的源代码,以使用 AndroidX 等效项。
有关如何在测试项目中进行尝试的工作示例,请参阅 my comment on this Github issue。
注意: 如果您使用 cordova-plugin-firebase 并遇到错误,您可以改用 我的那个插件的分支 作为 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
1。第一个回答
We have created a PR for this https://github.com/wizpanda/cordova-plugin-firebase-lib/pull/13 但这需要将 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
在 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-适配器非常适合我。
感谢您提供此解决方案。
我只是想知道使用这两个插件是否是一个很好的长期赌注。有什么意见吗?
我建议您尝试在 build-extras.gradle 项目的 platform/android 文件夹中添加:
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 的库时都会发生这种情况.. 这非常烦人。我希望能够关闭构建命令的自动依赖更新,但我认为这是不可能的。
按照下面的顺序 cordova-android <= 7.1.4
cordova 平台删除 android
cordova 插件删除 cordova-plugin-firebase
cordova插件添加cordova-plugin-firebase-lib@3.3.0
cordova 平台添加 android
cordova-plugin-firebase 现在包含在 cordova-plugin-firebase-lib
中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 again)
我在 android 7.0.0 中有一个 dex 合并 问题。所以我用了android 8.0.0
使用android8.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
如果您尝试了所有方法但仍无法构建您的 cordova android 项目,请按照以下步骤操作。
我已经在这个问题上工作了五天,这是唯一适合我的解决方案(它是解决方案和评论的重新编译,按照我遵循的顺序排列以使我的项目工作):
安装最新的cordova版本 (cordova@9.0.0):
npm install -g cordova
新建一个空白的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-适配器
cordova 插件添加 cordova-plugin-androidx-适配器
将 firebase 设置文件复制到项目的根目录:google-services.json for Android 和GoogleService-Info.plist iOS
从您的旧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 height="180" src="res/ios/icon/1024x1024.png" width="1024" />
<icon height="180" src="res/ios/icon/Icon-60x60@3x.png" width="180" />
<icon height="60" src="res/ios/icon/Icon-20x20@3x.png" width="60" />
<icon height="120" src="res/ios/icon/Icon-40x40@3x.png" width="120" />
<icon height="76" src="res/ios/icon/Icon-76x76@1x.png" width="76" />
<icon height="152" src="res/ios/icon/Icon-76x76@2x.png" width="152" />
<icon height="40" src="res/ios/icon/Icon-20x20@2x.png" width="40" />
<icon height="80" src="res/ios/icon/Icon-40x40@2x.png" width="80" />
<icon height="57" src="res/ios/icon/Icon-29x29@2x.png" width="57" />
<icon height="29" src="res/ios/icon/Icon-29x29@1x.png" width="29" />
<icon height="58" src="res/ios/icon/Icon-29x29@2x.png" width="58" />
</platform>
将 old res 文件夹复制到项目的根目录(包含所有图标和闪屏)。
将新 /www 文件夹 的内容替换为原始文件夹的内容。
最后,构建你的项目
科尔多瓦构建android
就我而言,我有两个插件与新的 cordova cordova-android、firebase sdk 版本冲突:cordova-plugin-firebase 和 cordova-plugin-locationservices,这些步骤让我继续我的项目。
删除文件夹 node_modules
和文件 package-lock.json
,然后在终端 运行:
npm install
这是我修复的具体步骤
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
解决方案:
按照下面的顺序
科尔多瓦 android 平台 <= 7.1.4
cordova 平台删除 android
cordova 插件删除 cordova-plugin-firebase
cordova 插件添加 cordova-plugin-firebase-lib@3.3.0
cordova 平台添加 android