可包裹:从不同应用调用时解组时找不到类



我正在尝试从 App1 传递一个捆绑包,其中包含一些数据类是 Auxiliar 的数据,将其传递给也定义了 Auxiliar 数据类的 App2,但我收到以下错误:

E/Parcel: Class not found when unmarshalling: com.opp.App1.ui.main.Auxiliar

我认为App2在检索捆绑包信息时试图找到辅助定义,我不知道如何使用App2中定义的辅助

这是一些代码

@Parcelize
data class Auxiliar(
var nightId: Long = 0L,
val startTimeMilli: Long = System.currentTimeMillis(),
var endTimeMilli: Long = startTimeMilli,
var quality: Int = -1
): Parcelable

应用1

var intent: Intent? = activity?.packageManager?.getLaunchIntentForPackage("com.opp.App2")
val argu1 = Auxiliar(-101, 1,1,-1)
if (intent != null) {
var bundle = Bundle()
bundle.putParcelable("una", argu1)
intent.putExtra("myBundle",bundle)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}

在 App2 中检索:


val bundle = activity?.intent?.getBundleExtra("myBundle")
if (bundle != null) {
var una = bundle.getParcelable<Auxiliar>("una")
}

无法将可包裹类从一个应用程序传递到另一个应用程序?

是的,你可以。但是,它们必须是同一类。换句话说,他们需要具备:

  • 相同的基本名称 (Auxiliar(
  • 相同的软件包名称 (com.opp.App1.ui.main(
  • 相同的字段

在您的情况下,我猜测包名称不同。如果在两个应用程序中使用相同的包名称(例如让两个应用程序共享定义类的公共库模块(,那么您的状态会更好一些。

但是,请记住,用户不需要同时更新 App1 和 App2。Parcelable旨在供框架类使用,这些类是固件的一部分,其中 App1 和 App2 保证具有相同的实现。如果 App1 具有旧Auxiliar而 App2 具有新Auxiliar,则可能会遇到问题。

你只能传递原始类?

将 Android SDK 中定义的任何内容传递为Parcelable都是安全的,因为 App1 和 App2 对这些类具有相同的类定义。因此,例如,BundleParcelable.您仍然需要一个版本控制系统来处理数据更改,但至少您可以控制如何处理它。

最新更新