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

RxPermission在Release模式下触发Internal Error问题求助

RxPermission Release版崩溃(InternalError)解决方案

看起来你遇到了RxPermission在Release版本中崩溃的问题,Debug正常但Release抛出java.lang.InternalError,这个问题我之前也碰到过,核心原因是混淆工具(ProGuard/R8)错误处理了RxJava或RxPermission的关键类/成员——因为Debug模式默认不开启混淆,而Release模式会启用,导致运行时找不到必要的类或字段。

解决方案步骤

1. 添加混淆豁免规则

在你的项目proguard-rules.pro文件中添加以下规则,确保RxJava和RxPermission的核心类不被混淆或移除:

# 保护RxJava内部使用的Unsafe相关类和字段,避免崩溃
-dontwarn rx.**
-dontwarn sun.misc.**
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
    long producerIndex;
    long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode consumerNode;
}

# 保护RxPermissions的所有类和接口
-keep class com.tbruyelle.rxpermissions2.** { *; }
-keep interface com.tbruyelle.rxpermissions2.** { *; }

2. 调整R8优化(如果使用R8)

如果你的项目启用了R8优化(Android Studio默认会开启),可以添加以下规则避免过度优化:

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*

3. 清理缓存并重新构建

执行以下操作确保缓存不会影响构建:

  • 点击Android Studio菜单栏的Build > Clean Project
  • 再点击Build > Rebuild Project
  • 重新生成Release APK

问题原因说明

报错信息中的UnsafeAccess.java、SpscArrayQueue.java都是RxJava内部的类,这些类依赖于特定的字段(比如producerIndex、consumerIndex)来实现并发队列逻辑。混淆工具如果把这些字段的名称修改或者移除,就会导致运行时反射找不到对应的字段,从而抛出InternalError。RxPermission基于RxJava实现,所以也需要确保它的类不被混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:42:06