【发布时间】:2018-08-09 14:11:56
【问题描述】:
我正在尝试为一个库 Firebase.Messaging 创建一个绑定,因为 Nuget 上的当前一个不是最新的,但是这个 .aar 库中的一个类没有被添加到绑定中。 这是 RemoteMessage.class。
当我反编译 firebase-messaging.aar 时,我确实看到 .aar 文件中存在 RemoteMessage.class,但是当我将此 .aar 文件添加到我的绑定项目并运行时,我收到以下错误:
警告 BG8604:找不到嵌套类型 Firebase.Messaging.RemoteMessage.Builder 的顶级祖先 RemoteMessage。 (BG8604)
这意味着例如方法public override void OnMessageReceived(RemoteMessage message)
不会添加到我的绑定中,因为找不到 RemoteMessage。我尝试使用<add-note ... 手动将其添加到我的绑定中,但到目前为止还没有运气。
在我的绑定中,我添加了对 firebase-common、firebase-iid、googleplayservices-basement、googleplayservices-tasks 的引用。
有谁知道如何强制我的绑定识别 RemoteMessage 类并将其添加到绑定中?
编辑: 我所做的是为 android 创建一个新的 Xamarin Binding 项目,将 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 进行此绑定。
【问题讨论】:
-
您好,您能给我提供重现问题的步骤吗?或者提供一个demo?
-
嗨,Joe,我已经添加了对我的步骤的描述以及我对标准绑定项目所做的更改。我希望这已经足够了。
标签: android firebase xamarin binding firebase-cloud-messaging