相关疑难解决方法(0)

Android Studio Google JAR文件导致GC开销限制超出错误

我在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 …

java android overhead

201
推荐指数
4
解决办法
9万
查看次数

如何缩小代码 - dex中的65k方法限制

我有一个相当大的Android应用程序,它依赖于许多库项目.Android编译器对每个.dex文件有65536个方法的限制,我超过了这个数字.

当你达到方法限制时,你可以选择两种途径(至少我知道).

1)缩小你的代码

2)构建多个dex文件(参见此博文)

我调查了两个并试图找出导致我的方法计数变得如此之高的原因.Google Drive API占据了Guava依赖的最大块,超过12,000.Drive API v2的总库存超过23,000!

我想我的问题是,你认为我该怎么做?我应该删除Google云端硬盘集成作为我应用的功能吗?有没有办法缩小API(是的,我使用proguard)?我应该采用多重dex路由(看起来相当痛苦,尤其是处理第三方API)?

android guava dex google-drive-api android-multidex

90
推荐指数
6
解决办法
5万
查看次数

更新到最新的appcompat和支持库后出现DexIndexOverflowException问题

我通过以下设置使用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.020.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

73
推荐指数
2
解决办法
4万
查看次数

Android ART运行时是否与Dalvik具有相同的方法限制限制?

Android ART运行时是否与Dalvik具有相同的方法限制限制?目前,主要dex文件中有64k方法的限制

android dalvik dex-limit art-runtime

41
推荐指数
2
解决办法
9507
查看次数

有没有办法计算jar文件中使用的数字方法的数量

我可以计算jar文件中使用的所有方法.我的APK使用某些外部JARS,并且有大约100个类是精确的.

我使用dex2jar JAD等反编译器等等,但它们似乎只在特定的类文件中显示方法.

有没有办法可以获得总数?

java android dex

33
推荐指数
2
解决办法
2万
查看次数

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

我的团队和我继承了另一个团队的大型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)

是的,应用程序架构可能应该进行重组,但这需要时间.目前我们正试图找出解决方案来暂时解决这个问题.

有什么建议?

android dalvik protocol-buffers dex

27
推荐指数
2
解决办法
3万
查看次数

加速multidex应用程序中的gradle构建

我的应用程序有一堆必不可少的库,这就是为什么我被迫使用multidex支持库并且它运行良好.但问题显示的是在gradle buid速度.平均需要2分钟才能构建,当我开发和测试时,这非常烦人.

有没有办法加快我的调试版本?

performance android android-studio android-gradle-plugin android-multidex

22
推荐指数
1
解决办法
1万
查看次数

MultiDex NoClassDefFound错误

我已将我的应用程序转换为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)

java android

20
推荐指数
4
解决办法
3万
查看次数

使用eclipse的Android multidex支持库

使用Eclipse,可以使用multidex生成一个Android项目来创建多个dex文件吗?通过网络搜索,我发现如何使用gradle,但没有任何关于在没有gradle的情况下在Eclipse上使用它

eclipse android

17
推荐指数
1
解决办法
2万
查看次数

dex loader无法执行dex:方法ID不在[0,0xffff]:65536中

我建立我的应用程序我得到了这个错误

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

eclipse android dalvik

11
推荐指数
3
解决办法
2万
查看次数