Проект Cordova CLI игнорирует дополнения к сборке после обновления набора инструментов - PullRequest
0 голосов
/ 19 сентября 2018

До недавнего времени я использовал следующие

  • Cordova Android 6.3.0
  • Gradle 4.9
    • Узел 8.9.2

для создания моего гибридного приложения для Android, которое использует один пользовательский - т.е. написанный мной - плагин.Плагин, в свою очередь, имеет ряд внешних зависимостей, которые я указываю через файл myapp / platform / android / build-extras.gradle , который указан ниже

ext.postBuildExtras = 
{
 android
 {
  dependencies
  {
   compile 'com.squareup.duktape:duktape-android:1.3.0'    
   compile 'net.zetetic:android-database-sqlcipher:3.5.9@aar'
   compile 'co.realtime:messaging-android:2.1.+'
   compile 'com.google.android.gms:play-services-location:15.0.1'
   compile 'com.android.installreferrer:installreferrer:1.0'
  } 
  defaultConfig
  {
   jackOptions {enabled true}
  }
  compileOptions 
  {
   sourceCompatibility JavaVersion.VERSION_1_8
   targetCompatibility JavaVersion.VERSION_1_8
  }
  allprojects
  {
   compileOptions
   {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
   }
  }
 }
}

Я нацеливаюсь на Android SDK26 с минимальным уровнем SDK, установленным на 23. Мой файл Cordova config.xml показан ниже

<?xml version='1.0' encoding='utf-8'?>
<widget android-versionCode="1190" android-versionName="Etoile-2" 
 id="my.app.id" version="1.1.9" xmlns="http://www.w3.org/ns/widgets" 
 xmlns:cdv="http://cordova.apache.org/ns/1.0">
 <name>My App</name>
 <description>My App</description>
 <author email="someone@gmail.com" href="https://example.org">My Name. 
 </author>
 <content src="index.html" />
 <access origin="*" />
 <icon platform="android" qualifier="mdpi" src="res/mdpi.png" />
 <icon platform="android" qualifier="hdpi" src="res/hdpi.png" />
 <icon platform="android" qualifier="xhdpi" src="res/xhdpi.png" />
 <icon platform="android" qualifier="xxdpi" src="res/xxdpi.png" />
 <icon platform="android" qualifier="xxxdpi" src="res/xxxdpi.png" />
 <allow-intent href="http://*/*" />
 <allow-intent href="https://*/*" />
 <allow-intent href="tel:*" />
 <allow-intent href="sms:*" />
 <allow-intent href="mailto:*" />
 <allow-intent href="geo:*" />
 <platform name="android">
     <allow-intent href="market:*" />
     <FrameLayout android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      xmlns:android="http://schemas.android.com/apk/res/android">
    </FrameLayout>
    <preference name="android-minSdkVersion" value="23" />
    <preference name="android-targetSdkVersion" value="26" />
 </platform>
 <preference name="Orientation" value="portrait" />
 <plugin name="ext.org.plugin" spec="path:\to\my\plugin" />
 <engine name="android" spec="^7.0.0" />
</widget>

Я нахожусь в процессе подготовки более современного ПК с Windows для моих сборок Android.В процессе я обновил до

  • Cordova Android 7.0.0
  • Gradle 4.10.0 (установлен через Scoop)
  • Node 10.10.0

Я прошел пошаговую процедуру восстановления всего проекта

  1. Создание нового проекта Cordova CLI cordova create myapp ext.example.myproj MyApp
  2. Добавление платформы Android cordova platform add android который добавляет Cordova Android 7.0.0
  3. Создание этого фиктивного приложения cordova build android --debug: работает
  4. Замените Cordova config.xml по умолчанию на мою версию (показанную выше) за вычетом ссылки на мой пользовательский плагин
  5. Построить заново - все еще работает
  6. Скопировать через мой оригинальный build-extras.gradle файл в myapp / platform / android
  7. Построить снова - все еще работает
  8. Добавить мойПользовательский плагин cordova plugin add 'path:\to\my\plugin
  9. Выдайте cordova clean, за которым следует cordova build android, что приведет к ошибкам вдоль линий

    : app: compileDebugJavaWithJavac path: \ to \ my \ app\ platform \ android \ app \ src \ main \ java \ ext \ example \ plugin \ BCTrailer.java: 4: ошибка: пакет net.sqlcipher does не существует import net.sqlcipher.Cursor;

, что, по-видимому, означает, что содержимое моего build-extras.gradle файла не использовалось во время сборки.Я намеренно испортил этот файл, оставив скобку, чтобы сделать XML недействительным.Если бы файл читали, я ожидал, что Градл будет жаловаться.Вместо этого он просто идет вперед и выдает те же ошибки, такие как package net.sqlcipher не существует и т. Д.

Я отмечал разговоры о том, что compile не рекомендуется в зависимости в пользу целого нового набора команд, таких как implementation и api.Я попытался заменить compile на implementation в своем собственном файле build-extras.gradle, но безрезультатно.

Очевидно, я здесь что-то делаю не так, и это связано с изменениями в Gradle.Я был бы очень признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Обновление: исправлено в cordova-android 7.1.3

В cordova-android 7.1.3 был включен мой запрос на извлечение, поэтому проблема исправлена ​​ см. примечания к выпуску

Для cordova-android> = 7.0.0, но <7.1.3 </h1> Переместить (или скопировать) build-extras.gradle в platforms/android/app/ Старый ответ: У меня была похожая проблема.Начиная с cordova-android 7.0, cordova изменила структуру каталогов и пропустила некоторые изменения в этом коде. Чтобы заставить build-extras.gradle работать снова, просто переместите его или лучше скопируйте его (когда cordova-android следует их документацииеще раз) platforms/android/app/. Вот проблема и здесь запрос на получение

0 голосов
/ 20 сентября 2018

Хотя я до сих пор не понимаю основную причину проблем, с которыми я столкнулся при попытке обновить набор инструментов для сборки Android APK, у меня теперь есть решение, которым я делюсь здесь, в интересах других, кто находит эту тему.

  • В Cordova Android 7.0.0 (в отличие от 6.3.1, который я использовал ранее) build-extras.gradle в папке myapp/platforms/android игнорируется.
  • Это было в любом случаенекорректно начинать объявление зависимостей плагина через файл build-extras в самом проекте APK.
  • Несмотря на то, что это всегда работало для меня перед этим обновлением цепочки инструментов, я нахожу довольно странным, что зависимости, объявленные в build-extras.gradle **ext.postBuildExtras**, работали для разветвления внешних зависимостей в плагине, который, как полагают, имелк этому моменту был встроен в приложение.
  • Я попытался переключить объявление своих зависимостей в файл build.gradle в реальном плагине .Однако это не изменило результат - зависимости не попали в сборку, в результате чего различные объявления import path.to.external.dependency в модулях Java в плагине приводили к ошибкам.
  • Я удалил файл build.gradle иобъявил зависимости через серию <framework src='path/to/dependency' /> операторов зависимостей в файле plugin.xml и Bingo!- все это работало.

В качестве примечания: с Cordova Android 7 и чем-либо более высоким, чем Node 9.0, вам больше не нужно использовать, теперь не рекомендуемый, компилятор Jack или делать что-либо еще, чтобы убедить Gradle /Android / Cordova для использования Java 8. Теперь я больше не использую файл build-extras.gradle в своем приложении или файл build.gradle в своем плагине.

...