операция не разрешена, разорвать связь при добавлении плагина cordova-plugin-firebase в ionic

#ionic-framework

#ionic-framework

Вопрос:

Установка «cordova-plugin-firebase» для Android Ошибка при обработке действия! Попытка возврата… Не удалось установить ‘cordova-plugin-firebase’: Ошибка: ого! EPERM: операция не разрешена, разорвать связь ‘F:ionicPkjshopMerchantplatformsandroidappsrcmain ‘ в Object.unlinkSync (fs.js:1129:3) в mayCopyFile (F:ionicPkjshopMerchantplatformsandroidcordovanode_modulesfs-extralibcopy-synccopy-sync.js:59:8)

Ответ №1:

Как указано в этой ссылке: https://github.com/arnesson/cordova-plugin-firebase/issues/1154 для этого существует возможное решение, которое не понижает рейтинг до cordova@8.0.0

Изучая сообщение об ошибке, возникающее во время установки плагина firebase, мы провели сеанс отладки и обнаружили, что что-то пошло не так, пока плагин пытался скопировать сервисы Google.файл json из папки плагина в папку проекта.

Сообщение об ошибке было: Ошибка при обработке действия! Попытка возврата… Не удалось установить ‘cordova-plugin-firebase-lib’: Ошибка: Ой-ой! EPERM: операция не разрешена, отсоедините ссылку ‘[Папка моего проекта] apk platforms android app src main’

Это что-то с правами на запись в файл, но мы не смогли решить эту проблему, изменив права доступа к папкам и индексирование.

Из трассировки стека мы увидели, что операция копирования была обработана функцией mayCopyFile в copy-sync.js файл javascript , который был расположен в ..папка apk node_modules fs-extra lib copy-sync.

Вот тело функции:

 function mayCopyFile (srcStat, src, dest, opts) {
  if (opts.overwrite) {
    fs.unlinkSync(dest)
    return copyFile(srcStat, src, dest, opts)
  } else if (opts.errorOnExist) {
     throw new Error('${dest}' already exists)
  }
}
  

Вызовы fsunlinkSync и CopyFile здесь приводят к сбою установки. Мы не смогли продолжить отладку дальше, возможно, было бы лучше продолжить, но мы остановились здесь и нашли это решение:

Поскольку эти строки кода пытаются скопировать google-сервисы.файл json из ..apk plugins cordova-plugin-firebase src android расположение в ..apk platforms android app src main destination, мы решили сделать эту копию вручную.

Итак, вот шаги, которые мы выполнили:

Убедитесь, что у вас есть чистая папка проекта cordova без плагина firebase.

Установите платформу Android 9.0.0, если ее еще нет: платформа cordova rm android платформа cordova добавить android@9.0.0

Закомментируйте строки fsunlinkSync и CopyFile в функции mayCopyFile в ..apk node_modules fs-extra lib copy-sync copy-sync.js досье.

установить плагин firebase: добавить плагин cordova cordova-plugin-firebase-lib@3.0.0 (Мы всегда использовали эту библиотеку. К сожалению, cordova-plugin-firebase выдает другие ошибки сборки)

Убедитесь, что плагин установлен, а платформа — android 9.0.0 cordova plugin ls cordova platform ls

Скопируйте google-сервисы.файл json из ..apk plugins cordova-plugin-firebase src android расположение в ..apk platforms android app src main destination, вручную.

Перед сборкой cordova раскомментируйте строки кода, которые вы закомментировали на 3-м шаге, потому что сборка cordova скопирует множество файлов из некоторого исходного местоположения в некоторое место назначения, которое неразумно копировать вручную.

Отредактируйте файл build.gradle в папке apk platforms android (измените версию gradle соответствующим образом): путь к классу ‘io.fabric.tools:gradle: 1.28.0’

        cordova build android

       cordova run android
  

Это сработало. Конечно, мы добавили плагин cordova-device, отредактировали config.xml , добавлены google-сервисы.json в корневую папку проекта и т. Д., Как обычно, Для обеспечения работы плагина.