我在OS X上使用Android Studio.我收到此错误消息:
FAILURE:构建因异常而失败.
出了什么问题:任务':app:preDexDebug'执行失败.com.android.ide.common.internal.LoggedErrorException:无法运行命令:/ Applications/Android Studio.app/sdk/build-tools/android-4.4W/dx --dex --output/Users/alex/AndroidStudioProjects/SilentSMS/app/build/intermediates/pre-dexed/debug/android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar /Users/alex/AndroidStudioProjects/SilentSMS/app/libs/android-4.3_r2.1.jar
错误代码:3输出:
UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError: GC overhead limit exceeded
at com.android.dx.cf.code.RopperMachine.getSources(RopperMachine.java:665)
at com.android.dx.cf.code.RopperMachine.run(RopperMachine.java:288)
at com.android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.java:612)
at com.android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.java:412)
at com.android.dx.cf.code.Simulator.simulate(Simulator.java:94)
at com.android.dx.cf.code.Ropper.processBlock(Ropper.java:782)
at com.android.dx.cf.code.Ropper.doit(Ropper.java:737)
at com.android.dx.cf.code.Ropper.convert(Ropper.java:346)
at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:282)
at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:139)
at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:94)
at com.android.dx.command.dexer.Main.processClass(Main.java:682)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
at com.android.dx.command.dexer.Main.access$600(Main.java:78)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
at com.android.dx.command.dexer.Main.processOne(Main.java:596)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
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)
Run Code Online (Sandbox Code Playgroud)
我正在使用这个库:
http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/
我删除了JAR文件并将其添加到我的项目中 - 我正在尝试构建的项目是:
https://github.com/domi007/silentSMS/
我理解这是因为我的xms和xmx值太低了.我增加了它们:
/ Applications/Android Studio.app/bin/idea.vmoptions现在它说:
-Xms256m
-Xmx1024m
Run Code Online (Sandbox Code Playgroud)
但是,我仍然得到错误.这可能是由什么引起的?除了silentSMS应用程序是一个Eclipse项目,我将代码移植到Android …
我有一个相当大的Android应用程序,它依赖于许多库项目.Android编译器对每个.dex文件有65536个方法的限制,我超过了这个数字.
当你达到方法限制时,你可以选择两种途径(至少我知道).
1)缩小你的代码
2)构建多个dex文件(参见此博文)
我调查了两个并试图找出导致我的方法计数变得如此之高的原因.Google Drive API占据了Guava依赖的最大块,超过12,000.Drive API v2的总库存超过23,000!
我想我的问题是,你认为我该怎么做?我应该删除Google云端硬盘集成作为我应用的功能吗?有没有办法缩小API(是的,我使用proguard)?我应该采用多重dex路由(看起来相当痛苦,尤其是处理第三方API)?
我通过以下设置使用gradle:
compileSdkVersion 21
ANDROID_BUILD_MIN_SDK_VERSION=14
ANDROID_BUILD_TARGET_SDK_VERSION=21
ANDROID_BUILD_TOOLS_VERSION=21.0.2
ANDROID_BUILD_SDK_VERSION=21
Run Code Online (Sandbox Code Playgroud)
我的gradle文件中还有以下设置:
compile 'com.android.support:support-annotations:21.0.0'
compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.android.support:support-v4:21.0.0'
Run Code Online (Sandbox Code Playgroud)
我总是得到错误UNEXPECTED TOP LEVEL EXCEPTION.
但是,当我做21.0.0给20.0.0它工作正常...但我不能够访问任何的Android API的21个选项.我在这里做错了吗?如何在没有此异常的情况下编译它?我没有其他等级项目以外的其他地方的支持罐(facebook等).
这是完整的堆栈跟踪:
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:283)
at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
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)
Run Code Online (Sandbox Code Playgroud) android gradle android-support-library build.gradle android-5.0-lollipop
Android ART运行时是否与Dalvik具有相同的方法限制限制?目前,主要dex文件中有64k方法的限制
我可以计算jar文件中使用的所有方法.我的APK使用某些外部JARS,并且有大约100个类是精确的.
我使用dex2jar JAD等反编译器等等,但它们似乎只在特定的类文件中显示方法.
有没有办法可以获得总数?
我的团队和我继承了另一个团队的大型Android项目.据报道,包含所有包含库的整个应用程序有大约35000种方法.我们现在的任务是在应用程序中实现我们需要使用Protocol Buffers的新服务.
问题是生成的.jar文件包含所有必需的.proto文件,会创建另外35个方法,即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
Run Code Online (Sandbox Code Playgroud)
是的,应用程序架构可能应该进行重组,但这需要时间.目前我们正试图找出解决方案来暂时解决这个问题.
有什么建议?
我的应用程序有一堆必不可少的库,这就是为什么我被迫使用multidex支持库并且它运行良好.但问题显示的是在gradle buid速度.平均需要2分钟才能构建,当我开发和测试时,这非常烦人.
有没有办法加快我的调试版本?
performance android android-studio android-gradle-plugin android-multidex
我已将我的应用程序转换为MultiDex以承受64k dex限制.现在它看起来像这样:
public class App extends MultiDexApplication {
private AppWrapper instance;
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(base);
}
@Override
public void onCreate() {
super.onCreate();
if (instance == null) {
instance = new AppWrapper(this);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经从App中删除了所有常用的逻辑来AppWidget完成MultiDex工作.它在其他队友的电脑上运行正常.但不是和我在一起.它不断抛出java.lang.NoClassDefFoundError应用程序创建:
I/dalvikvm? Failed resolving Lcom/playday/app/core/AppWrapper; interface 8940 'Lretrofit/ErrorHandler;'
W/dalvikvm? Link of class 'Lcom/playday/app/core/AppWrapper;' failed
I/dalvikvm? Failed resolving Lcom/playday/app/core/AppWrapper; interface 8940 'Lretrofit/ErrorHandler;'
W/dalvikvm? Link of class 'Lcom/playday/app/core/AppWrapper;' failed
E/dalvikvm? Could not find class 'com.playday.app.core.AppWrapper', referenced from method …Run Code Online (Sandbox Code Playgroud) 使用Eclipse,可以使用multidex生成一个Android项目来创建多个dex文件吗?通过网络搜索,我发现如何使用gradle,但没有任何关于在没有gradle的情况下在Eclipse上使用它
我建立我的应用程序我得到了这个错误
Dx警告:忽略没有关联的EnclosingMethod属性的匿名内部类(com.amazonaws.javax.xml.stream.xerces.util.SecuritySupport12 $ 4)的InnerClasses属性.这个类可能是由一个没有以现代.class文件格式为目标的编译器生成的.建议的解决方案是使用最新的编译器从源代码重新编译类,而不指定任何"-target"类型选项.忽略此警告的后果是,对此类的反射操作将错误地指示它不是内部类.
Dex Loader]无法执行dex:方法ID不在[0,0xffff]中:65536转换为Dalvik格式失败:无法执行dex:方法ID不在[0,0xffff]中:65536
android ×10
dalvik ×3
dex ×3
java ×3
eclipse ×2
art-runtime ×1
build.gradle ×1
dex-limit ×1
gradle ×1
guava ×1
overhead ×1
performance ×1