【问题标题】:Xamarin + Android + Binding YouTube video player compile errorsXamarin + Android + Binding YouTube 视频播放器编译错误
【发布时间】: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 文件中...虽然它似乎没有将其更改为终结器...我继续在这里使用语法,希望我偶然发现一些有效的东西.

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

谢谢!

【问题讨论】:

    标签: android xamarin binding youtube


    【解决方案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();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 2014-05-01
      • 2012-12-14
      • 1970-01-01
      • 2017-04-11
      相关资源
      最近更新 更多