Сборка cordova-plugin-xapkreader с помощью cordova-android 6.4.0 - PullRequest
0 голосов
/ 03 мая 2018

Я унаследовал проект cordova, в котором используется cordova-plugin-xapkreader, который, похоже, является стандартным плагином для доступа к файлам расширения (он же OBB). Я столкнулся с проблемой, которая может повлиять на другие плагины Cordova. Я получаю следующие ошибки при запуске cordova build android:

Configuration 'compile' in project ':' is deprecated. Use 'implementation' instead.
publishNonDefault is deprecated and has no effect anymore. All variants are now published.
Configuration 'compile' in project ':com.flyingsoftgames.xapkreader:downloader_library' is deprecated. Use 'implementation' instead.
publishNonDefault is deprecated and has no effect anymore. All variants are now published.
Configuration 'debugCompile' in project ':com.flyingsoftgames.xapkreader:downloader_library' is deprecated. Use 'debugImplementation' instead.
Configuration 'releaseCompile' in project ':com.flyingsoftgames.xapkreader:downloader_library' is deprecated. Use 'releaseImplementation' instead.
Configuration 'compile' in project ':com.flyingsoftgames.xapkreader:library' is deprecated. Use 'implementation' instead.

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine the dependencies of task ':compileDebugJavaWithJavac'.
> Could not resolve all task dependencies for configuration ':debugCompileClasspath'.
   > Could not resolve project :com.flyingsoftgames.xapkreader:library.
     Required by:
         project : > project :com.flyingsoftgames.xapkreader:downloader_library
      > Project :com.flyingsoftgames.xapkreader:downloader_library declares a dependency from configuration 'debugCompile' to configuration 'debug' which is not declared in the descriptor for project :com.flyingsoftgames.xapkreader:library.

Это было сообщено как ошибка на форуме плагина кем-то еще, но обходной путь не работает надежно:

https://github.com/agamemnus/cordova-plugin-xapkreader/issues/116

Проблема заключается в том, что gradle ожидает, что вы теперь будете использовать implementation, а не compile, debugCompile и т. Д. Файл gradle для плагина генерируется кордовой на основе шаблона внутри cordova-android. Предложенный обходной путь - изменить шаблон (или сгенерированные файлы Gradle) в скрипте, запущенном из ловушки cordova. К сожалению, по некоторым причинам, крючки не работают надежно - иногда они работают, иногда нет. Такое ощущение, что это может быть связано с состоянием гонки, вызванным асинхронным перехватом хуков с остальным процессом сборки, поэтому иногда сборка gradle начинается до того, как файлы gradle могут быть изменены.

У кого-нибудь есть идеи, как правильно это исправить? Кто-нибудь знает, почему это не более распространенная проблема, которую проект cordova-android не устранил, изменив их шаблон? Это что-то, что я могу исправить путем понижения какой-то части процесса сборки?

Я довольно новичок в Кордове, так что все это довольно сложно и любая помощь очень ценится!

1 Ответ

0 голосов
/ 15 мая 2019

К сожалению, по некоторым причинам, крючки не работают надежно - иногда они делают, иногда нет. Такое ощущение, что это может быть связано с состоянием гонки, вызванным асинхронным движением крючков. с остальной частью процесса сборки - так что иногда сборка Gradle имеет запускается до изменения файлов Gradle.

Я думаю, что это можно исправить, заставив хук вернуть обещание. Таким образом, вы можете быть уверены, что остальная часть сборки не будет работать параллельно. Я опубликовал код, который я использую в выпуске github.

Действующий код следующий:
- создать обещание в начале крючка:
const deferral = context.requireCordovaModule('q').defer();
- вернуть обещание в конце крючка:
return deferral.promise;
- выполнить обещание после завершения работы (файл записывается):
deferral.resolve();

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