科尔多瓦Firebase插件故障

时间:2019-11-07 09:23:40

标签: android firebase cordova

在尝试使用Android Studio 3.5.2,Android SDK 28和cordova-plugin-firebase I read here编译以前可以使用的Android应用程序时,我应该将cordova-plugin-firebasex安装为可正常使用且当前维护的fork适用于Androidx。

第一个问题,删除cordova-plugin-firebase,我解决如下:

您无法使用常规方法删除此插件

cordova plugin remove cordova.plugin.firebase --save

由于bug in the plugin.xml file,这将删除整个/ main目录:

 <resource-file src="src/android/google-services.json" target="."/> 

并且卸载失败。

我从XML文件中删除了该行,然后再次尝试通过cli删除插件。

这将导致此消息:

  

不支持使用“ requireCordovaModule”加载非cordova模块“ xcode”。取而代之的是,将此模块添加到您的依赖项中,并使用常规的“ require”进行加载。

instructions here之后,我编辑了plugins / cordova-plugin-firebase / scripts / ios / helper.js

我添加了

var xcode = require("xcode"); 

位于文件顶部,并删除两个实例

var xcode = context.requireCordovaModule("xcode");

再次尝试删除插件并得到

  

从ios卸载cordova-plugin-firebase   从osx卸载cordova-plugin-firebase删除   “ cordova-plugin-firebase”找不到插件的plugin.xml   “ cordova-plugin-google-analytics”。

我删除并重新安装了Google Analytics(分析)插件,然后成功卸载了Firebase插件。

然后,我添加了Firebasex以及用于播放服务和Firebase的推荐版本的牧马人:

cordova plugin add cordova-plugin-firebasex
cordova plugin add cordova-android-play-services-gradle-release 
cordova-android-firebase-gradle-release

我收到以下编译错误:

  

无法确定任务':app:compileReleaseJavaWithJavac'的依赖关系。   在项目“应用”中,已解决的Google Play服务库依赖性完全取决于另一个   版本(例如“ [15.0。     1]”,但尚未解决该版本。行为由展示   该库将是未知的。   依赖项失败:   com.google.android.gms:play-services-flags:15.0.1-> com.google.android.gms:play-services-basement @ [     15.0.1],但play-services-basement版本为17.0.0。

我已经尝试在整个目录中添加“:15.0.1”和“ @ 15.0.1”,但是我找不到罪魁祸首。我尝试卸载具有以下版本说明符的重新安装插件:

 cordova plugin add cordova-plugin-firebasex \
     --variable ANDROID_PLAY_SERVICES_TAGMANAGER_VERSION=17.0.0 \
     --variable ANDROID_FIREBASE_CORE_VERSION=17.0.0 \
     --variable ANDROID_FIREBASE_MESSAGING_VERSION=19.0.0 \
     --variable ANDROID_FIREBASE_CONFIG_VERSION=18.0.0 \
     --variable ANDROID_FIREBASE_PERF_VERSION=18.0.0 \
     --variable ANDROID_FIREBASE_AUTH_VERSION=18.0.0 \
     --variable ANDROID_CRASHLYTICS_VERSION=2.10.1 \
     --variable ANDROID_CRASHLYTICS_NDK_VERSION=2.1.0 \

并导致新的依赖项不匹配:

  

无法确定任务':app:preReleaseBuild'的依赖关系。

     
    

在项目“应用”中,已解决的Google Play服务库依赖项依赖于另一个版本(例如“ [11.0。1]”,但不是)     被解析为该版本。图书馆展示的行为将     未知。          依赖项失败:com.google.android.gms:play-services-tagmanager-v4-impl:11.0.1->     com.google.android.gms:play-servic es-basement @ [11.0.1],但     play-services-basement版本为17.0.0。

  

因此,我也尝试将所有库推到最新版本,结果如​​下 该应用程序的build.gradle:

dependencies {
    implementation fileTree(dir: 'libs', include: '*.jar')
    // SUB-PROJECT DEPENDENCIES START
    implementation(project(path: ":CordovaLib"))
    implementation 'com.google.android.gms:play-services-auth:17.0.0'
    implementation 'com.google.android.gms:play-services-identity:17.0.0'
    implementation "androidx.legacy:legacy-support-v4:1.0.0"
    implementation 'com.google.firebase:firebase-core:17.2.1'
    implementation 'com.google.firebase:firebase-messaging:20.0.0'
    implementation 'com.google.firebase:firebase-config:19.0.3'
    implementation 'com.google.firebase:firebase-perf:19.0.1'
    implementation 'com.google.android.gms:play-services-analytics:17.0.0'
    implementation "com.google.android.gms:play-services-tagmanager:17.0.0"
    implementation "com.google.firebase:firebase-core:17.2.1"
    implementation 'com.google.firebase:firebase-messaging:20.0.0'
    implementation 'com.google.firebase:firebase-config:19.0.3'
    implementation 'com.google.firebase:firebase-perf:19.0.1'
    implementation 'com.google.firebase:firebase-auth:19.1.0'
    implementation "com.crashlytics.sdk.android:crashlytics:2.10.1"
    implementation 'com.crashlytics.sdk.android:crashlytics-ndk:2.1.1'
    implementation "me.leolin:ShortcutBadger:1.1.22"
    // SUB-PROJECT DEPENDENCIES END }

哪个让我吐槽到

  

依赖项失败:com.google.android.gms:play-services-flags:15.0.1   -> com.google.android.gms:play-services-basement @ [   15.0.1],但play-services-basement版本为17.0.0。

我对图书馆的依存关系仍然不屑一顾(尽管最近三天我一直在爬升学习曲线,直到我需要氧气)–我如何在这里找到罪魁祸首,以及为什么插件应该为我失败做那件事?

1 个答案:

答案 0 :(得分:0)

我设法找到了一个可以正常运行的APK的解决方案。但是

  • 代码更改后,我不能再简单地重建应用程序,而必须删除 平台再次添加它,然后执行以下步骤。

  • 我不得不删除Firebase消息传递功能(我没有
    仍然使用它)

但是,如果这可能对花了太多时间试图使Firebase正常工作的其他人有用,这是我的过程:

如果已安装,请删除Firebasex插件和cordova-android-play-services-gradle-release插件以及cordova-android-firebase-gradle-release。 (如果您安装了FIREBASE而不是FIREBASEX,请参阅上面的问题以获取删除方法。)然后:

cordova plugin add cordova-plugin-firebasex 
cordova plugin add cordova-android-play-services-gradle-release  --variable  PLAY_SERVICES_VERSION=17.0.0
cordova plugin add cordova-android-firebase-gradle-release  --variable FIREBASE_VERSION=17.0.0


cordova platform rm android

cordova platform add android

cordova build android

rm platforms/android/app/libs/google-play-services.jar 

导入Android Studio。

它将警告您升级gradle版本。不要做

同步现在将成功,但是运行将失败,并显示错误消息:

  

安装未成功。无法安装该应用程序:   INSTALL_PARSE_FAILED_MANIFEST_MALFORMED安装失败,原因是:   'null'重试

在您的AndroidManfiest.xml中,向应用程序标签添加:忽略GoogleAppIndexingWarning:

<application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true"
    tools:ignore="GoogleAppIndexingWarning">

删除:

<service android:name="org.apache.cordova.firebase.FirebasePluginMessagingService"
    android:permission="TODO">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

删除:

<meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/accent" />
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id" />

如果此时运行该应用,您将收到类似以下消息:

  

java.lang.RuntimeException:清单合并失败:属性   meta-data#com.google.android.gms.version@value value =(59056789)来自   AndroidManifest.xml:31:66-90也位于   [com.google.android.gms:play-services-basement:17.0.0]   AndroidManifest.xml:25:13-66   值=(@ integer / google_play_services_version)。意见建议:添加   'tools:replace =“ android:value”'到元素   AndroidManifest.xml:31:9-94进行覆盖。

添加到Manifest.xml:

<meta-data android:name="com.google.android.gms.version" android:value="12451000" tools:replace="android:value" />

该应用程序现在可以正确编译,运行和报告Firebase事件。