带有android的系统应用程序:持久性=true更新后崩溃
我有一个系统特权的应用程序,其中android:persistent=true<应用程序>。当我更新它(通过ADB或任何其他方式)时,它无法正确更新并崩溃。
我看到的是,系统在当前(系统安装的)版本仍在运行时安装更新。在更新过程中,系统不会停止该过程(尝试停止并失败或根本不尝试)。更新完成后,应用程序似乎正在经历“重新启动” - 我看到组件正在初始化,例如应用程序::onCreate()被调用。但这发生在与更新之前相同的过程中!
因此(在启动应用程序的某些活动时),应用程序崩溃并出现“奇怪”的异常,例如无法将类强制转换为自身:
Caused: java.lang.ClassCastException: com.二十年新浪网.类名不能强制转换为 com。二十年新浪网.类名
在调查时,我看到更新后使用的ClassLoader并不是指更新后的APK的路径,而是仍然指向原始版本的路径:
预期的类装入器:
dalvik.system.PathClassLoader[DexPathList[[zip file “/data/app/com.app.package-1/base.apk”],nativeLibraryDirectories=[/data/app/com.app.package-1/lib/x86_64, /data/app/com.app.package-1/base.apk!/lib/x86_64, /system/lib64, /vendor/lib64]]]
实际类装入器:
dalvik.system.PathClassLoader[DexPathList[[zip file “/system/priv-app/Appname.apk”],nativeLibraryDirectories=[/system/lib64/Start, /system/priv-app/Appname.apk!/lib/x86_64, /system/lib64, /vendor/lib64, /system/lib64, /vendor/lib64]]]
我假设这是在更新过程中没有重新启动该过程的结果。
有没有办法用 persistent=true 更新应用?或者这是一种预期的行为,此类应用程序无法通过通用更新程序进行更新(例如,在Google Play上发布较新版本)?