Open amit-t opened 7 years ago
I have the same issue, last week it was building correctly.
Same here. Yesterday was fine, today this breaks the build. My version of the plugin is 6.0.6.
Same story here. Not sure what got updated, and where :\
@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?
@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"
See, the problem is that Facebook SDK recently included ZXing as a dependency.
https://github.com/jeduan/cordova-plugin-facebook4/issues/550
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
@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"
Where does the hook get added? in the build gradle?
@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.
oh i added the file build-extras.gradle and its all working now?
@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
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!
@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.
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"
}
}
}
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
yeah, remove the platform but not work the hook, but add this code in the gradle and work.
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.
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
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
just fix facebook plugin version <gap:plugin name="cordova-plugin-facebook4" source="npm" spec="1.7.4">
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
Thanks @vagnerbertoni !
I couldn't figure it out...just added this plugin and it worked: https://github.com/NazarKozak/cordova-plugin-multidex
Thanks @Maik3345. your solution worked for me. :+1:
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
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
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
Thanks , it's working for me. i have changed facebook dependencies version. 4.+ ==> 4.25.0
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.
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 ?
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
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.
cordova.system.library.2=com.facebook.android:facebook-android-sdk:4.25.0
Worked
@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
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.
@amit-t Thanks a lot. it works
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?
please someone could help me? even if I add
I got still the error!
Any news?
+1
Did no one solve this?
@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.
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?
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.
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
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?
@thaismartinsprojects if you have not already, you might review the workarounds mentioned in this issue: https://github.com/phonegap/phonegap-plugin-barcodescanner/issues/606
@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'
}
@thaismartinsprojects interesting. thanks for sharing that!
@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
Expected Behaviour
Build Succeeded
Actual Behaviour
(Android) What device vendor
Device - Google Pixel
Cordova CLI version and cordova platform version
Installed platforms: android 6.2.3 ios 4.3.1
Plugin version
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
*/
apply plugin: 'com.android.application'
buildscript { repositories { mavenCentral() jcenter() }
}
// 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 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'] } }
}
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) }
}
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' } } } }