Ionic Build Android command fails with an exception after trying to add ngCordova calendar plugin
Asked Answered
S

2

1

I am working ionic(1.7.15) in ubuntu.

My project works fine until i try to implement calendar plugin. After installing this plugin to my project and i try to build with ionic build android command but i am getting the following error.

enter image description here

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;

I hope the above error occurs due to multiple plugin in my project is there any solution. I found this error is related to multidex from here.

What i have tried:

I have tried the upgrading my android SDK.

Using this stack-overflow question Could not resolve all dependencies for configuration ':_armv7DebugCompile' i have done all after that i am getting the above error.

Here is my package.json file

{
  "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"
  ]
}

Here is my fetch.json file

{
    "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": {}
    }
}

I have no idea about what went wrong please anyone help me.

Schooling answered 31/5, 2016 at 6:16 Comment(4)
I think @EmptyCup is correct: you must likely have a plugin including the Android Support Library as a JAR and then this calendar plugin includes it as a Gradle dependency. It would help if you posted a list of all the plugins you are using or even better just post your config.xmlSuprematism
@Suprematism i have updated my question with config.xmlSchooling
Sorry, forgot you're using Ionic: please post package.json if you're using ionic plugin add or otherwise post plugins/fetch.jsonSuprematism
@Suprematism check my updated questionSchooling
S
2

Your problem is you are using an outdated version of the push plugin. From your package.json, you are including https://github.com/rossmartin/PushPlugin.git which is a unmaintained branch of a deprecated plugin that hasn't been updated in 2 years. Hence, if you look at its plugin.xml, you can see it includes the Android Support Library as a JAR for the legacy Ant-driven Cordova build process:

<source-file src="src/android/com/plugin/android-support-v13.jar" target-dir="libs/" />

You need to remove this version of the plugin and replace it with the up-to-date equivalent cordova-plugin-push, which uses Gradle to include the support library:

<framework src="com.android.support:support-v13:23+" />

Note you will need to build for Android API v23, so must have this installed via the SDK Manager and be using v5+ of the Cordova Android platform (cordova-android@5+).

UPDATE

In build.gradle file i add this lines.

In dependencies add this line compile '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' 

}

default config add this line multiDexEnabled true

defaultConfig {
        versionCode cdvVersionCode ?: Integer.parseInt("" + privateHelpers.extractIntFromManifest("versionCode") + "0")
        applicationId privateHelpers.extractStringFromManifest("package")

        if (cdvMinSdkVersion != null) {
            minSdkVersion cdvMinSdkVersion

        }
        multiDexEnabled true
    }

After adding this lines then i got his error reffer this website and i solved it by removing platform/android/libs/ You can see "android-support-v13.jar" delete that file

all your plugin that have been installed for project look for plugin.xml file and then check any line that reefer to that android-support-v13.jar and comment it or do as above, thank you

Suprematism answered 31/5, 2016 at 10:44 Comment(5)
ngcordova.com/docs/plugins/pushNotifications check this website i use this plugin to install push notificationSchooling
i did not download any ionic plugin and add to my project i use my cmd to install all my cordova plugins provided by ngcordova.com/docs/pluginsSchooling
I have added <framework src="com.android.support:support-v13:23+" /> in my config.xml file and i try to build it but still i am getting the same errorSchooling
Regardless of how the plugins were installed, your problem remains that you have an incompatible version of the push plugin installed, which uses a JAR version of the Android Support Library (you can confirm this by manually inspecting the plugins/ folder). This will clash with any other plugins which include the support library via Gradle, hence your build error. Adding the <framework> tag to config.xml will have no effect - it is only processed by included by plugin.xml.Suprematism
thank you but your answer work after i added two lines in my `build.gradle' file this error made me mad but your way of thinking helped me a lot thank youSchooling
I
0

Here is an easy of-the-shelf plugin that does the build.gradle work for you

cordova plugin add cordova-plugin-enable-multidex

Please find this repository link for some further details

Ib answered 16/7, 2018 at 12:45 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.