2016-01-18 1 views
0

появилась ошибка после добавления cordova google analytics plugin

Я называю эту Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat

Я имею ту же ошибку, и я попытался решить ее в узле build.gradle зависимостей, как этот

compile ("com.google.android.gms:play-services-analytics:+"){ 
    exclude module: 'support-v4' 
} 

, но каждый раз, когда я использую ionic build android изменения, которые я сделал перезаписываются.

EDIT: полный build.gradle

// GENERATED FILE! DO NOT EDIT! 

apply plugin: 'android' 

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    // 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 
    if (gradle.gradleVersion >= "2.2") { 
     dependencies { 
      classpath 'com.android.tools.build:gradle:1.0.0+' 
     } 
    } else if (gradle.gradleVersion >= "2.1") { 
     dependencies { 
      classpath 'com.android.tools.build:gradle:0.14.0+' 
     } 
    } else { 
     dependencies { 
      classpath 'com.android.tools.build:gradle:0.12.0+' 
     } 
    } 
} 

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

task wrapper(type: Wrapper) { 
    gradleVersion = '2.2.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: "cordova-plugin-crosswalk-webview/app-xwalk.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 ?: Integer.parseInt("" + privateHelpers.extractIntFromManifest("versionCode") + "0") 
     if (cdvMinSdkVersion != null) { 
      minSdkVersion cdvMinSdkVersion 
     } 
    } 

    compileSdkVersion cdvCompileSdkVersion 
    buildToolsVersion cdvBuildToolsVersion 

    if (Boolean.valueOf(cdvBuildMultipleApks)) { 
     productFlavors { 
      armv7 { 
       versionCode cdvVersionCode ?: defaultConfig.versionCode + 2 
       ndk { 
        abiFilters "armeabi-v7a", "" 
       } 
      } 
      x86 { 
       versionCode cdvVersionCode ?: defaultConfig.versionCode + 4 
       ndk { 
        abiFilters "x86", "" 
       } 
      } 
      all { 
       ndk { 
        abiFilters "all", "" 
       } 
      } 
     } 
    } 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") 
    debugCompile project(path: "phonegap-facebook-plugin:FacebookLib", configuration: "debug") 
    releaseCompile project(path: "phonegap-facebook-plugin:FacebookLib", configuration: "release") 
    compile "com.google.android.gms:play-services-analytics:+" 
    // 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') { 
      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() 
} 

EDIT: `project.properties``

# This file is automatically generated by Android Tools. 
# Do not modify this file -- YOUR CHANGES WILL BE ERASED! 
# 
# This file must be checked in Version Control Systems. 
# 
# To customize properties used by the Ant build system edit 
# "ant.properties", and override values to adapt the script to your 
# project structure. 
# 
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): 
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 
# Project target. 
target=android-22 
android.library.reference.1=CordovaLib 
android.library.reference.2=phonegap-facebook-plugin/app-FacebookLib 
cordova.gradle.include.1=cordova-plugin-crosswalk-webview/app-xwalk.gradle 
cordova.system.library.1=com.google.android.gms:play-services-analytics:+ 
+0

Опубликовать свой общий 'build.gradle' –

+0

Я только что увидел, что первая строка' build.gradle' - 'GENERATED FILE! НЕ ИЗМЕНИТЕ! ', Поэтому я довольно потерял прямо сейчас, как я могу изменить его, чтобы он не перезаписывался каждый раз. Я обновил свой вопрос с полным 'build.gradle' – Mazz

ответ

0

Создайте еще один файл в том же каталоге, как build.gradle и назовите его, как Build- extras.gradle.

Теперь используйте этот файл, чтобы исключить все, что вы хотите исключить.

Также посмотрите файл project.properties и удалите из него любую поддержку-v4.

Если вы также можете разместить свои проекты.properties, это будет полезно для получения более полного ответа на ваш вопрос.

+0

Так как project.properties генерируется Android Tools, я думаю, что это не сработает, если я что-то изменил. Я добавил файл в свой вопрос. – Mazz

+0

in my gradle-extras i написал 'dependencies { compile (" com.google.android.gms: play-services-analytics: + ") { исключить модуль: 'support-v4' } }' но я не знаю 't знать, является ли это правильным модулем, потому что я все еще получаю то же исключение ' – Mazz

+0

Я вижу, что вы используете ** phonegap-facebook-plugin ** и ** плагин google analytics ** в том же проекте. это и есть причина конфликта. Плагин facebook имеет свою собственную поддержку-v4, и еще одна поддержка-v4 добавляется в ваш проект с вашего Android-sdk из-за этого плагина Google Analytics, и вы получаете эту ** многократную ошибку файла dex **. – Yogesh