当我在Xamarin.Android项目上并使用Java绑定库时,我几乎总是会遇到一些警告.我收到以下警告:
7>BINDINGSGENERATOR : warning BG8800: Unknown parameter type
System.Xml.XmlReader in method CreateFromXml in managed type Android.Content.Res.ColorStateList.
7>BINDINGSGENERATOR : warning BG8800: Unknown parameter type
System.Xml.XmlReader in method CreateFromXml in managed type Android.Content.Res.ColorStateList.
7>BINDINGSGENERATOR : warning BG8800: Unknown parameter type
System.Xml.XmlReader in method ParseBundleExtras in managed type Android.Content.Res.Resources.
7>BINDINGSGENERATOR : warning BG8800: Unknown parameter type
System.Xml.XmlReader in method CreateFromXml in managed type Android.Graphics.Drawables.Drawable.
7>BINDINGSGENERATOR : warning BG8800: Unknown parameter type
System.Xml.XmlReader in method CreateFromXml in managed type Android.Graphics.Drawables.Drawable.
7>BINDINGSGENERATOR : warning BG8800: …Run Code Online (Sandbox Code Playgroud) 我通过名为Xamarin.GradleBinding的visual studio扩展创建了java绑定库.我添加了ru.rambler.android:swipe-layout:1.0.14包,并在使用它时SwipeLayout,一切正常.但不幸的是,它没有创建相应的C#类或类似的东西.我尝试手动添加包但仍然没有.
我检查了GitHub上的源代码.SwipeLayout有一个没有参数的public void方法reset():
public void reset()
Run Code Online (Sandbox Code Playgroud)
我尝试从c#中调用此方法JNIEnv.
IntPtr type = JNIEnv.FindClass("ru/rambler/libs/swipe_layout/SwipeLayout");
IntPtr method = JNIEnv.GetMethodID(type, "reset", "()V");
try
{
JNIEnv.CallObjectMethod(_swiper.Handle, method);
}
catch (Exception ex)
{
var s = ex.Message;
}
Run Code Online (Sandbox Code Playgroud)
已成功找到类型和方法,但正在调用
JNIEnv.CallObjectMethod(_swiper.Handle, method);
Run Code Online (Sandbox Code Playgroud)
这个方法崩溃了应用程序,它甚至没有进入catch块.
Tt必须是_swiper.Handle第一个参数的原因.
_swiper字段是类型,ViewGroup因为SwipeLayout派生自ViewGroup.我找不到如何获取视图的指针来传递该方法.
在调试时,当我调查时_swiper,它似乎是正确的实例SwipeLayout
有人在他们的Monodroid应用程序中导入了这个滑动菜单项目https://github.com/jfeinstein10/SlidingMenu吗?
我在新的JavaLibraryProject中导入了jar文件(com.slidingmenu.lib.slidingmenuactivity.jar).
我创建了一个从SlidingActivity扩展的新活动.
我的项目构建没有任何错误,但在运行时我得到此异常
Java.Lang.NoClassDefFoundError: com.slidingmenu.lib.R$layout
Run Code Online (Sandbox Code Playgroud)
上
base.OnCreate(bundle)
public class MainActivity : SlidingActivity
{
public override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle); //The EXCEPTION is thrown here
SetContentView(Resource.Layout.activity_main);
}
public override void SetBehindContentView(int p0)
{
base.SetBehindContentView(p0);
}
}
Run Code Online (Sandbox Code Playgroud)
任何人的想法?谢谢 :)
编辑
好.我做了一点修改:
我已将"assets","bin"和"res"文件夹添加到我在AndroidJavaLibrary项目中添加的".zip"文件中.
它编译得很好,但现在我在同一行上得到另一个错误:
Android.Views.InflateException: Binary XML file line #2: Error inflating class com.slidingmenu.lib.SlidingMenu
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个Xamarin Java绑定到Spotify Android SDK.SDK现在分为两部分,一部分用于身份验证,另一部分用于播放器.以前的java绑定工作,然而,秒给我一个错误.
最初的问题是在Xamarin论坛上提出的.
嗨,
我正在尝试为Spotify Android SDK创建一个绑定项目.
SDK分为两个.aar文件.一个用于身份验证,一个用于媒体播放(播放器).首先,我尝试在一个绑定项目中同时使用.aar文件,但是忽略了Player.aar.然而,将它移动到它自己似乎工作.
现在,我的问题是有关Java接口NativePlayerNotificationCallback,其产生的IPlayerNotificationCallback(因此缺乏OG通知),但在播放器类它试图实现:global::Com.Spotify.Android.Player.INativePlayerNotificationCallback.
我INativePlayerNotificationCallback在反编译文件中找不到其他提及.只有IPlayerNotificationCallback.
我知道这有点难以想象.以下是JD-GUI中的java类文件:

生成的文件列在这里:

在Com.Spotify.Sdk.Android.Player.IPlayerNotificationCallback.cs文件中:

而错误信息本身
错误CS0234:namespaceCom.Spotify.Sdk.Android.Player中不存在类型或命名空间名称INativePlayerNotificationCallback'.你错过了装配参考吗?

我真的很感激任何有关如何使其工作的见解.在我看来,界面的命名有一些不一致,但我不确定.
感谢你帮忙,弗雷德里克
我正在为包含单个类的现有JAR创建Xamarin Android绑定库,并遵循Xamarin绑定库文档,可以使用以下方法成功重命名名称空间:
<attr path="/api/package[@name='com.company.blah']" name="managedName">Company.Blah</attr>
Run Code Online (Sandbox Code Playgroud)
我还确认了obj / Debug文件夹中生成的类中的名称空间已更改:
namespace Company.Blah {
// Metadata.xml XPath class reference: path="/api/package[@name='com.company.blah']/class[@name='NativeClass']"
[global::Android.Runtime.Register ("com/sprylab/android/widget/TextureVideoView", DoNotGenerateAcw=true)]
public partial class NativeClass
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我面临两个问题:
NativeClass从示例Android项目中引用。好像根本看不到名称空间。绑定项目成功构建,没有错误。如果删除包名称空间重命名设置,它也将成功构建,然后可以在示例项目中引用它,但它要求我在使用该名称的任何地方完全限定类名:
private com.company.blah.NativeClass nativeClass;
我希望如果我能修复#1,那么#2将不会再次出现。如果是这样,我也很好奇您如何阻止显示完全合格的类名?
我们使用几种不同类型的Ad网络来编写自己的Java绑定.由于Google已经制作了新的"广告"ID,因此所有这些图书馆现在都依赖于Google Play服务.
问题是,在获得最新版本后,我无法正确构建这些绑定项目.我收到有关缺少类的错误,除非将google-play-services.jar(从extras我的Android SDK中的文件夹)添加Reference Jar到项目中.
添加播放服务jar文件后,我收到一个新错误:
missing class error was raised while reflecting com.somepackage.SomeClass : com/google/android/gms/common/GooglePlayServicesRepairableException : Unsupported major.minor version 51.0 JARTOXML
Run Code Online (Sandbox Code Playgroud)
这个错误通常意味着库正在使用Java 7(Xamarin不支持).我该怎么做才能修复这些绑定项目?