Android R8 Build Release Apk失败

问题描述

minifyEnabled = false构建成功,minifyEnabled = false构建失败

构建debugApk成功,但是构建releaseApk失败

请帮助我,我找不到问题

FORCE inlining on non-inlinable: void io.reactivex.rxjava3.disposables.Runnabledisposable.constructor$io$reactivex$rxjava3$disposables$Referencedisposable(java.lang.Object)
Stack trace:
com.android.tools.r8.errors.a: FORCE inlining on non-inlinable: void io.reactivex.rxjava3.disposables.Runnabledisposable.constructor$io$reactivex$rxjava3$disposables$Referencedisposable(java.lang.Object)
    at com.android.tools.r8.ir.conversion.O.b(:57)
    at com.android.tools.r8.ir.conversion.O.a(:390)
    at com.android.tools.r8.ir.conversion.O.a(:336)
    at com.android.tools.r8.utils.U0.a(:10)
...
    [CIRculaR REFERENCE:com.android.tools.r8.errors.a: FORCE inlining on non-inlinable: void io.reactivex.rxjava3.disposables.Runnabledisposable.constructor$io$reactivex$rxjava3$disposables$Referencedisposable(java.lang.Object)]
Caused by: com.android.tools.r8.errors.b: FORCE inlining on non-inlinable: void io.reactivex.rxjava3.disposables.Runnabledisposable.constructor$io$reactivex$rxjava3$disposables$Referencedisposable(java.lang.Object)
    at com.android.tools.r8.graph.T.a(:42)
...

解决方法

我在RxJava3版本中遇到了这种现象。也是3.0.6。
原因是R8尝试删除该方法并在单个调用站点上内联它。
详细请参见https://developer.android.com/studio/build/shrink-code
因此,如果我们的应用程序从多个位置调用RunnableDisposable.constructor,则不会发生此问题。
我的意思是,如果使用两种或更多种RunnableDisposable扩展类,我们就不会遇到此问题。
解决方法是简单地添加以下proguard规则。

-keep class io.reactivex.rxjava3.disposables.RunnableDisposable { <init>(...); }