Команда 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

Пожалуйста, найдите эту ссылку на репозиторий для получения дополнительной информации

Другие вопросы по тегам