当前位置: 首页 > 知识库问答 >
问题:

Android Studio gradle构建问题:局部变量类型不匹配

宣熙云
2023-03-14

我试图在互联网上找到解决方案,但并没有什么和我的案子有太大关系

问题是下一个,构建失败并获得错误:错误:未捕获的翻译错误: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和调试标志给我什么有用的,所以没有帮助

共有2个答案

梁修贤
2023-03-14

这发生在我从SDK管理器卸载Google存储库之后,即使我重新安装了它,问题仍然存在。

我通过关闭Android Studio,从文件系统中删除一堆与缓存相关的东西,然后重新打开Android Studio来修复它。

我删除的一些文件是:

    < li> {USERPROFILE}\。gradle < Li > < code > { project } \ build < li> 构建 < li> {IDE}\tmp
林和煦
2023-03-14

如果我没理解错的话,你只有在调试版本中禁用ProGuard时才会遇到问题。

这表示您的某个依赖 jar 未正确生成,并且包含无效的“局部变量表”或“局部变量类型表”属性,从而导致错误,如问题中所示。

当启用ProGuard时,您看不到该问题的原因是,在默认情况下,ProGuard将删除相关属性(除非您添加了-keepattributes xxx配置)。

要解决这个问题,您需要确定哪个jar对这个问题负责,并获得一个正确的版本(要么自己用ProGuard处理它以删除LocalVariable表,要么获得一个正确构建的更新版本)。

有时问题是因为ProGuard优化了一个罐子。已知一种特定的优化技术存在问题,应为库禁用(-优化!code/分配/变量)。

 类似资料:
  • 主要内容:Java10 局部变量类型推断,声明局部变量的旧用法,声明局部变量的新用法,需要注意的事项,Java10 局部变量类型推断的示例Java10 局部变量类型推断 局部变量类型推断是 Java 10 以后可用语言最明显的变化之一。它允许使用 var 定义变量而不指定它的类型。编译器使用提供的值推断变量的类型。这种类型推断仅限于局部变量。 声明局部变量的旧用法 声明局部变量的新用法 需要注意的事项 在成员变量、方法参数、返回值的情况下没有类型推断。 局部变量应在声明时初始化,否则编译器将无法

  • 此代码只是使用中间的来删除重复项,其中元素之间的相等性是根据提供的比较器定义的。 让我们给局部类型推断一个机会吧,我(天真地)想...于是我将上面的代码改为: 这对我来说是有意义的,因为的类型可以从的类型推断出来,或者我是这么想的。但是,修改后的代码无法编译,并生成以下错误: 注意1:编译代码的一种方法是将返回类型更改为。不过,那是一套很难用的... 注意2:另一种方法是在比较器中不使用逆变,但我

  • 问题内容: 为什么我需要声明一个方法,好像我在方法中定义的需要使用它一样? 范例: } 为什么String 需要是最终常量?它如何影响? 问题答案: 答案是两者在不同的范围内。因此该变量可以在内部类访问它之前更改。将其最终确定可以防止这种情况。

  • 问题内容: 嗨,我正在浏览有关内部类的SCJP书,发现了这一说法,类似这样。 方法本地类只能引用已标记的本地变量 在解释中,指定的原因与本地类对象和堆上的局部变量的范围和生存期有关,但我无法理解。我在这里想念任何东西吗? 问题答案: 原因是,在创建方法本地类实例时,编译器实际上会将其引用的所有方法本地变量复制到其中。这就是为什么只能访问变量的原因。甲变量或参考是不变的,所以它停留在同步与其方法本地

  • 但是,如果我在内部类中声明了一个同名的variabe呢?有什么方法可以显式引用外部变量吗? 顺便说一句,这和这个问题不同,因为它考虑的是局部堆栈变量。

  • 我遇到了一个关于Scala和多种未来收益的问题。f1和f2都是期货。f2期货基于从f1期货获得的值。 根据 f1 的结果,我要么在 if 语句计算结果为 false 时执行 Lookup(),要么返回 LookupResult),要么模仿默认的 LookupResult。 返回以下错误: 类型不匹配。必需:选项[B_],找到:Future[(MyNode,Any)] 我只是没有正确映射结果吗?例如