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

4

我想将YouTubeAndroidPlayerApi.jar绑定到我的Xamarin Android项目中。我已经将YouTubeAndroidPlayerApi.jar添加到我的Jars文件夹中,但是我的项目无法编译。

错误:“不要覆盖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个回答

5
您应该可以很容易地删除这个。然而,在您的<attr>中,问题在于您使用了错误的包名/类名,因为它应该遵循Java约定(<小写包名>.<大写开头的类名>)。只需确保像下面的示例一样大小写正确:
<remove-node path="/api/package[@name='com.google.android.youtube.player']/class[@name='YouTubeThumbnailView']/method[@name='finalize' and count(parameter)=0]" />

我觉得现在我已经找到了正确的方法,谢谢!我之前遇到了一些大小写敏感的问题。感谢你的帮助!!! - James Scott
如果您遇到任何问题,请参考我的绑定指南!https://gist.github.com/JonDouglas/dda6d8ace7d071b0e8cb - Jon Douglas
谢谢!我已将其添加到我的收藏夹中。非常感谢您的帮助! - James Scott
@JonDouglas 你好.. 我的绑定也遇到了同样的问题。我尝试了两种情况,但是都出现了相同的错误。我还尝试了 remove-node,但它会抛出错误 Severity Code Description Project File Line Suppression State Error "javadoc-to-mdoc.exe" 退出代码为1。 - hashimks
打开一个新问题,那个错误信息完全是在说另一件事! - Jon Douglas

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>

注意:需要使用可见性修饰符来移除override修饰符。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接