Команда Ionic Build Android завершается с ошибкой после попытки добавить плагин календаря ngCordova
Я работаю ионный (1.7.15) в Ubuntu.
Мой проект работает нормально, пока я не попытаюсь реализовать плагин календаря. После установки этого плагина в мой проект, и я пытаюсь собрать с ionic build android
Команда, но я получаю следующую ошибку.
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
Я надеюсь, что вышеупомянутая ошибка происходит из-за нескольких плагинов в моем проекте, есть ли какое-либо решение. Я обнаружил, что эта ошибка связана с multidex
отсюда
Что я пробовал:
Я попытался обновить мой Android SDK.
Использование этого вопроса переполнения стека Не удалось разрешить все зависимости для конфигурации ':_armv7DebugCompile' Я сделал все, после этого я получаю вышеуказанную ошибку.
Вот мой файл package.json
{
"name": "app",
"version": "1.1.1",
"description": "app: An Ionic project",
"dependencies": {
"gulp": "^3.5.6",
"gulp-sass": "^2.0.4",
"gulp-concat": "^2.2.0",
"gulp-minify-css": "^0.3.0",
"gulp-rename": "^1.2.0"
},
"devDependencies": {
"bower": "^1.3.3",
"gulp-util": "^2.2.14",
"shelljs": "^0.3.0"
},
"cordovaPlugins": [
"cordova-plugin-device",
"cordova-plugin-console",
"cordova-plugin-whitelist",
"cordova-plugin-splashscreen",
"cordova-plugin-statusbar",
"ionic-plugin-keyboard",
{
"locator": "https://github.com/rossmartin/PushPlugin.git",
"id": "com.phonegap.plugins.PushPlugin"
}
],
"cordovaPlatforms": [
"android"
]
}
Вот мой файл fetch.json
{
"cordova-plugin-device": {
"source": {
"type": "registry",
"id": "cordova-plugin-device@~1.1.1"
},
"is_top_level": true,
"variables": {}
},
"cordova-plugin-console": {
"source": {
"type": "registry",
"id": "cordova-plugin-console@~1.0.2"
},
"is_top_level": true,
"variables": {}
},
"cordova-plugin-whitelist": {
"source": {
"type": "registry",
"id": "cordova-plugin-whitelist"
},
"is_top_level": true,
"variables": {}
},
"cordova-plugin-splashscreen": {
"source": {
"type": "registry",
"id": "cordova-plugin-splashscreen"
},
"is_top_level": true,
"variables": {}
},
"cordova-plugin-statusbar": {
"source": {
"type": "registry",
"id": "cordova-plugin-statusbar@~2.1.0"
},
"is_top_level": true,
"variables": {}
},
"ionic-plugin-keyboard": {
"source": {
"type": "registry",
"id": "ionic-plugin-keyboard"
},
"is_top_level": true,
"variables": {}
},
"cordova-plugin-camera": {
"source": {
"type": "registry",
"id": "cordova-plugin-camera"
},
"is_top_level": true,
"variables": {}
},
"phonegap-plugin-push": {
"source": {
"type": "registry",
"id": "phonegap-plugin-push"
},
"is_top_level": true,
"variables": {}
},
"com.phonegap.plugins.PushPlugin": {
"source": {
"type": "git",
"url": "https://github.com/phonegap-build/PushPlugin.git",
"subdir": "."
},
"is_top_level": true,
"variables": {}
},
"cordova-plugin-datepicker": {
"source": {
"type": "git",
"url": "https://github.com/VitaliiBlagodir/cordova-plugin-datepicker.git",
"subdir": "."
},
"is_top_level": true,
"variables": {}
},
"cordova-plugin-calendar": {
"source": {
"type": "registry",
"id": "cordova-plugin-calendar"
},
"is_top_level": true,
"variables": {}
},
"cordova-plugin-crosswalk-webview": {
"source": {
"type": "registry",
"id": "cordova-plugin-crosswalk-webview"
},
"is_top_level": true,
"variables": {}
}
}
Я понятия не имею, что пошло не так, пожалуйста, кто-нибудь, помогите мне.
2 ответа
Ваша проблема в том, что вы используете устаревшую версию push-плагина. От твоего package.json
, вы включаете https://github.com/rossmartin/PushPlugin.git который является не поддерживаемой ветвью устаревшего плагина, который не обновлялся в течение 2 лет. Следовательно, если вы посмотрите на его plugin.xml
Вы можете видеть, что она включает в себя библиотеку поддержки Android в качестве JAR для устаревшего процесса сборки Cordova, управляемого Ant.
<source-file src="src/android/com/plugin/android-support-v13.jar" target-dir="libs/" />
Вам необходимо удалить эту версию плагина и заменить ее на современный эквивалент cordova-plugin-push
, который использует Gradle для включения библиотеки поддержки:
<framework src="com.android.support:support-v13:23+" />
Обратите внимание, что вам нужно будет собрать для Android API v23, поэтому он должен быть установлен через SDK Manager и использовать версию 5+ платформы Cordova Android (cordova-android@5+
).
ОБНОВИТЬ
В файл build.gradle я добавляю эти строки.
В зависимости добавьте эту строку скомпилировать 'com.android.support:multidex:1.0.1'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
// SUB-PROJECT DEPENDENCIES START
debugCompile project(path: "CordovaLib", configuration: "debug")
releaseCompile project(path: "CordovaLib", configuration: "release")
compile "com.android.support:support-v4:+"
// SUB-PROJECT DEPENDENCIES END
compile 'com.android.support:multidex:1.0.1'
}
конфигурация по умолчанию добавить эту строку multiDexEnabled true
defaultConfig {
versionCode cdvVersionCode ?: Integer.parseInt("" + privateHelpers.extractIntFromManifest("versionCode") + "0")
applicationId privateHelpers.extractStringFromManifest("package")
if (cdvMinSdkVersion != null) {
minSdkVersion cdvMinSdkVersion
}
multiDexEnabled true
}
После добавления этих строк я получил сообщение об ошибке на этом сайте и решил ее, удалив платформу /android/libs/. Вы можете увидеть, как "android-support-v13.jar" удалить этот файл
Все ваши плагины, которые были установлены для проекта, ищут файл plugin.xml, а затем проверяют любую строку, которая ссылается на этот android-support-v13.jar, и комментируют или делают, как указано выше, спасибо
Вот простой готовый плагин, который делает build.gradle
работать на тебя
cordova plugin add cordova-plugin-enable-multidex
Пожалуйста, найдите эту ссылку на репозиторий для получения дополнительной информации