为什么我的动态特征module\class突然找不到了?

Why can my dynamic feature module\class suddenly no longer be found?

我 运行 我的 .aab 内置应用程序支持下载其唯一的动态功能。此功能已经在我的应用程序中运行了 2 年,但是当用户尝试导航到动态功能中的 activity 并且应用程序检测到他们需要下载activity 所在的模块:

InTouch - 207: Lifecycle: logging uncaught exception in build Build: 1.0000.00272 from Thread: main, exception was: 
Unable to instantiate activity 
ComponentInfo{com.reddragon.intouch/com.reddragon.intouch.ui.takeatour.TakeATourActivity}: 
java.lang.ClassNotFoundException: Didn't find class 
"com.reddragon.intouch.ui.takeatour.TakeATourActivity" on path: DexPathList[[zip file 
"/system/framework/android.test.runner.jar", zip file "/data/app/com.reddragon.intouch- 
Ae8aOmjSevtS5TrlhCSSeA==/base.apk", zip file "/data/app/com.reddragon.intouch- 
Ae8aOmjSevtS5TrlhCSSeA==/split_config.arm64_v8a.apk", zip file 
"/data/app/com.reddragon.intouch-Ae8aOmjSevtS5TrlhCSSeA==/split_config.en.apk", zip file 
"/data/app/com.reddragon.intouch- 
Ae8aOmjSevtS5TrlhCSSeA==/split_config.xxxhdpi.apk"],nativeLibraryDirectories= 
[/data/app/com.reddragon.intouch-Ae8aOmjSevtS5TrlhCSSeA==/lib/arm64, 
/data/app/com.reddragon.intouch-Ae8aOmjSevtS5TrlhCSSeA==/base.apk!/lib/arm64-v8a, 
/data/app/com.reddragon.intouch- 
Ae8aOmjSevtS5TrlhCSSeA==/split_config.arm64_v8a.apk!/lib/arm64-v8a, 
/data/app/com.reddragon.intouch-Ae8aOmjSevtS5TrlhCSSeA==/split_config.en.apk!/lib/arm64-v8a, 
/data/app/com.reddragon.intouch-Ae8aOmjSevtS5TrlhCSSeA==/split_config.xxxhdpi.apk!/lib/arm64- 
v8a, /system/lib64, /system/vendor/lib64]] at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2841) at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032) at 
android.app.ActivityThread.-wrap11(Unknown Source:0) at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) at 
android.os.Handler.dispatchMessage(Handler.java:105) at 
android.os.Looper.loop(Looper.java:164) at 
android.app.ActivityThread.main(ActivityThread.java:6944) at 
java.lang.reflect.Method.invoke(Native Method) at 
com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

我不确定如何解决此问题 - 我检查了 .aab 文件,似乎所有 类 都像往常一样。

但是我确实注意到上面列出的路径不包括 'takeatour' .zip 文件,这可能是问题所在。但是我不知道配置设置中可能发生了什么变化导致了这个?它如何决定 'DexPathList' 中应该包含什么?

我已经确认我的动态功能设置没有任何变化,即我的 'app' 级别 build.gradle 文件有这个:

dynamicFeatures = [':dynamicfeature:features:takeatour']

在我的 dynamicfeature 模块中,它的 build.gradle 文件有这个:

plugins {
    id 'com.android.dynamic-feature'
}

dynamicfeature 模块的清单与往常一样:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:dist="http://schemas.android.com/apk/distribution"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.reddragon.intouch.ui.takeatour">

    <dist:module
        dist:instant="false"
        dist:title="@string/title_takeatour">
        <dist:delivery>
            <dist:on-demand />
        </dist:delivery>
        <dist:fusing dist:include="true" />
    </dist:module>
    <application tools:ignore="MissingApplicationIcon">
        <activity
            android:name=".TakeATourActivity"
            android:theme="@style/DialogTheme" />
    </application>

</manifest>

简而言之 - 一个已经工作了很长时间的动态功能突然不再工作了,在我看来是因为路径不正确。为什么?

我一直想不通为什么这突然停止工作,但最终重构了这部分代码以使用 on-demand 基于示例 here 下载,而不是动态方法。现在恢复正常了。