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

时间:2016-10-27 17:21:32

标签: android xamarin binding youtube

我希望将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文件中......虽然它似乎没有将它更改为终结器...我继续在这里使用语法,希望我偶然发现一些有效的东西

这是正确的做法吗?还有其他我可以做的是更好的解决方案吗?我真的很喜欢一些反馈。

谢谢!

2 个答案:

答案 0 :(得分:3)

你应该能够相当容易地删除它。但是,您<attr>中的问题是您的包名/类名不正确,因为它应遵循Java约定(<lowercase package>.<propercase class>)。只需确保案例如下例所示:

<强> EX:

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

答案 1 :(得分:0)

如果添加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>

N.B。需要可视性修饰符才能删除override修饰符。

然后,您应该在文件夹Additions下添加以下类:

namespace Com.Google.Android.Youtube.Player
{
    public partial class YouTubeThumbnailView
    {
        ~YouTubeThumbnailView()
        {
            this.InternalFinalize();
        }
    }
}