gpt4 book ai didi

android - Android构建系统报告: “trouble writing output: shouldn'不会发生”

转载 作者:行者123 更新时间:2023-12-03 06:09:33 26 4
gpt4 key购买 nike

对内部开发的库(发布在Bitbucket上托管的Maven存储库中)进行了一些更改之后,我尝试更新Android应用程序以使用该库的新版本。在应用程序构建文件中增加库依赖项的版本后,Gradle无法生成APK,无法完成某些与dex相关的任务(在构建系统的1.2.3版中为preDexDebug,在1.5版中为transformClassesWithDexForDebug。 0)。更具体地说,报告的错误是:

trouble writing output: shouldn't happen
Error:Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_40\bin\java.exe'' finished with non-zero exit value 2

是的,特别讽刺。我认为这不是超过65K方法的问题,因为 the message would indeed be more specific比“不应该发生”。一切正常之前,我已经复制了 support-v4版本(来自Facebook SDK,Android支持设计库等)。那么,还有什么呢?

最佳答案

罪魁祸首是一种通用方法。

更确切地说,似乎通用方法无法访问static子句主体中的final else字段。我的意思是说,Android构建系统无法正确地将这种情况转换为DEX格式。当然,构建时一切都很好,因为使用了javac。但是,当涉及DEX时,会弹出该限制,并显示令人无法理解且令人震惊的错误消息。真正不应该发生的事情是让开发人员在不知道他们在做什么的情况下搞乱了Java之类的复杂语言。

仅针对那些仍然几乎不相信DEX格式的人Java 5功能(我相信Java 5甚至不属于Java 5的6、7或8 ...),仅举一个例子。在我的图书馆中,我有以下内容:

private static final String TAG = MyClass.getClass().getSimpleName();

@Override
public <T> T getValue(String key, Class<T> type) {
String value = null;
if (data.containsKey(key)) {
value = data.get(key);
} else {
String message = "Error getting a configuration value with key: " + key;
Log.e(TAG, message);
return null;
}
// ...
}

可怕的“不应发生”错误消息不断抬起头来。但是,只需反转 if条件:
@Override
public <T> T getValue(String key, Class<T> type) {
String value = null;
if (!data.containsKey(key)) {
String message = "Error getting a configuration value with key: " + key;
Log.e(TAG, message);
return null;
} else {
value = data.get(key);
}
// ,,,
}

我能够使错误消失。

关于android - Android构建系统报告: “trouble writing output: shouldn'不会发生”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36042111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com