Parse.com licensing with decompilation of code for binding the java libraries to C# with Xamarin
请原谅我,因为我真的不知道在哪里问这个问题,但我想这对很多人知道答案是很有帮助的。如果我不应该在这里问这个问题,请把我重定向到一个更好的网站去问。谢谢您。
不管怎样,我在很多应用程序中都使用Parse,特别是在Android和基于Web的应用程序中,它作为数据的后端。这是一个很好的服务,他们提供了很好的文档,我很喜欢。不过,我最近将Android上的原生Java转换成了XAMARIN。我很高兴发现Parse有一个Xamarin.android应用程序的现有SDK!不幸的是,我需要在SDK中没有实现的推送通知功能,但在原生Java/Android SDK中进行了文档化和维护。
因此,在阅读了关于我的问题的论坛上的每一个评论之后,我把Java和Android库从解析到Xamarin的C语言的Android绑定起来,因为这似乎是除了使用REST API之外唯一的解决方案。XAMARIN有一个很好的工具,可以将Java绑定到C语言,但是,我可能错了,我的理解是XAMARIN绑定工具必须将Java源从原生Android解析SDK反编译,通过它解析,然后在其周围创建C语言包装。
但是,如果您进入Parse的站点并查看它们的许可证,就会发现Parse的代码无法进行反编译。另一方面,当您进入Xamarin时,它们有用于解析的IOS绑定,它们似乎已经将自己绑定到C,并将其分发到Github上。而且,在Parse的论坛上,每当有人建议绑定SDK时,没有人回应说不允许绑定。
所以我的问题是:
XAMARIN如何能在不解压本地Java的情况下绑定库?
将解析/ Android SDK从Java绑定到C*并将其用于生产应用程序或分发它是合法的吗?
再次感谢!
正如我所知道的,Java绑定库没有任何内容。它创建了一个绑定项目,该项目根据声明性方法自动用C包装器包装库。它只包装公共类和方法。
下面是为您的tubeplayer生成的包装器代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | [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); |
您可以从架构描述和Java绑定描述中了解更多信息。