为什么我的动态特征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 下载,而不是动态方法。现在恢复正常了。
我 运行 我的 .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 下载,而不是动态方法。现在恢复正常了。