gpt4 book ai didi

Android 绑定(bind) - 未找到嵌套类型的顶级祖先但存在于 aar 文件中

转载 作者:行者123 更新时间:2023-12-05 06:36:29 24 4
gpt4 key购买 nike

我正在尝试为一个库 Firebase.Messaging 创建一个绑定(bind),因为 Nuget 上的当前那个不是最新的,但是这个 .aar 库中的一个类没有被添加到绑定(bind)中。这是 RemoteMessage.class。

当我反编译 firebase-messaging.aar 时,我确实看到 .aar 文件中存在 RemoteMessage.class,但是当我将此 .aar 文件添加到我的 bindingproject 并运行时,出现以下错误:

Warning BG8604: top ancestor RemoteMessage not found for nested type Firebase.Messaging.RemoteMessage.Builder. (BG8604)

这意味着例如方法
public override void OnMessageReceived(RemoteMessage message)
不会添加到我的绑定(bind)中,因为找不到 RemoteMessage。我尝试使用 <add-note ... 将其手动添加到我的绑定(bind)中但到目前为止还没有运气。

在我的绑定(bind)中,我添加了对 firebase-common、firebase-iid、googleplayservices-basement、googleplayservices-tasks 的引用。

有谁知道如何强制我的绑定(bind)识别 RemoteMessage 类并将其添加到绑定(bind)中?

编辑:我所做的是为 android 创建一个新的 Xamarin 绑定(bind)项目,将 aar 文件添加到 Jars 文件夹并更新 Metadata.xml

这是我当前使用的 metadata.xml:

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<!-- Rename Namespaces -->
<attr path="/api/package[@name='com.google.firebase.messaging']" name="managedName">Firebase.Messaging</attr>
<!-- Remove *zz* obfuscated classes, interfaces, methods, etc. -->
<remove-node path="/api/package/class[contains(@name, 'zz')]" />
<remove-node path="/api/package/interface[contains(@name, 'zz')]" />
<remove-node path="/api/*/*/method[contains(@name, 'zz')]" />
<remove-node path="/api/*/*/field[contains(@name, 'zz')]" />

<!-- Fix params for some inherited parcelable types -->
<attr path="/api/*/*/method[@name='createFromParcel']/parameter[@name='p0']" name="managedName">source</attr>
<attr path="/api/*/*/method[@name='newArray']/parameter[@name='p0']" name="managedName">size</attr>
<attr path="/api/*/*/method[@name='writeToParcel']/parameter[@name='p0']" name="managedName">dest</attr>
<attr path="/api/*/*/method[@name='writeToParcel']/parameter[@name='p1']" name="managedName">flags</attr>

</metadata>

additions 文件夹中没有任何内容,EnumFields 或 EnumMethods 也没有,目前我正在使用 firebase-messaging-11.8.0.aar 进行此绑定(bind)。

绑定(bind)后,这是我在程序集浏览器中看到的结果: Assembly Browser Image

最佳答案

我已经弄清楚为什么 RemoteMessage 无法绑定(bind),因此对于几个方法和类,找不到顶级祖先。GooglePlay 地下室和任务库已更改。这导致了一个内部问题,因为 RemoteMessage 依赖的混淆类现在再次不可见,我使用的元数据依赖于 11.4.2,但是从 11.8.0 开始,这个混淆类不再出现在 Tasks 库中,而是出现在 Basement 库中,也使用不同的名称。

我已经添加了

<attr path="/api/package[@name='com.google.android.gms.internal']/class[@name='zzbfm']" name="obfuscated">false</attr>
<!-- Fix plural name - legacy compatibility -->
<attr path="/api/package[@name='com.google.android.gms.common.api']/class[@name='Status']" name="managedName">Statuses</attr>
<attr path="/api/package[@name='com.google.android.gms.common.api']/class[@name='Status']" name="extends">Java.Lang.Object</attr>

<add-node path="/api/package[@name='com.google.android.gms.common.api']/class[@name='Status']">
<method abstract="false" deprecated="not deprecated" final="true" name="describeContents" native="false" return="int" static="false" synchronized="false" visibility="public"></method>
</add-node>

对于 Metadata.xml,zzbfm 是 RemoteMessage 所依赖的类,因此是需要取消混淆的类。

在我的 Basement Metadata.xml 中更新它并重新绑定(bind) Firebase.Messaging 库后,RemoteMessage 现在已正确绑定(bind)到库中并且可以访问。

关于Android 绑定(bind) - 未找到嵌套类型的顶级祖先但存在于 aar 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49050884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com