首页 文章

Parse.com许可用反编译代码将Java库绑定到C#和Xamarin

提问于
浏览
2

Forgive me 因为我没有't really know where to ask this question, but I assume it would be really helpful to a lot of people to know the answer. If I shouldn' t在这里问过它,请将我重定向到一个更好的网站询问它 . 谢谢 .

无论如何,所以我在很多应用程序中使用Parse,特别是在Android和基于Web的应用程序上作为数据的后端 . 这是一项很棒的服务,他们提供了很好的文档,我喜欢它 . 但是,我最近从Android上的原生java切换到带有Xamarin.Android的C# . 我很高兴地发现Parse已经为Xamarin.Android应用程序提供了现有的sdk! Unfortunately, I needed Push Notification functionality which hadn't been implemented in that sdk ,但已在Parse的原生java / android sdk中进行了详细记录和维护 .

所以在阅读Parse论坛上关于我的问题的所有评论之后, I looked into binding the java/android libraries from Parse to Xamarin's C# for Android ,因为它似乎是除了使用他们的REST API之外的唯一解决方案 . Xamarin有一个非常好的工具,可以将java绑定到C#,但是,我可能错了, my understanding is that the Xamarin binding tool must be decompiling the java source from the native android parse sdk, parsing through it, and then creating C# wrappers around it.

但是,如果您访问Parse的网站并查看其许可证,则会显示 Parse's code cannot be decompiled . 另一方面,当你进入Xamarin时,他们有Parse的iOS绑定,他们似乎已将自己绑定到C#,并且是 distributing it on Github . 另外,在Parse 's forums whenever someone suggested to bind the sdk, no one ever responded saying that it wasn'上允许 .

所以我的问题是:

Xamarin如何在不反编译原生java的情况下绑定库?

将Parse / Android sdk从java绑定到C#并在 生产环境 应用程序中使用它或分发它是否合法?

再次感谢!

1 回答

  • 3

    据我所知,Java绑定库没有反编译 . 它创建了一个绑定项目,该项目使用基于声明方法的C#包装器自动包装库 . 它只包含公共类和方法 .

    以下是为YouTubePlayer生成包装器代码的示例

    [Register ("com/google/android/youtube/player/YouTubePlayer", "", "Google.Android.Youtube.Player.IYouTubePlayerInvoker")]
    public partial interface IYouTubePlayer : IJavaObject {
    
        bool HasNext {
            // Metadata.xml XPath method reference: path="/api/package[@name='com.google.android.youtube.player']/interface[@name='YouTubePlayer']/method[@name='hasNext' and count(parameter)=0]"
            [Register ("hasNext", "()Z", "GetHasNextHandler:Google.Android.Youtube.Player.IYouTubePlayerInvoker, Google.Android.Youtube.Player")] get;
        }
    
        bool HasPrevious {
            // Metadata.xml XPath method reference: path="/api/package[@name='com.google.android.youtube.player']/interface[@name='YouTubePlayer']/method[@name='hasPrevious' and count(parameter)=0]"
            [Register ("hasPrevious", "()Z", "GetHasPreviousHandler:Google.Android.Youtube.Player.IYouTubePlayerInvoker, Google.Android.Youtube.Player")] get;
        }
    
        bool IsPlaying {
            // Metadata.xml XPath method reference: path="/api/package[@name='com.google.android.youtube.player']/interface[@name='YouTubePlayer']/method[@name='isPlaying' and count(parameter)=0]"
            [Register ("isPlaying", "()Z", "GetIsPlayingHandler:Google.Android.Youtube.Player.IYouTubePlayerInvoker, Google.Android.Youtube.Player")] get;
        }
    
        // Metadata.xml XPath method reference: path="/api/package[@name='com.google.android.youtube.player']/interface[@name='YouTubePlayer']/method[@name='addFullscreenControlFlag' and count(parameter)=1 and parameter[1][@type='int']]"
        [Register ("addFullscreenControlFlag", "(I)V", "GetAddFullscreenControlFlag_IHandler:Google.Android.Youtube.Player.IYouTubePlayerInvoker, Google.Android.Youtube.Player")]
        void AddFullscreenControlFlag (int p0);
    
        // Metadata.xml XPath method reference: path="/api/package[@name='com.google.android.youtube.player']/interface[@name='YouTubePlayer']/method[@name='cuePlaylist' and count(parameter)=1 and parameter[1][@type='java.lang.String']]"
        [Register ("cuePlaylist", "(Ljava/lang/String;)V", "GetCuePlaylist_Ljava_lang_String_Handler:Google.Android.Youtube.Player.IYouTubePlayerInvoker, Google.Android.Youtube.Player")]
        void CuePlaylist (string p0);
    
        // Metadata.xml XPath method reference: path="/api/package[@name='com.google.android.youtube.player']/interface[@name='YouTubePlayer']/method[@name='cuePlaylist' and count(parameter)=3 and parameter[1][@type='java.lang.String'] and parameter[2][@type='int'] and parameter[3][@type='int']]"
        [Register ("cuePlaylist", "(Ljava/lang/String;II)V", "GetCuePlaylist_Ljava_lang_String_IIHandler:Google.Android.Youtube.Player.IYouTubePlayerInvoker, Google.Android.Youtube.Player")]
        void CuePlaylist (string p0, int p1, int p2);
    
        // Metadata.xml XPath method reference: path="/api/package[@name='com.google.android.youtube.player']/interface[@name='YouTubePlayer']/method[@name='cueVideo' and count(parameter)=1 and parameter[1][@type='java.lang.String']]"
        [Register ("cueVideo", "(Ljava/lang/String;)V", "GetCueVideo_Ljava_lang_String_Handler:Google.Android.Youtube.Player.IYouTubePlayerInvoker, Google.Android.Youtube.Player")]
        void CueVideo (string p0);
    

    您可以从architecture descriptionjava binding description了解更多信息

相关问题