建立OutsystemsNow为Android在Android工作室越来越dexException [英] Building OutsystemsNow for android on Android Studio getting dexException

查看:282
本文介绍了建立OutsystemsNow为Android在Android工作室越来越dexException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经导入了Outsystems现在Android应用程序的Andr​​oid成工作室。几个小时试图导入项目和解决所有模块导入后。目前我得到这个错误与我不能找出什么是错。

这是我试图建立运行应用程序:
OutsystemsNow-的Andr​​oid

 错误:执行失败的任务:dexDebug。
> com.android.ide.common.internal.LoggedErrorException:无法运行命令:
/Users/nblocal/Desktop/android_Eclipse/sdk/build-tools/21.1.1/dx --dex --output /Users/nblocal/Desktop/git-OutSystems/OutSystemsNow-Android-master/outsystems-app-android/Outsytems/platforms/android/build/intermediates/dex/debug --input-list=/Users/nblocal/Desktop/git-OutSystems/OutSystemsNow-Android-master/outsystems-app-android/Outsytems/platforms/android/build/intermediates/tmp/dex/debug/inputList.txt
错误code:
    2
输出:
意外的顶级例外:
com.android.dex.DexException:多DEX文件定义Landroid /支持/ V7 /应用/动作条$回调;
    在com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
    在com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
    在com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
    在com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
    在com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
    在com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
    在com.android.dx.command.dexer.Main.runMonoDex(Main.java:302)
    在com.android.dx.command.dexer.Main.run(Main.java:245)
    在com.android.dx.command.dexer.Main.main(Main.java:214)
    在com.android.dx.command.Main.main(Main.java:106)

我已经寻找类似的错误及尝试最psented对堆栈溢出,但没有解决方案$ P $的解决了我的问题:\\

的build.gradle:

 进口的java.util.regex.Pattern应用插件:'机器人'buildscript {
    库{
        mavenCentral()
    }    依赖{
        类路径'com.android.tools.build:gradle:1.0.1
    }
}ext.multiarch = FALSE依赖{
    编译文件树(导演:'库',包括:的* .jar)
    对(在getProjectList()子项目){
        编制项目(子项目)
    }
    编译com.android.support:appcompat-v7:19.0.0
}安卓{
    sourceSets {
        主要{
            manifest.srcFile'的Andr​​oidManifest.xml
            java.srcDirs = ['src'中]
            resources.srcDirs = ['src'中]
            aidl.srcDirs = ['src'中]
            renderscript.srcDirs = ['src'中]
            res.srcDirs = ['水库']
            assets.srcDirs = ['资产']
        }
    }    defaultConfig {
        版本code的Integer.parseInt(+ getVersion codeFromManifest()+0)
    }    compileSdkVersion 19
    buildToolsVersion '21 .1.1    如果(multiarch || System.env.BUILD_MULTIPLE_APKS){
        productFlavors {
            {的ARMv7
                版本code defaultConfig.version code + 2
                NDK {
                    abiFiltersarmeabi-V7A,
                }
            }
            86 {
                版本code defaultConfig.version code + 4
                NDK {
                    abiFilters86,
                }
            }
            所有{
                NDK {
                    abiFilters所有,
                }
            }
        }
    }    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }}任务包装(类型:包装){
    gradleVersion ='1.12'
}高清getVersion codeFromManifest(){
    高清manifestFile =文件(android.sourceSets.main.manifest.srcFile)
    高清模式= Pattern.compile(版本code = \\(\\\\ D +)\\)
    高清匹配= pattern.matcher(manifestFile.getText())
    matcher.find()
    返回的Integer.parseInt(matcher.group(1))
}高清getProjectList(){
    高清manifestFile =文件(project.properties)
    高清模式= Pattern.compile(android.library.reference。(\\\\ D +)\\\\ S * = \\\\ S *(。*))
    高清匹配= pattern.matcher(manifestFile.getText())
    高清项目= []
    而(matcher.find()){
      projects.add(:+ matcher.group(2).replace(/,:))
    }
    项目收益
}

模块:

的build.gradle(CordovaLib):

  buildscript {
    库{
        mavenCentral()
    }    依赖{
        类路径'com.android.tools.build:gradle:1.0.1
    }
}应用插件:Android的图书​​馆安卓{
    compileSdkVersion 19
    buildToolsVersion19.1.0    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }    sourceSets {
        主要{
            manifest.srcFile'的Andr​​oidManifest.xml
            java.srcDirs = ['src'中]
            resources.srcDirs = ['src'中]
            aidl.srcDirs = ['src'中]
            renderscript.srcDirs = ['src'中]
            res.srcDirs = ['水库']
            assets.srcDirs = ['资产']
        }
    }
}

的build.gradle(AndroidUniversalImageLoaderLib)

 应用插件:'com.android.library安卓{
    compileSdkVersion 19
    buildToolsVersion19.1.0    defaultConfig {
        5的minSdkVersion
        targetSdkVersion 19
    }    buildTypes {
        发布 {
            minifyEnabled假
            proguardFiles getDefaultProguardFile('proguard的-android.txt'),'proguard的-rules.txt
        }
    }
}


解决方案

常规回答这样的问题是,你的项目,包括多库和某些库出现两次(因为它可能已经被包括在一个你包括库)。

在此特定情况下,它似乎以下类被定义多次(可能是因为库它是被包括多次部分):

 的android /支持/ V7 /应用/动作条$回调;

您可以看到您的库项目由运行以下命令的gradle使用:

  -q的Gradle依赖

一旦你找到一个重复的库可以通过在依赖部分指定排除将其删除。类似如下:

 编译('com.android.support:appcompat-v7:+'){
    排除模块:支持-V4
}

I've imported the Outsystems Now android app into Android Studio. After several hours of trying to import the project and resolve all module imports. I'm currently getting this error with I can't find out whats wrong.

This is the app i'm trying to build run: OutsystemsNow-Android

Error:Execution failed for task ':dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/Users/nblocal/Desktop/android_Eclipse/sdk/build-tools/21.1.1/dx --dex --output /Users/nblocal/Desktop/git-OutSystems/OutSystemsNow-Android-master/outsystems-app-android/Outsytems/platforms/android/build/intermediates/dex/debug --input-list=/Users/nblocal/Desktop/git-OutSystems/OutSystemsNow-Android-master/outsystems-app-android/Outsytems/platforms/android/build/intermediates/tmp/dex/debug/inputList.txt
Error Code:
    2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v7/app/ActionBar$Callback;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:302)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)

I've search for similar erros and tried most of the solutions presented on stack overflow but none have solved my problem :\

build.gradle:

import java.util.regex.Pattern

apply plugin: 'android'

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.1'
    }
}

ext.multiarch=false

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    for (subproject in getProjectList()) {
        compile project(subproject)
    }
    compile 'com.android.support:appcompat-v7:19.0.0'
}

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']
        }
    }

    defaultConfig {
        versionCode Integer.parseInt("" + getVersionCodeFromManifest() + "0")
    }

    compileSdkVersion 19
    buildToolsVersion '21.1.1'

    if (multiarch || System.env.BUILD_MULTIPLE_APKS) {
        productFlavors {
            armv7 {
                versionCode defaultConfig.versionCode + 2
                ndk {
                    abiFilters "armeabi-v7a", ""
                }
            }
            x86 {
                versionCode defaultConfig.versionCode + 4
                ndk {
                    abiFilters "x86", ""
                }
            }
            all {
                ndk {
                    abiFilters "all", ""
                }
            }
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

}

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

def getVersionCodeFromManifest() {
    def manifestFile = file(android.sourceSets.main.manifest.srcFile)
    def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
    def matcher = pattern.matcher(manifestFile.getText())
    matcher.find()
    return Integer.parseInt(matcher.group(1))
}

def getProjectList() {
    def manifestFile = file("project.properties")
    def pattern = Pattern.compile("android.library.reference.(\\d+)\\s*=\\s*(.*)")
    def matcher = pattern.matcher(manifestFile.getText())
    def projects = []
    while (matcher.find()) {
      projects.add(":" + matcher.group(2).replace("/",":"))
    }
    return projects
}

modules:

build.gradle(CordovaLib):

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.1'
    }
}

apply plugin: 'android-library'

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

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

build.gradle(AndroidUniversalImageLoaderLib)

apply plugin: 'com.android.library'

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        minSdkVersion 5
        targetSdkVersion 19
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

解决方案

The "generic" answer to this kind of problem is that your project is including multiple libraries and some library appears twice (because it may already be included in one of your included libraries).

In this specific case it appears that the following class is defined multiple times (probably because the library it is part of is included multiple times):

android/support/v7/app/ActionBar$Callback;

You can see what libraries your project is using by running the following gradle command:

gradle -q dependencies 

Once you find a duplicated library you can remove it by specifying "exclude" in the dependency section. Something like the following:

compile ('com.android.support:appcompat-v7:+'){
    exclude module: 'support-v4'
}

这篇关于建立OutsystemsNow为Android在Android工作室越来越dexException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆