我试图在互联网上找到解决方案,但并没有什么和我的案子有太大关系
问题是下一个,构建失败并获得错误:错误:未捕获的翻译错误:com.android.dx.cf.code.SimException:局部变量类型不匹配:尝试使用int类型的局部变量设置或访问java.lang.Object类型的值。这是忽略局部变量信息的. class转换工具的症状。
我有 2 个配置
buildTypes {
debug {
debuggable true
minifyEnabled true
signingConfig signingConfigs.defaultKey
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
debuggable false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
问题是如果我关闭调试proguard(缩小启用的错误),我得到的问题与构建
Error:Uncaught translation error: com.android.dx.cf.code.SimException: local variable type mismatch: attempt to set or access a value of type java.lang.Object using a local variable of type int. This is symptomatic of .class transformation tools that ignore local variable information.
Error:Uncaught translation error: com.android.dx.cf.code.SimException: local variable type mismatch: attempt to set or access a value of type int using a local variable of type android.util.SparseIntArray. This is symptomatic of .class transformation tools that ignore local variable informathtml" target="_blank">ion.
因塔运行被禁用,因为启用了专业警卫
因此,无论我做什么,我都无法越过这一点,即使我创建了单独的proguard文件(调试文件)并将其放在下一个:
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-dontobfuscate
-dontoptimize
-dontpreverify
-ignorewarnings
得到相同的结果,尝试使用:multiDexEnabled true,但仍然没有成功,在这种情况下,启用proguard后,我可以构建,正常地获得调试/发布,除了调试(这是我非常需要的)
这是我连续第二天有问题,也不能解决它有人有类似的问题吗?我该如何解决它?
P. S. gradle与stacktraces和调试标志给我什么有用的,所以没有帮助
这发生在我从SDK管理器卸载Google存储库之后,即使我重新安装了它,问题仍然存在。
我通过关闭Android Studio,从文件系统中删除一堆与缓存相关的东西,然后重新打开Android Studio来修复它。
我删除的一些文件是:
{USERPROFILE}\。gradle
< Li > < code > { project } \ build < li>
构建
< li>
{IDE}\tmp
如果我没理解错的话,你只有在调试版本中禁用ProGuard时才会遇到问题。
这表示您的某个依赖 jar 未正确生成,并且包含无效的“局部变量表”或“局部变量类型表”属性,从而导致错误,如问题中所示。
当启用ProGuard时,您看不到该问题的原因是,在默认情况下,ProGuard将删除相关属性(除非您添加了-keepattributes xxx配置)。
要解决这个问题,您需要确定哪个jar对这个问题负责,并获得一个正确的版本(要么自己用ProGuard处理它以删除LocalVariable表,要么获得一个正确构建的更新版本)。
有时问题是因为ProGuard优化了一个罐子。已知一种特定的优化技术存在问题,应为库禁用(-优化!code/分配/变量)。
主要内容:Java10 局部变量类型推断,声明局部变量的旧用法,声明局部变量的新用法,需要注意的事项,Java10 局部变量类型推断的示例Java10 局部变量类型推断 局部变量类型推断是 Java 10 以后可用语言最明显的变化之一。它允许使用 var 定义变量而不指定它的类型。编译器使用提供的值推断变量的类型。这种类型推断仅限于局部变量。 声明局部变量的旧用法 声明局部变量的新用法 需要注意的事项 在成员变量、方法参数、返回值的情况下没有类型推断。 局部变量应在声明时初始化,否则编译器将无法
此代码只是使用中间的来删除重复项,其中元素之间的相等性是根据提供的比较器定义的。 让我们给局部类型推断一个机会吧,我(天真地)想...于是我将上面的代码改为: 这对我来说是有意义的,因为的类型可以从的类型推断出来,或者我是这么想的。但是,修改后的代码无法编译,并生成以下错误: 注意1:编译代码的一种方法是将返回类型更改为。不过,那是一套很难用的... 注意2:另一种方法是在比较器中不使用逆变,但我
问题内容: 为什么我需要声明一个方法,好像我在方法中定义的需要使用它一样? 范例: } 为什么String 需要是最终常量?它如何影响? 问题答案: 答案是两者在不同的范围内。因此该变量可以在内部类访问它之前更改。将其最终确定可以防止这种情况。
问题内容: 嗨,我正在浏览有关内部类的SCJP书,发现了这一说法,类似这样。 方法本地类只能引用已标记的本地变量 在解释中,指定的原因与本地类对象和堆上的局部变量的范围和生存期有关,但我无法理解。我在这里想念任何东西吗? 问题答案: 原因是,在创建方法本地类实例时,编译器实际上会将其引用的所有方法本地变量复制到其中。这就是为什么只能访问变量的原因。甲变量或参考是不变的,所以它停留在同步与其方法本地
但是,如果我在内部类中声明了一个同名的variabe呢?有什么方法可以显式引用外部变量吗? 顺便说一句,这和这个问题不同,因为它考虑的是局部堆栈变量。