Сбои плагина Cordova Firebase - PullRequest
       16

Сбои плагина Cordova Firebase

0 голосов
/ 07 ноября 2019

При попытке скомпилировать ранее работавшее приложение для Android с Android Studio 3.5.2, Android SDK 28 и cordova-plugin-firebase я прочитал здесь , что я должен установить cordova-plugin-firebasex в качестве рабочегои в настоящее время поддерживается вилка, которая работает на Androidx.

Первый вопрос, удалив cordova-plugin-firebase, я решил следующим образом:

Нельзя удалить этот плагин обычным способом

cordova plugin remove cordova.plugin.firebase --save

Это удаляет всеКаталог / main из-за ошибки в файле plugin.xml :

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

и удаление не удалось.

Я удалил эту строку из файла XML и сновапопытался удалить плагин через кли.

Это приводит к этому сообщению:

Использование «requireCordovaModule» для загрузки модуля non-cordova «xcode» не поддерживается. Вместо этого добавьте этот модуль к своим зависимостям и используйте обычные «require» для его загрузки.

Следуя инструкциям здесь Я редактировал плагины / cordova-plugin-firebase / scripts / ios /helper.js

Я добавил

var xcode = require("xcode"); 

вверху файла и удалил два экземпляра из

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

Снова попытайтесь удалитьи получил плагин

Удаление cordova-plugin-firebase из ios Удаление cordova-plugin-firebase из osx Удаление "cordova-plugin-firebase" Не удается найти файл plugin.xml для плагина "cordova-plugin-google-analytics ".

Я удалил и переустановил плагин google analytics, и плагин firebase был успешно удален.

Затем я добавил Firebasex и рекомендуемые версии wranglers для сервисов воспроизведения и 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]», но не разрешается в этой версии. Поведение, демонстрируемое библиотекой, будет неизвестно.Зависимость Фаяling: 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 голосов
/ 11 ноября 2019

Мне удалось найти решение, которое создает работающий 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' Retry

В вашем AndroidManfiest.xml добавьте: игнорировать GoogleAppIndexingВнимание к тегу приложения:

<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 value = (@ 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...