Articles of dex

MultiDexApplication的使用导致Application类的Robolectric测试中断

使用gradle def( https://plus.google.com/+IanLake/posts/JW9x4pcB1rj )使用支持v4-r21添加Multi dex支持 apply plugin: ‘com.android.application’ android { compileSdkVersion 19 buildToolsVersion “20.0.0” defaultConfig { applicationId “info.osom.multidex” minSdkVersion 19 targetSdkVersion 19 versionCode 1 versionName “1.0” } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } dexOptions { preDexLibraries = false } afterEvaluate { tasks.matching { it.name.startsWith(‘dex’) }.each { dx -> if (dx.additionalParameters […]

尝试使用Ant构建Android应用程序时抛出ExceptionWithContext

我已经尝试在谷歌和stackoverflow上搜索这个问题的答案,但我一直无法find任何有我确切问题的人。 每次有人在源代码管理中进行更改时,我都会尝试设置一个持续集成服务器(专门用于Bamboo)来更新,构建和导出APK。 当我使用我设置的工作时,当我每一步手动操作时,我在本地机器上遇到同样的错误。 当我到达构建的dex步骤时会发生错误。 到目前为止,我已经使用ant debug , ant release , ant clean debug和ant clean release获得了相同的输出。 整个dex步骤的输出完成有错误,如下所示: -dex: [dex] input: C:\Users\…\Android\bin\classes [dex] input: C:\Users\…\google-play-services_lib\bin\classes.jar [dex] input: C:\Program Files (x86)\Android\android-sdk\tools\support\annotations.jar [dex] input: C:\Users\…\Android\libs\FlurryAgent.jar [dex] input: C:\Users\…\Android\libs\gcm.jar [dex] input: C:\Users\…\Android\libs\android-support-v4.jar [dex] input: C:\Users\…\google-play-services_lib\libs\google-play-services.jar [dex] Pre-Dexing C:\Users\…\google-play-services_lib\bin\classes.jar -> classes-64c0adfe92ddc950c7ab8c5002ceabf2.jar [dex] Pre-Dexing C:\Program Files (x86)\Android\android-sdk\tools\support\annotations.jar -> annotations-62bab95d6948a2db17bbc7976160b014.jar [dex] Pre-Dexing C:\Users\…\Android\libs\FlurryAgent.jar […]

Android Studios RuntimeException:dex writer线程中的意外exception

我整个今天都遇到了这个奇怪的错误 – 任何人都知道这里出了什么问题? 据我所知,我一直在正确使用multidex库(以下是来自app.gradle文件): defaultConfig { applicationId “com.example.simon” minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName “1.0” /*Enabling multidex*/ multiDexEnabled true } dependencies { /* Enabling multidex*/ compile ‘com.android.support:multidex:1.0.1’ } 我的顶级gradle文件非常基本: buildscript { repositories { jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:1.3.0’ classpath ‘com.google.gms:google-services:1.3.1’ // NOTE: Do not place your application dependencies here; they belong // in […]

Android:Jumbo Mode vs Multidex

我不完全确定将dex选项“jumbomode”设置为true与添加multidex支持之间的区别。 将jumbo模式设置为true或将multidex设置为true似乎可以解决下面的问题 AGPBI: {“kind”:”SIMPLE”,”text”:”UNEXPECTED TOP-LEVEL EXCEPTION:”,”position”:{},”original”:”UNEXPECTED TOP-LEVEL EXCEPTION:”} AGPBI: {“kind”:”SIMPLE”,”text”:”com.android.dex.DexIndexOverflowException: Cannot merge new index 65772 into a non-jumbo instruction!”,”position”:{},”original”:”com.android.dex.DexIndexOverflowException: Cannot merge new index 65772 into a non-jumbo instruction!”} AGPBI: {“kind”:”SIMPLE”,”text”:”\tat com.android.dx.merge.InstructionTransformer.jumboCheck(InstructionTransformer.java:109)”,”position”:{},”original”:”\tat com.android.dx.merge.InstructionTransformer.jumboCheck(InstructionTransformer.java:109)”} AGPBI: {“kind”:”SIMPLE”,”text”:”\tat com.android.dx.merge.InstructionTransformer.access$800(InstructionTransformer.java:26)”,”position”:{},”original”:”\tat com.android.dx.merge.InstructionTransformer.access$800(InstructionTransformer.java:26)”} AGPBI: {“kind”:”SIMPLE”,”text”:”\tat com.android.dx.merge.InstructionTransformer$StringVisitor.visit(InstructionTransformer.java:72)”,”position”:{},”original”:”\tat com.android.dx.merge.InstructionTransformer$StringVisitor.visit(InstructionTransformer.java:72)”} AGPBI: {“kind”:”SIMPLE”,”text”:”\tat com.android.dx.io.CodeReader.callVisit(CodeReader.java:114)”,”position”:{},”original”:”\tat com.android.dx.io.CodeReader.callVisit(CodeReader.java:114)”} AGPBI: {“kind”:”SIMPLE”,”text”:”\tat com.android.dx.io.CodeReader.visitAll(CodeReader.java:89)”,”position”:{},”original”:”\tat com.android.dx.io.CodeReader.visitAll(CodeReader.java:89)”} AGPBI: {“kind”:”SIMPLE”,”text”:”\tat com.android.dx.merge.InstructionTransformer.transform(InstructionTransformer.java:49)”,”position”:{},”original”:”\tat com.android.dx.merge.InstructionTransformer.transform(InstructionTransformer.java:49)”} …

什么是Android Pre-Dexing以及如何提高性能?

我看到Android的ant脚本有消息说它是“预先dexing”。 然而,dex和pre-dex使用相同的选项,除了在一种情况下一次一个jar子,在其他情况下一次多个jar子。 真正需要的是什么? pre-dex是强制性的吗? 例如 The ‘ characters around the executable and arguments are not part of the command. [dex] Pre-Dexing F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\libs\pinit-sdk-1.0.jar -> pinit-sdk-1.0-e3bebafa2727504605edf3d8d85b5d46.jar [dx] Current OS is Windows 7 [dx] Executing ‘D:\Apps\java\embd\cmn\android\oems\google\adt\4.x\4.3.x\4.3\sdk\build-tools\18.1.0\dx.bat’ with arguments: [dx] ‘–dex’ [dx] ‘–output’ [dx] ‘F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\bin\dexedLibs\pinit-sdk-1.0-e3bebafa2727504605edf3d8d85b5d46.jar’ [dx] ‘F:\users\tejasoft\work\fnd\cmn\tools\social\sz\demo\libs\pinit-sdk-1.0.jar’ [dx] [dx] The ‘ characters around the executable and arguments are [dx] […]

使用多项目结构,Gradle构建速度非常慢

在包含大约140个项目/库的多项目设置中使用gradle构建时,构建时间需要1小时22分钟。 而我正在使用–parallel 。 我们的ANT构建只需不到20分钟而无需并行构建。 这正是我所做的。 ./gradlew clean ./gradlew build –parallel 我做了一点测试,似乎德兴花了最长的时间。 有没有办法让gradle过程重新使用它已经dexed的东西? 如果已经构建了库,则应该重新使用已经dexed的库。 我看到了选项–no-rebuild ,但是当我使用该选项运行时,它会显示以下内容 File ‘/path/to/project/build/libs/project.aar’ specified for property ‘bundle’ does not exist. 我用通用的东西替换了文件路径和项目名称。 使用Gradle 1.9-rc-3 其他信息(2014年1月15日): preDexDebug和preDexRelease在每个项目上花了很长时间。 比任何其他任务都长得多。 进展(2014年1月15日): 好的,现在,我将preDexLibraries = false放入所有build.gradle文件中。 但是,我仍然想知道一个集中的地方,我可以放入该条目,它会影响所有其他build.gradle文件。 但是,现在dexRelease和dexDebug需要很长时间。 有什么方法可以告诉构建只做dexDebug或dexRelease并跳过另一个? 进展(2014年1月15日): 使用assembleDebug工作。 但是,它似乎仍然没有重新使用已经dexed库。 因为德兴仍然需要永远。 每个项目大约需要一分钟。 有没有办法让gradle重新使用已经dexed的库? 或者,为什么构建仍然需要大约一个小时? 我们的ANT过程不到15分钟。

inheritance的方法是否会计入Android中的Dex方法限制?

Dalvik对单个.dex文件中可以拥有的方法数量有着众所周知的限制(约65,536个)。 我的问题是,inheritance(但未覆盖)的方法是否会计入此限制。 为了使事情具体,假设我有: public class Foo { public int foo() { return 0; } } public class A extends Foo { } public class B extends Foo { } public class C extends Foo { } 出于65,536方法限制的目的,这是否算作添加一个方法,或添加4? (或者,我想,为了得到合乎逻辑的结论,这算作1个方法或52个方法,考虑到java.lang.Object带来了12个方法)。 作为背景,我有一些非常微不足道的生成类具有一些共性,而且我也遇到了方法限制,所以我想知道是否值得尝试将其中的一些抽象到类中等级为了买一些时间。

多个dex文件定义 / BuildConfig,找不到原因:

我正在使用新的gradle构建系统,我面临以下问题: UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Lcom/kibo/mobi/BuildConfig; at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552) at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170) at com.android.dx.merge.DexMerger.merge(DexMerger.java:188) at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287) at com.android.dx.command.dexer.Main.run(Main.java:230) at com.android.dx.command.dexer.Main.main(Main.java:199) at com.android.dx.command.Main.main(Main.java:103) 打印依赖项我看不到任何东西,这里是: firstDebugCompile – ## Internal use, do not manually configure ## \— KiboGradle:KiboSDK:unspecified +— KiboGradle:TextInputAPI:unspecified +— KiboGradle:VoiceImeUtils:unspecified +— com.google.android.gms:play-services:5.0.77 | \— com.android.support:support-v4:19.1.0 +— com.squareup.picasso:picasso:2.3.2 +— […]

将AS更新为1.0后,在项目中获取“方法ID不在:65536”错误

我将Android Studio更新到最新版本,让它“修复项目”之类 – 但现在我的项目没有编译,给了我 FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ‘:app:dexDebug’. > com.android.ide.common.internal.LoggedErrorException: Failed to run command: D:\VGA\AndroidStudio\sdk\build-tools\21.1.1\dx.bat –dex –no-optimize –output D:\VGA\Projects\Sales-App\Android-Project\svn\android\app\build\intermediates\dex\debug –input-list=D:\VGA\Projects\Sales-App\Android-Project\svn\android\app\build\intermediates\tmp\dex\debug\inputList.txt Error Code: 2 Output: UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502) at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277) at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168) […]

如何解决Dalvik编译器限制64K方法的问题?

我的团队和我inheritance了另一个团队的大型Android项目。 据报道,包含所有包含库的整个应用程序有大约35000种方法。 我们现在的任务是在应用程序中实现我们需要使用Protocol Buffers的新服务。 问题是生成的.jar文件包含所有必需的.proto文件,会创建另外35000个方法,即70000个方法。 如果您不知道,Android编译器每个.dex文件的限制为65536个方法。 我们显然超过了这个限制,我们在尝试编译应用程序时遇到以下错误: Unable to execute dex: method ID not in [0, 0xffff]: 65536 Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536 是的,应用程序架构可能应该进行重组,但这需要时间。 目前我们正试图找出解决方案来暂时解决这个问题。 有什么建议么?