You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建DEX文件报错:Smali代码中无符号短整型值超出范围

APK构建时遭遇DEX写入错误(Smali代码相关)

在APK构建过程中遇到DEX文件相关问题,该问题直接关联Smali代码。涉及的values()方法编译时触发数值越界错误,已排查语法问题、单独编译文件/方法仍无法解决。

涉事Smali方法代码

.method public static values()[Landroidx/annotation/RequiresOptIn$Level;
    .locals 1

    sget-object v0, Landroidx/annotation/RequiresOptIn$Level;->$VALUES:[Landroidx/annotation/RequiresOptIn$Level;

    invoke-virtual {v0}, [Ljava/lang/Object;->clone()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, [Landroidx/annotation/RequiresOptIn$Level;

    return-object v0
.end method

报错信息

Exception in thread "main" com.android.tools.smali.util.ExceptionWithContext: Exception occurred while writing code_item for method Landroidx/annotation/RequiresOptIn$Level;->values()[Landroidx/annotation/RequiresOptIn$Level;
    at com.android.tools.smali.dexlib2.writer.DexWriter.writeDebugAndCodeItems(DexWriter.java:1119)
    at com.android.tools.smali.dexlib2.writer.DexWriter.writeTo(DexWriter.java:415)
    at com.android.tools.smali.dexlib2.writer.DexWriter.writeTo(DexWriter.java:370)
    at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:56)
    at brut.androlib.src.SmaliBuilder.build(SmaliBuilder.java:35)
    at brut.androlib.ApkBuilder.buildSourcesSmali(ApkBuilder.java:211)
    at brut.androlib.ApkBuilder.buildNonDefaultSources(ApkBuilder.java:159)
    at brut.androlib.ApkBuilder.build(ApkBuilder.java:100)
    at brut.apktool.Main.cmdBuild(Main.java:296)
    at brut.apktool.Main.main(Main.java:95)
Caused by: com.android.tools.smali.util.ExceptionWithContext: Error while writing instruction at code offset 0x2
    at com.android.tools.smali.dexlib2.writer.DexWriter.writeCodeItem(DexWriter.java:1392)
    at com.android.tools.smali.dexlib2.writer.DexWriter.writeDebugAndCodeItems(DexWriter.java:1115)
    ... 9 more
Caused by: com.android.tools.smali.util.ExceptionWithContext: Unsigned short value out of range: 66291
    at com.android.tools.smali.dexlib2.writer.DexDataWriter.writeUshort(DexWriter.java:115)
    at com.android.tools.smali.dexlib2.writer.InstructionWriter.write(InstructionWriter.java:397)
    at com.android.tools.smali.dexlib2.writer.DexWriter.writeCodeItem(DexWriter.java:1352)
    ... 10 more

已做排查尝试

  • 确认该Smali方法无语法错误或逻辑问题
  • 尝试单独编译该Smali文件及目标方法,问题依旧

可能的解决方向

  1. 处理常量池索引溢出
    报错中的Unsigned short value out of range: 66291说明DEX文件中某个需要用无符号短整型(最大65535)存储的索引值超限,大概率是字符串/类型/方法常量池的索引溢出。

    • 若采用多DEX构建,将该类的Smali代码拆分到其他DEX文件中
    • 清理项目中无用的常量、类或方法,缩减常量池大小
  2. 修正Smali指令引用
    修改invoke-virtual指令,直接使用数组类型的clone()方法而非Object类的,避免额外的常量引用:

    invoke-virtual {v0}, [Landroidx/annotation/RequiresOptIn$Level;->clone()Ljava/lang/Object;
    
  3. 更新Apktool版本
    旧版Apktool在处理高版本Android SDK注解类时可能存在常量池处理bug,尝试更新至最新稳定版本后重新编译。

  4. 检查注解类完整性
    确认RequiresOptIn$Level枚举类的所有Smali文件完整,静态数组$VALUES的定义无缺失或错误。

内容的提问来源于stack exchange,提问作者Duxii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:16:19