phonegap / phonegap-plugin-barcodescanner

cross-platform BarcodeScanner for Cordova / PhoneGap
MIT License
1.27k stars 1.41k forks source link

Conflict with Facebook plugin: Execution failed for task ':transformClassesWithDexForDebug' #535

Open amit-t opened 7 years ago

amit-t commented 7 years ago

Expected Behaviour

Build Succeeded

Actual Behaviour

(Android) What device vendor

Device - Google Pixel

Cordova CLI version and cordova platform version

cordova --version - 7.0.1
cordova platforms - 

Installed platforms: android 6.2.3 ios 4.3.1

Plugin version

cordova plugin version | grep phonegap-plugin-barcodescanner

phonegap-plugin-barcodescanner 6.0.8 "BarcodeScanner"

Sample Code that illustrates the problem

build.gradle

/* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.

*/

apply plugin: 'com.android.application'

buildscript { repositories { mavenCentral() jcenter() }

// Switch the Android Gradle plugin version requirement depending on the
// installed version of Gradle. This dependency is documented at
// http://tools.android.com/tech-docs/new-build-system/version-compatibility
// and https://issues.apache.org/jira/browse/CB-8143
dependencies {
    classpath 'com.android.tools.build:gradle:2.2.3'
}

}

// Allow plugins to declare Maven dependencies via build-extras.gradle. allprojects { repositories { mavenCentral(); jcenter() } }

task wrapper(type: Wrapper) { gradleVersion = '2.14.1' }

// Configuration properties. Set these via environment variables, build-extras.gradle, or gradle.properties. // Refer to: http://www.gradle.org/docs/current/userguide/tutorial_this_and_that.html ext { apply from: 'CordovaLib/cordova.gradle' // The value for android.compileSdkVersion. if (!project.hasProperty('cdvCompileSdkVersion')) { cdvCompileSdkVersion = null; } // The value for android.buildToolsVersion. if (!project.hasProperty('cdvBuildToolsVersion')) { cdvBuildToolsVersion = null; } // Sets the versionCode to the given value. if (!project.hasProperty('cdvVersionCode')) { cdvVersionCode = null } // Sets the minSdkVersion to the given value. if (!project.hasProperty('cdvMinSdkVersion')) { cdvMinSdkVersion = null } // Whether to build architecture-specific APKs. if (!project.hasProperty('cdvBuildMultipleApks')) { cdvBuildMultipleApks = null } // .properties files to use for release signing. if (!project.hasProperty('cdvReleaseSigningPropertiesFile')) { cdvReleaseSigningPropertiesFile = null } // .properties files to use for debug signing. if (!project.hasProperty('cdvDebugSigningPropertiesFile')) { cdvDebugSigningPropertiesFile = null } // Set by build.js script. if (!project.hasProperty('cdvBuildArch')) { cdvBuildArch = null }

// Plugin gradle extensions can append to this to have code run at the end.
cdvPluginPostBuildExtras = []

}

// PLUGIN GRADLE EXTENSIONS START apply from: "phonegap-plugin-barcodescanner/mobileapp-barcodescanner.gradle" // PLUGIN GRADLE EXTENSIONS END

def hasBuildExtras = file('build-extras.gradle').exists() if (hasBuildExtras) { apply from: 'build-extras.gradle' }

// Set property defaults after extension .gradle files. if (ext.cdvCompileSdkVersion == null) { ext.cdvCompileSdkVersion = privateHelpers.getProjectTarget() } if (ext.cdvBuildToolsVersion == null) { ext.cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools() } if (ext.cdvDebugSigningPropertiesFile == null && file('debug-signing.properties').exists()) { ext.cdvDebugSigningPropertiesFile = 'debug-signing.properties' } if (ext.cdvReleaseSigningPropertiesFile == null && file('release-signing.properties').exists()) { ext.cdvReleaseSigningPropertiesFile = 'release-signing.properties' }

// Cast to appropriate types. ext.cdvBuildMultipleApks = cdvBuildMultipleApks == null ? false : cdvBuildMultipleApks.toBoolean(); ext.cdvMinSdkVersion = cdvMinSdkVersion == null ? null : Integer.parseInt('' + cdvMinSdkVersion) ext.cdvVersionCode = cdvVersionCode == null ? null : Integer.parseInt('' + cdvVersionCode)

def computeBuildTargetName(debugBuild) { def ret = 'assemble' if (cdvBuildMultipleApks && cdvBuildArch) { def arch = cdvBuildArch == 'arm' ? 'armv7' : cdvBuildArch ret += '' + arch.toUpperCase().charAt(0) + arch.substring(1); } return ret + (debugBuild ? 'Debug' : 'Release') }

// Make cdvBuild a task that depends on the debug/arch-sepecific task. task cdvBuildDebug cdvBuildDebug.dependsOn { return computeBuildTargetName(true) }

task cdvBuildRelease cdvBuildRelease.dependsOn { return computeBuildTargetName(false) }

task cdvPrintProps << { println('cdvCompileSdkVersion=' + cdvCompileSdkVersion) println('cdvBuildToolsVersion=' + cdvBuildToolsVersion) println('cdvVersionCode=' + cdvVersionCode) println('cdvMinSdkVersion=' + cdvMinSdkVersion) println('cdvBuildMultipleApks=' + cdvBuildMultipleApks) println('cdvReleaseSigningPropertiesFile=' + cdvReleaseSigningPropertiesFile) println('cdvDebugSigningPropertiesFile=' + cdvDebugSigningPropertiesFile) println('cdvBuildArch=' + cdvBuildArch) println('computedVersionCode=' + android.defaultConfig.versionCode) android.productFlavors.each { flavor -> println('computed' + flavor.name.capitalize() + 'VersionCode=' + flavor.versionCode) } }

android { sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] jniLibs.srcDirs = ['libs'] } }

defaultConfig {
    versionCode cdvVersionCode ?: new BigInteger("" + privateHelpers.extractIntFromManifest("versionCode"))
    applicationId privateHelpers.extractStringFromManifest("package")

    if (cdvMinSdkVersion != null) {
        minSdkVersion cdvMinSdkVersion
    }
}

lintOptions {
  abortOnError false;
}

compileSdkVersion cdvCompileSdkVersion
buildToolsVersion cdvBuildToolsVersion

if (Boolean.valueOf(cdvBuildMultipleApks)) {
    productFlavors {
        armv7 {
            versionCode defaultConfig.versionCode*10 + 2
            ndk {
                abiFilters "armeabi-v7a", ""
            }
        }
        x86 {
            versionCode defaultConfig.versionCode*10 + 4
            ndk {
                abiFilters "x86", ""
            }
        }
        all {
            ndk {
                abiFilters "all", ""
            }
        }
    }
}
/*

ELSE NOTHING! DON'T MESS WITH THE VERSION CODE IF YOU DON'T HAVE TO!

else if (!cdvVersionCode) {
  def minSdkVersion = cdvMinSdkVersion ?: privateHelpers.extractIntFromManifest("minSdkVersion")
  // Vary versionCode by the two most common API levels:
  // 14 is ICS, which is the lowest API level for many apps.
  // 20 is Lollipop, which is the lowest API level for the updatable system webview.
  if (minSdkVersion >= 20) {
    defaultConfig.versionCode += 9
  } else if (minSdkVersion >= 14) {
    defaultConfig.versionCode += 8
  }
}
*/

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_6
    targetCompatibility JavaVersion.VERSION_1_6
}

if (cdvReleaseSigningPropertiesFile) {
    signingConfigs {
        release {
            // These must be set or Gradle will complain (even if they are overridden).
            keyAlias = ""
            keyPassword = "__unset" // And these must be set to non-empty in order to have the signing step added to the task graph.
            storeFile = null
            storePassword = "__unset"
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
    addSigningProps(cdvReleaseSigningPropertiesFile, signingConfigs.release)
}
if (cdvDebugSigningPropertiesFile) {
    addSigningProps(cdvDebugSigningPropertiesFile, signingConfigs.debug)
}

}

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:24.1.1+" compile "com.facebook.android:facebook-android-sdk:4.+" compile "com.google.android.gms:play-services-auth:+" compile "com.google.android.gms:play-services-identity:+" // SUB-PROJECT DEPENDENCIES END }

def promptForReleaseKeyPassword() { if (!cdvReleaseSigningPropertiesFile) { return; } if ('unset'.equals(android.signingConfigs.release.storePassword)) { android.signingConfigs.release.storePassword = privateHelpers.promptForPassword('Enter key store password: ') } if ('unset'.equals(android.signingConfigs.release.keyPassword)) { android.signingConfigs.release.keyPassword = privateHelpers.promptForPassword('Enter key password: '); } }

gradle.taskGraph.whenReady { taskGraph -> taskGraph.getAllTasks().each() { task -> if (task.name == 'validateReleaseSigning' || task.name == 'validateSigningRelease') { promptForReleaseKeyPassword() } } }

def addSigningProps(propsFilePath, signingConfig) { def propsFile = file(propsFilePath) def props = new Properties() propsFile.withReader { reader -> props.load(reader) }

def storeFile = new File(props.get('key.store') ?: privateHelpers.ensureValueExists(propsFilePath, props, 'storeFile'))
if (!storeFile.isAbsolute()) {
    storeFile = RelativePath.parse(true, storeFile.toString()).getFile(propsFile.getParentFile())
}
if (!storeFile.exists()) {
    throw new FileNotFoundException('Keystore file does not exist: ' + storeFile.getAbsolutePath())
}
signingConfig.keyAlias = props.get('key.alias') ?: privateHelpers.ensureValueExists(propsFilePath, props, 'keyAlias')
signingConfig.keyPassword = props.get('keyPassword', props.get('key.alias.password', signingConfig.keyPassword))
signingConfig.storeFile = storeFile
signingConfig.storePassword = props.get('storePassword', props.get('key.store.password', signingConfig.storePassword))
def storeType = props.get('storeType', props.get('key.store.type', ''))
if (!storeType) {
    def filename = storeFile.getName().toLowerCase();
    if (filename.endsWith('.p12') || filename.endsWith('.pfx')) {
        storeType = 'pkcs12'
    } else {
        storeType = signingConfig.storeType // "jks"
    }
}
signingConfig.storeType = storeType

}

for (def func : cdvPluginPostBuildExtras) { func() }

// This can be defined within build-extras.gradle as: // ext.postBuildExtras = { ... code here ... } if (hasProperty('postBuildExtras')) { postBuildExtras() } configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '25.3.1' } } } }

iowaz commented 7 years ago

I have the same issue, last week it was building correctly.

danilopolani commented 7 years ago

Same here. Yesterday was fine, today this breaks the build. My version of the plugin is 6.0.6.

yosi-dediashvili commented 7 years ago

Same story here. Not sure what got updated, and where :\

yosi-dediashvili commented 7 years ago

@amit-t, can you share the plugin list you have? I have a feeling that it might be related to other plugin causing a mess?

iowaz commented 7 years ago

@yosi-dediashvili , here's go mine:

com.telerik.plugins.nativepagetransitions 0.6.5 "Native Page Transitions"
cordova-android-play-services-gradle-release 0.0.2 "cordova-android-play-services-gradle-release"
cordova-android-support-gradle-release 0.0.2 "cordova-android-support-gradle-release"
cordova-plugin-camera 2.4.1 "Camera"
cordova-plugin-compat 1.1.0 "Compat"
cordova-plugin-contacts 2.3.1 "Contacts"
cordova-plugin-device 1.1.6 "Device"
cordova-plugin-facebook4 1.9.1 "Facebook Connect"
cordova-plugin-file 4.3.3 "File"
cordova-plugin-file-transfer 1.6.3 "File Transfer"
cordova-plugin-geolocation 2.4.3 "Geolocation"
cordova-plugin-splashscreen 4.0.3 "Splashscreen"
cordova-plugin-statusbar 2.2.3 "StatusBar"
cordova-plugin-vibration 2.1.5 "Vibration"
cordova-plugin-whitelist 1.3.2 "Whitelist"
cordova-plugin-wkwebview-engine 1.1.4-dev "Cordova WKWebView Engine"
cordova-plugin-x-socialsharing 5.1.8 "SocialSharing"
cordova-sqlite-storage 2.0.4 "Cordova sqlite storage plugin"
es6-promise-plugin 4.1.0 "Promise"
info.protonet.imageresizer 0.1.1 "Image Resizer"
ionic-plugin-keyboard 2.2.1 "Keyboard"
phonegap-plugin-barcodescanner 6.0.7 "BarcodeScanner"
phonegap-plugin-push 1.10.5 "PushPlugin"
iowaz commented 7 years ago

See, the problem is that Facebook SDK recently included ZXing as a dependency.

https://github.com/jeduan/cordova-plugin-facebook4/issues/550

yosi-dediashvili commented 7 years ago

OK, so the issue here is with the underlying module. The barcodescanner-lib-aar: https://github.com/EddyVerbruggen/barcodescanner-lib-aar/tree/master/barcodescanner/src/main/java/com/google/zxing

Seems like instead of depending on the barcode lib, it's including the whole source, essentially redefining everything, and that's why the build fails (there's the lib being included because of the Facebook SDK, and the lib getting redefined by the barcode lib).

Seems like forcing version 4.25.0 of the Facebook SDK (if you don't need 4.26.0), solves this. Add a after_platform_add hook:

if [ -d "platforms/android" ]; then
  echo '
configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == "com.facebook.android") {
          details.useVersion "4.25.0"
        }
    }
}
' > platforms/android/build-extras.gradle
fi
amit-t commented 7 years ago

@yosi-dediashvili - Here is my list

cordova-plugin-calendar 4.6.0 "Calendar" cordova-plugin-camera 2.4.1 "Camera" cordova-plugin-compat 1.1.0 "Compat" cordova-plugin-console 1.0.7 "Console" cordova-plugin-datepicker 0.9.3 "DatePicker" cordova-plugin-device 1.1.6 "Device" cordova-plugin-facebook4 1.9.1 "Facebook Connect" cordova-plugin-googleplus 5.1.1 "Google SignIn" cordova-plugin-inappbrowser 1.7.1 "InAppBrowser" cordova-plugin-splashscreen 4.0.3 "Splashscreen" cordova-plugin-statusbar 2.2.3 "StatusBar" cordova-plugin-whitelist 1.3.2 "Whitelist" cordova-plugin-wkwebview-engine 1.1.4-dev "Cordova WKWebView Engine" ionic-plugin-keyboard 2.2.1 "Keyboard" phonegap-plugin-barcodescanner 6.0.8 "BarcodeScanner"

Ross-Rawlins commented 7 years ago

Where does the hook get added? in the build gradle?

danilopolani commented 7 years ago

@Ross-Rawlins you can create the path hooks/after_platform_add/ in your project root and inside that create a file called facebook4-fix.sh (the name doesn't matter, but it must be .sh) and put the code inside that file.

Then remove and readd android platform. If you are using Ionic the folder may already exists with a detailed README, just make sure to delete it from .gitignore or, if you are using git, the hooks will never be sent with the push.

Ross-Rawlins commented 7 years ago

oh i added the file build-extras.gradle and its all working now?

danilopolani commented 7 years ago

@Ross-Rawlins yes, but if you choose to create manually the file, remember to exclude it from .gitignore (which ignores all the platforms).

Put !platforms/android/build-extras.gradle after platforms/, for example:

tmp/
temp/
platforms/
!platforms/android/build-extras.gradle
plugins/
plugins/android.json

P.S. This is extracted from a Ionic project .gitignore, it may change if you aren't using it

dgaurav-163 commented 7 years ago

I am getting same problem, Where I have to add hack in code repository. I have already build-extras.gradle file inside cordova-plugin-file -> src -> android -> build.extras.gradle. same file is blank so what I have to add in tthis file? Did nou understand why you are adding hack for facebook.

Kindly suggest!

danilopolani commented 7 years ago

@dgaurav-163 the "hack" is for Facebook because it now includes the barcodescanner, so there are two duplicates.

You have to copy-paste that code inside your platforms/android/build-extras.gradle file, not the one of the plugin.

Maik3345 commented 7 years ago
if [ -d "platforms/android" ]; then
  echo '
configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == "com.facebook.android") {
          details.useVersion "4.25.0"
        }
    }
}
' > platforms/android/build-extras.gradle
fi

create the hook not work for me, but adding this in the end of the build.gradle and work correctly!!

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == "com.facebook.android") {
          details.useVersion "4.25.0"
        }
    }
}
danilopolani commented 7 years ago

Maik did you removed android and added again with the command platform rm android and platform add android? The hook is called only when you add the platform, not when you deploy the app

Maik3345 commented 7 years ago

yeah, remove the platform but not work the hook, but add this code in the gradle and work.

Ross-Rawlins commented 7 years ago

I copied the exact code into the file it says and it works perfectly.

On 29 August 2017 at 21:21, Maik Restrepo notifications@github.com wrote:

yeah, remove the platform but not work the hook, but add this code in the gradle and work.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/phonegap/phonegap-plugin-barcodescanner/issues/535#issuecomment-325769264, or mute the thread https://github.com/notifications/unsubscribe-auth/ADMeUNesM3Ii8zP1zCdEF0cbDPb-58zeks5sdGS6gaJpZM4PDXpS .

-- Ross Rawlins Tel: 021 531 7087 Cell: 072 424 9480 Skype: ross.rawlins Email: ross@duovili.co.za

http://www.duovili.co.za https://plus.google.com/113781084234234096576/posts https://www.facebook.com/Duovili http://www.linkedin.com/company/duovili/ https://twitter.com/Duovili

This e-mail message and all attachments contain the CONFIDENTIAL AND PROPRIETARY information of DUOVILI DEVELOPMENTS. and may contain LEGALLY PRIVILEGED information. If you are not the intended recipient, you are hereby notified that any disclosure, distribution, or use of this e-mail, its attachments or any information contained therein is unauthorised and prohibited. If you have received this in error, please contact the sender immediately and delete this e-mail and any attachments.

dgaurav-163 commented 7 years ago

same issue will remove when I add multiDexEnabled true in build.gradle inside defaultConfig.

defaultConfig { minSdkVersion 14 //lower than 14 doesn't support multidex targetSdkVersion 22

         // Enabling multidex support.
         multiDexEnabled true
     }

try this, may be it will help

amit-t commented 7 years ago

I was able to fix it by doing the below :- in the file "project.properties" Change the below three lines ...

cordova.system.library.2=com.facebook.android:facebook-android-sdk:+
cordova.system.library.3=com.google.android.gms:play-services-auth:+
cordova.system.library.4=com.google.android.gms:play-services-identity:+

TO

cordova.system.library.2=com.facebook.android:facebook-android-sdk:4.25.0
cordova.system.library.3=com.google.android.gms:play-services-auth:9.0.0
cordova.system.library.4=com.google.android.gms:play-services-identity:9.0.0
vagnerbertoni commented 7 years ago

just fix facebook plugin version <gap:plugin name="cordova-plugin-facebook4" source="npm" spec="1.7.4">

lorecioni commented 7 years ago

I followed the solution proposed by @amit-t and got it work! Thank you! The only change I made:

cordova.system.library.2=com.facebook.android:facebook-android-sdk:4.25.0

baptistedeleplace commented 7 years ago

Thanks @vagnerbertoni !

upuxaa commented 7 years ago

I couldn't figure it out...just added this plugin and it worked: https://github.com/NazarKozak/cordova-plugin-multidex

dgaurav-163 commented 7 years ago

Thanks @Maik3345. your solution worked for me. :+1:

AnthonyLombard commented 7 years ago

I dont have the facebook plugin and I still get this error< have tried everything above to no avail.

Here is my plugin list

cordova-plugin-compat 1.1.0 "Compat" cordova-plugin-device 1.1.5 "Device" cordova-plugin-dialogs 1.3.2 "Notification" cordova-plugin-multidex 1.0 "Cordova Multi Dex" cordova-plugin-whitelist 1.3.2 "Whitelist" phonegap-plugin-barcodescanner 6.0.6 "BarcodeScanner"

I just added multidex as above comment said it may work

SRV-Garg commented 6 years ago

Same here don't have facebook plugin but same error.

i have solved this issue just remove your cordova-plugin-compat 1.1.0 and reinstall the version 1.2.0 as defined here https://stackoverflow.com/questions/46562289/multiple-dex-files-define-lorg-apache-cordova-buildhelper

avongeric commented 6 years ago

Just as @amit-t mentioned above. Works like magic after spending few hours to get this fixed. From cordova.system.library.1=com.facebook.android:facebook-android-sdk:4.+ To cordova.system.library.1=com.facebook.android:facebook-android-sdk:4.25.0

Nitingadhiya commented 6 years ago

Thanks , it's working for me. i have changed facebook dependencies version. 4.+ ==> 4.25.0

ipehimanshu commented 6 years ago

we are using phonegap build site to create build

Here is our config

<preference name="phonegap-version" value="cli-7.0.1" />

and we use below plugins

`

    <variable name="APP_NAME" value="xxxxxxxxxx" />
</plugin>`

`<plugin name="cordova-android-support-gradle-release" spec="0.0.2" source="npm">
    <variable name="ANDROID_SUPPORT_VERSION" value="25.+" />
</plugin>`

`<plugin name="phonegap-plugin-barcodescanner" spec="6.0.8" source="npm">
    <variable name="CAMERA_USAGE_DESCRIPTION" value="To scan barcodes." />
</plugin>`

`<plugin spec="https://github.com/NazarKozak/cordova-plugin-multidex.git" source="git" />`

We get this type error

from phonegap build url

FAILURE: Build failed with an exception.

  • What went wrong: Execution failed for task ':transformClassesWithJarMergingForDebug'.

    com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/zxing/aztec/AztecDetectorResult.class

So any one please help me to resolve this issue ?

tgardner commented 6 years ago

Just add to config.xml

<platform name="android">
    <framework src="com.facebook.android:facebook-android-sdk:4.25.0" />
</platform>

cordova platform rm android cordova platform add android

brunosilvano commented 6 years ago

Both @arielgelbard's solution and @SRV-Garg's one worked for me. You could use one or the other. Just remember to:

cordova platform rm android cordova platform add android

after making what they say.

samuelfaj commented 6 years ago

cordova.system.library.2=com.facebook.android:facebook-android-sdk:4.25.0 Worked

DemchenkoAndrey commented 6 years ago

@Maik3345 I created an example.sh hook and put it in "after_prepare" folder! And before build use cmd $ chmod +x hooks/after_prepare/example.sh Worked for me

tgardner commented 6 years ago

Another solution would be to create an hooks/afterPrepare.js with the content of

module.exports = function(ctx) {
    console.log("Rewrite facebook SDK version");

    // make sure android platform is part of build
    if (ctx.opts.platforms.indexOf('android') < 0) {
        return;
    }
    var fs = ctx.requireCordovaModule('fs'),
        path = ctx.requireCordovaModule('path'),
        deferral = ctx.requireCordovaModule('q').defer();

    var platformRoot = path.join(ctx.opts.projectRoot, 'platforms/android');
    var propertiesFile = path.join(platformRoot, 'project.properties');

    fs.readFile(propertiesFile, 'utf8', function (err,data) {
      if (err) {
        return deferral.reject(err);
      }
      var result = data.replace(/com\.facebook\.android\:facebook-android-sdk\:[\+0-9\.]+/g, 'com.facebook.android:facebook-android-sdk:4.25.0');

      fs.writeFile(propertiesFile, result, 'utf8', function (err) {
         if (err) return deferral.reject(err);

         deferral.resolve();
      });
    });

    return deferral.promise;
};

and add the following to your config.xml file

<platform name="android">
        <hook src="hooks/afterPrepare.js" type="after_prepare" />
</platform>

Then just clean and rebuild. Works cross-platform as well.

thesabareesh commented 6 years ago

@amit-t Thanks a lot. it works

wilsolutions commented 5 years ago

Using com.facebook.android:facebook-android-sdk:4.25.0 works =) but

FB SDK is now on version com.facebook.android:facebook-android-sdk:4.37.0 so, we need to upgrade.

Is it possible to make the barcodescanner plugin to use the same version of the zxing library (com.google.zxing:core:3.3.0) as the FB SDK?

xale76 commented 5 years ago

please someone could help me? even if I add

I got still the error!

yurik94 commented 5 years ago

Any news?

FlossyWeb commented 5 years ago

+1

JustasKuizinas commented 5 years ago

Did no one solve this?

viking2917 commented 5 years ago

@JustasKuizinas See workarounds mentioned in this issue: https://github.com/phonegap/phonegap-plugin-barcodescanner/issues/606. Key seems to be retreating to Facebook login plugin v 1.7.4. Not a fix but can work with older facebook plugin versions.

JavierPAYTEF commented 5 years ago

This issue is still happening. But now it's worst because the facebook4 plugin introduced some new features that make it incompatible with SDK version 4.25, so now you also have to install an older version of the plugin itself. Is there no way around the use of the aar file? Is the codebase to big to include the code instead?

JavierPAYTEF commented 5 years ago

In case anyone needs it the last compatible version is 3.2.0 (the current is 4.2.1). You can install it like this:

cordova plugin add cordova-plugin-facebook4@3.2.0 --save --variable APP_ID="123456789" --variable APP_NAME="yourappname" --variable FACEBOOK_ANDROID_SDK_VERSION="4.25.0"

You might also need to add multidex, like some other answers explain. There are cordova plugins for that as well.

idpsycho commented 5 years ago

Nothing worked. I tried every suggestion I found in this thread, on stackoverflow, and on the internet. Nothing helped me. phonegap-plugin-barcodescanner just wont coexist with cordova-plugin-facebook4. I ended up removing phonegap-plugin-barcodescanner and used cordova-plugin-qrscanner instead.

Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

Reproduce by:

ionic start x blank cd x ionic cordova plugin add cordova-plugin-facebook4 ionic cordova build android // works fine ionic cordova plugin add phonegap-plugin-barcodescanner ionic cordova build android // breaks

thaismartins commented 5 years ago

Nothing worked. I tried every suggestion I found in this thread, on stackoverflow, and on the internet. Nothing helped me. phonegap-plugin-barcodescanner just wont coexist with cordova-plugin-facebook4. I ended up removing phonegap-plugin-barcodescanner and used cordova-plugin-qrscanner instead.

Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

Reproduce by:

ionic start x blank cd x ionic cordova plugin add cordova-plugin-facebook4 ionic cordova build android // works fine ionic cordova plugin add phonegap-plugin-barcodescanner ionic cordova build android // breaks

Same scenario and error here :cry:

Any solution?

viking2917 commented 5 years ago

@thaismartinsprojects if you have not already, you might review the workarounds mentioned in this issue: https://github.com/phonegap/phonegap-plugin-barcodescanner/issues/606

thaismartins commented 5 years ago

@thaismartinsprojects if you have not already, you might review the workarounds mentioned in this issue: #606

Thank you, @viking2917! I finally found a solution. Not that best one, but it works.

Adding in build.gradle:

compile ("com.facebook.android:facebook-android-sdk:4.40.0"){
    exclude group: 'com.google.zxing'
}
viking2917 commented 5 years ago

@thaismartinsprojects interesting. thanks for sharing that!

tppshaka77 commented 5 years ago

@thaismartinsprojects if you have not already, you might review the workarounds mentioned in this issue: #606

Thank you, @viking2917! I finally found a solution. Not that best one, but it works.

Adding in build.gradle:

compile ("com.facebook.android:facebook-android-sdk:4.40.0"){
    exclude group: 'com.google.zxing'
}

Hello, could you explain me where to put that code? i have been trying to solve this issue, but when i try to use

compile ("com.facebook.android:facebook-android-sdk:4.40.0"){ exclude group: 'com.google.zxing' }

It doesnt make any effect since the build.grandle gets rebuilt everytime i try cordova build.

Thanks