android - android-Ionic Cordova应用在Google于6月17日更新Firebase SDK后停止编译

Firebase Major版本更新后,出现重大变化,尤其是2019年6月17日更新后,我无法编译Ionic Cordova App。

这是我的Ionic信息:


@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:Developmentandroid-sdk



Misc:



 backend : pro



这就是我得到的错误:


:app:processDebugResources


C:Usersmmzep.gradlecachestransforms-1files-1.1core-1.0.0.aar73b4a83ab5e76f20c84a66b1c8444d08resvaluesvalues.xml:133:5-70: AAPT: error: resource android:attr/fontVariationSettings not found.



C:Usersmmzep.gradlecachestransforms-1files-1.1core-1.0.0.aar73b4a83ab5e76f20c84a66b1c8444d08resvaluesvalues.xml:133:5-70: AAPT: error: resource android:attr/ttcIndex not found.



C:UsersmmzepDesktopmarioSevenSevenPassengerAppplatformsandroidappbuildintermediatesincrementalmergeDebugResourcesmerged.dirvaluesvalues.xml:95: error: resource android:attr/fontVariationSettings not found.


C:UsersmmzepDesktopmarioSevenSevenPassengerAppplatformsandroidappbuildintermediatesincrementalmergeDebugResourcesmerged.dirvaluesvalues.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日发布了Google Play服务和Firebase库的主要版本。

新的库版本有以下要求:

  • com.android.tools.build:gradle升级到v3.2.1或更高版本,
  • compileSdkVersion升级到28或更高版本,
  • 更新应用程序以便使用Jetpack (AndroidX )

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

第三个要求你的Android项目迁移到使用AndroidX(Jetpack)。androidX是被广泛使用的android Support Library ,现在,最新版本的Play服务/Firebase库使用了AndroidX,而许多现有插件(例如,cordova-plugin-firebase)都使用了Support库。这两个库不能在同一个Android构建中并行运行-这样做会导致构建失败。

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

  • cordova-plugin-androidx在Android项目中启用AndroidX ,
  • cordova-plugin-androidx-adapter使用Support Library动态地修补插件的源代码,AndroidX的等效项,

有关如何在测试项目中使用这个操作的例子,请参见我对这个github问题的评论 。

注意:如果你使用的是cordova-plugin-firebase,则可以使用我那个插件的fork来修复,解决新的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



在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:+



我遇到同样的问题(错误: resource android:attr/ttcIndex not found) .

cordova-android@8.0.0 cordova-plugin-androidx cordova-plugin-androidx-adapter非常适合我。

建议你尝试在你的项目的平台/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'


 }


}



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

按照下面的顺序执行cordova < =7.1.4

cordova platform remove android
cordova plugin remove cordova-plugin-firebase
cordova plugin add cordova-plugin-firebase-lib@3.3.0
cordova platform add android

cordova-plugin-firebase现在包含在cordova-plugin-firebase库中了

...