Xamarin + Android + Binding YouTube 视频播放器编译错误

Posted

技术标签:

【中文标题】Xamarin + Android + Binding YouTube 视频播放器编译错误【英文标题】:Xamarin + Android + Binding YouTube video player compile errors 【发布时间】:2017-03-10 11:56:48 【问题描述】:

我希望将 YouTubeandroidPlayerApi.jar 绑定到我的 Xamarin Android 项目中。我在我的 Jars 文件夹下添加了 YouTubeAndroidPlayerApi.jar,但我的项目无法编译。

错误:“不要覆盖 object.Finalize。而是使用析构函数。”

所以我尝试通过使用一个来改变它的编译方式:

<attr path="/api/package[@name='Com.Google.Android.Youtube.Player']/class[@name='YouTubeThumbnailView']/method[@name='Finalize']" name="managedName">~YouTubeThumbnailView</attr>

在 Transforms 文件夹下的 Metadata.xml 文件中...虽然它似乎没有将其更改为终结器...我继续在这里使用语法,希望我偶然发现一些有效的东西.

这是正确的方法吗?还有什么我可以做的更好的解决方案吗?我真的很想得到一些反馈。

谢谢!

【问题讨论】:

【参考方案1】:

您应该能够相当轻松地删除它。但是,&lt;attr&gt; 中的问题是您的包名/类名不正确,因为它应该遵循 Java 约定 (&lt;lowercase package&gt;.&lt;propercase class&gt;)。只需确保以下示例的情况:

前:

<remove-node path="/api/package[@name='com.google.android.youtube.player']/class[@name='YouTubeThumbnailView']/method[@name='finalize' and count(parameter)=0]" />

【讨论】:

我想我已经在路上了,谢谢!我确实有一些区分大小写的问题。感谢您的帮助!!! 如果您遇到任何其他问题,请参阅我的装订指南! gist.github.com/JonDouglas/dda6d8ace7d071b0e8cb 谢谢!我已将它添加到我的收藏夹。非常感谢您的帮助! @JonDouglas 你好.. 我的绑定也有同样的问题。我尝试了这两种情况,我得到了同样的错误。我也尝试了 remove-node 并且它抛出错误严重代码描述项目文件行抑制状态错误“javadoc-to-mdoc.exe”退出代码1。 打开一个新问题,那个错误信息说的是完全不同的东西!【参考方案2】:

如果您添加remove-node,您将删除finalizer,并且永远不会调用finalize 方法下的代码。 如果您想在析构函数中重用finalize 实现,可以将以下内容添加到您的Metadata.xml 文件中:

<!--  
    YouTubeThumbnailView class implemented a Java Finalizer. I have to implement a C# Destructor and call the finalize method.
    The C# Destructor is in the partial class under the Addition folder.
-->
<!-- I change the name of the finalizer method to avoid the conflict with java finalizer -->
<attr path="/api/package[@name='com.google.android.youtube.player']/class[@name='YouTubeThumbnailView']/method[@name='finalize' and count(parameter)=0]" name="managedName">InternalFinalize</attr>
<!-- I replace the protected override modifier with the internal modifier -->
<attr path="/api/package[@name='com.google.android.youtube.player']/class[@name='YouTubeThumbnailView']/method[@name='finalize' and count(parameter)=0]" name="visibility">internal</attr>

注意需要可见性修饰符才能删除 override 修饰符。

那么你应该在Additions文件夹下添加如下类:

namespace Com.Google.Android.Youtube.Player

    public partial class YouTubeThumbnailView
    
        ~YouTubeThumbnailView()
        
            this.InternalFinalize();
        
    

【讨论】:

以上是关于Xamarin + Android + Binding YouTube 视频播放器编译错误的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms 是 Xamarin.Android、Xamarin.IoS 和 Xamarin.Win 的简单总和吗?

xamarin android开发 两个按钮 怎么放在同一排上

抽屉布局在 Xamarin.Android.Support.Core.UI 和 Xamarin.Android.Support.V4 中都存在

无法使用 Xamarin.Android 中的 Xamarin.Mobile 组件保存联系人

将Xamarin.Android应用程序迁移到Xamarin.Forms应用程序

dotnet 5 和 Xamarin Android:找不到导入的项目“Xamarin.Android.CSharp.targets”