Android dex问题:嵌套类+最终布尔值:com.android.dex.util.ExceptionWithContext

2023-12-26

我正在尝试构建我的 Android 项目,但在构建步骤中遇到了这个问题:

[INFO] UNEXPECTED TOP-LEVEL EXCEPTION:
[INFO] com.android.dex.util.ExceptionWithContext
[INFO]  at com.android.dex.util.ExceptionWithContext.withContext(ExceptionWithContext.java:45)
[INFO]  at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:369)
[INFO]  at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:137)
[INFO]  at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:93)
[INFO]  at com.android.dx.command.dexer.Main.processClass(Main.java:729)
[INFO]  at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
[INFO]  at com.android.dx.command.dexer.Main.access$300(Main.java:82)
[INFO]  at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
[INFO]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:170)
[INFO]  at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
[INFO]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
[INFO]  at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
[INFO]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
[INFO]  at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
[INFO]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
[INFO]  at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
[INFO]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
[INFO]  at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
[INFO]  at com.android.dx.command.dexer.Main.processOne(Main.java:632)
[INFO]  at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
[INFO]  at com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)
[INFO]  at com.android.dx.command.dexer.Main.run(Main.java:245)
[INFO]  at com.android.dx.command.dexer.Main.main(Main.java:214)
[INFO]  at com.android.dx.command.Main.main(Main.java:106)
[INFO] Caused by: java.lang.NullPointerException
[INFO]  at com.android.dx.cf.code.ConcreteMethod.<init>(ConcreteMethod.java:87)
[INFO]  at com.android.dx.cf.code.ConcreteMethod.<init>(ConcreteMethod.java:75)
[INFO]  at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:271)
[INFO]  ... 22 more
[INFO] ...while processing <init> (Lcom/glureau/dex_issue/MyClass;)V
[INFO] ...while processing com/glureau/dex_issue/MyClass$1.class

看起来它与嵌套类 + if 条件有关,其中值始终为 false :

public class MyClass {

    public static final boolean DEBUG   = false;

    private class NestedClass {
    }

    public void updateButton(Button button) {
        new NestedClass();
        if (DEBUG) {
            if (button != null) {
                button.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(v.getContext(), "Test", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        }
    }
}

我怀疑这是一个 dex 问题,因为新的 OnClickListener 创建了一个新的 NestedClass 来引用 MyClass 的实例,但同时,这部分代码在构建阶段被删除(因为 DEBUG=false)。

如果有人可以确认该问题或为此添加一些解释,谢谢。

Apache Maven 3.2.1(ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9;2014-02-14T18:37:52 + 01:00) Maven 主目录:C:\apache-maven-3.2.1\bin.. Java版本:1.7.0_71,供应商:Oracle Corporation Java 主目录:C:\Program Files\Java\jdk1.7.0_71\jre 默认区域设置:fr_FR,平台编码:Cp1252 操作系统名称:“windows 7”,版本:“6.1”,架构:“amd64”,系列:“windows”

完整的 Maven 项目(2 类):http://www.filedropper.com/dexissue_1 http://www.filedropper.com/dexissue_1

PS:是的,我可以轻松更改代码以使其再次编译。例如,只需将新的 OnClickListener 移到 if 之外,但我很想了解为什么我的代码在 dex 过程中崩溃。


我可以确认这是 Android 构建工具链中某个地方的错误。在标准 Android Studio 安装中,创建一个新项目并添加一个类(例如您的类)将导致崩溃。

我创建了一个在 Android 开源项目中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android dex问题:嵌套类+最终布尔值:com.android.dex.util.ExceptionWithContext 的相关文章

  • Android Google 地图:隐藏整个地图的多边形或形状

    我试图隐藏除一个区域之外的整个地图 因为我使用的多边形在我想要显示的区域中有一个洞 问题在于 根据缩放的不同 空白区域会被多边形的颜色覆盖 或者多边形会失去其颜色 这是代码 polygon hide all world map float
  • 酷还是傻? Catch(异常[NamingException, CreateException] e)

    我正在编写一些代码 我注意到异常处理中的一种模式让我思考 try do stuff throws JMS Create and NamingException catch NamingException e log1 e rollback
  • 如何在开头时解析 json 文件

    我想解析以下 JSON 文件 但以 向我表明这是一个数组 然后继续 对象 我当前的解析器返回一个 JSON 对象 我的问题是 如何修改解析器来解析这个文件 这样解析器将为我提供其他 JSON 文件 从对象或排列开始 JSON 文件 codi
  • 如何在Android中使用资源

    一个人如何使用资产 我有这个代码 AssetManager assets getAssets InputStream stream assets open test txt 看起来它只能在 Activity 类中使 用 如果我尝试在另一个类
  • 未从线程接收位置数据

    我尝试使用计时器经常发送包含用户位置的短信 最初 我遇到了空指针异常 这是由于我犯了一个简单的错误 一旦解决了这个问题 一切似乎都运行良好 但是 它永远不会获取我的位置 因此 不断发送的文本显示 无法接收位置 我想问的是为什么它无法获取我的
  • Android - 框架布局高度与协调器布局不匹配

    我的 FrameLayout 抽屉布局中的容器 有问题 FrameLayout的高度超过了屏幕高度 在底部的android默认菜单按钮下方
  • 使用泛型进行选择排序

    我对整数进行了选择排序并且它正在工作 当我尝试修改程序以使用泛型时 编译器会抱怨 我不知道如何修复它 如果有人能提出一些建议和建设性意见 我将不胜感激 这是代码 public class SelelctionSort public stat
  • 使用 Lint 和 SonarQube 分析 Android 项目

    我真的 溢出 了试图让这些东西一起工作 我按照这里的指示进行操作 http docs sonarqube org display PLUG Android Lint Plugin http docs sonarqube org displa
  • org.apache.catalina.core.JreMemoryLeakPreventionListener 中急切调用 URLConnection 的 setDefaultUseCaches(false) 是什么原因

    这个问题可能有点难以找到答案 这是一个系列中的问题考虑使用 Policy getPolicy 的原因是什么 因为它将保留对上下文的静态引用并可能导致内存泄漏 https stackoverflow com questions 7057421
  • 飞碟 - html 实体未呈现

    我正在使用 Flying saucer lib 生成 pdf 但我对一些 html 实体有问题 我已经在寻找解决方案 我在这个论坛和其他地方找到了很多提示 但仍然存在问题 我尝试过这种方法 http sdtidbits blogspot c
  • System.out.println("嗨"+6+10);打印Hi610?

    为什么要这样做 太令人困惑了 运算符优先级和结合性 两点 操作员 如果一个或两个参数都是字符串 则进行字符串连接 操作员 从左到右工作 所以在你的例子中 Hi 6 is Hi6 and Hi6 10 is Hi610 编辑 正如您在对另一个
  • SecurityContextHolder.getContext().getAuthentication() 返回 null

    我想使用以下代码手动绕过 spring Security 的用户 User localeUser new User UsernamePasswordAuthenticationToken auth new UsernamePasswordA
  • Android 多点触控

    因此 我尝试使用 onTouchEvent 检查多个屏幕触摸 但它似乎仍然只读取第一次触摸 有人可以帮忙吗 这是我的代码 public boolean onTouchEvent MotionEvent e int num e getPoin
  • 如何设置 commons-logging 来使用 logback?

    我们使用 slf4j logback 并且碰巧有一些使用 commons logging 的第三方库 如何设置它以使用 logback 答案是不要使用 commons logging jar 因为 SLF4J 的设计目的与 commons
  • 需要同步仅增量计数器吗?

    我使用整数作为计数器 该整数只会增加 并且肯定有多个线程会同时增加它 当没有其他线程尝试访问其值时 在程序执行结束时读取该计数器的值 我假设我不必为这种仅增量计数器使用锁或任何类型的同步 这是正确的吗 如果这有什么区别的话 我用 Java
  • 如何使用 Kafka 发送大消息(超过 15MB)?

    我发送字符串消息到Kafka V 0 8使用 Java Producer API 如果消息大小约为 15 MB 我会得到MessageSizeTooLargeException 我尝试过设置message max bytes到 40 MB
  • 丰富:数据表行跨度问题

    我需要创建一个 rich dataTable 甚至扩展 具有以下功能 我有一个公司类 其中包含产品对象的集合 我想展示下表 我仍然没有弄清楚如何使用子表执行此操作 在所有示例中 我发现子表具有与主表完全相同的列 据推测 我需要在前两列中使用
  • 使用 Spring Batch 将文件中的日期解析为 LocalDateTime

    我正在尝试使用 Spring Batch 读取包含日期的 CSV 文件 但在将日期解析为LocalDateTime Object 字段 日期 上的对象 目标 中的字段错误 拒绝值 2017 07 20 04 15 25 0 代码 typeM
  • Java:如何检测(并更改?)System.console 的编码?

    我有一个在控制台上运行的程序 其变音符号和其他特殊字符在 Mac 上以 的形式输出 这是一个简单的测试程序 public static void main String args System out println h h System
  • 带有客户端证书的android webview

    我尝试了几天使用嵌入在应用程序中的客户端证书的Web视图 但在我看来 android sdk没有提供任何方法来做到这一点 是否有回调来拦截服务器发送的质询 有没有办法将 webview 与客户端证书一起使用并发出 https 请求 因为我也

随机推荐