【问题标题】:Cordova firebase plugin failuresCordova firebase 插件失败
【发布时间】:2020-03-03 20:19:14
【问题描述】:

在尝试使用 Android Studio 3.5.2、Android SDK 28 和 cordova-plugin-firebase I read here 编译以前工作的 Android 应用程序时,我应该安装 cordova-plugin-firebasex 作为工作且当前维护的分支在 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”。

我删除并重新安装了谷歌分析插件,并且成功卸载了 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' 的依赖关系。

在项目“app”中,已解决的 Google Play 服务库依赖项依赖于另一个确切版本(例如“[11.0.1]”,但不是 正在解决该版本。图书馆展示的行为将 不为人知。 依赖失败:com.google.android.gms:play-services-tagmanager-v4-impl:11.0.1 -> com.google.android.gms:play-service 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。

我仍然是库依赖项方面的菜鸟(尽管过去三天我一直在爬升学习曲线,以至于我需要氧气)——我怎样才能在这里找到罪魁祸首,以及为什么要使用插件那应该为我失败吗?

【问题讨论】:

    标签: android firebase cordova


    【解决方案1】:

    我设法找到了一个构建工作 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 中,添加:ignore 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:清单合并失败:属性 元数据#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 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多