建立OutsystemsNow为Android在Android工作室越来越dexException [英] Building OutsystemsNow for android on Android Studio getting dexException
问题描述
我已经导入了Outsystems现在Android应用程序的Android成工作室。几个小时试图导入项目和解决所有模块导入后。目前我得到这个错误与我不能找出什么是错。
这是我试图建立运行应用程序:
OutsystemsNow-的Android
错误:执行失败的任务: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'的AndroidManifest.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'的AndroidManifest.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屋!