有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在xamarin中绑定java代码时出现“警告BG8102:类X具有未知的基类型Y”警告

我目前正在尝试让用java(.jar文件)编写的SDK与Xamarin一起工作。安卓因此,我正在尝试绑定。按照官方教程(https://docs.microsoft.com/en-us/xamarin/安卓/platform/binding-java-library/binding-a-jar)编写jar文件。如何在没有源代码的情况下消除警告“警告BG8102:Class X具有未知的基类型Y”

不幸的是,我并没有取得太大的成功,因为只有一小部分类能够正确绑定。我查看控制台,看到许多类似的警告“警告BG8102:Class Wangpos”。Sdk4。Libbasebinder。ID卡的基类型未知。sdk4。libbasebinder。a、 "。所有其他警告都基本相同-只是类不同(基类型保持不变)。我试过劝阻他们。JARSDK文件,但是基类“a”似乎并不寻常。除了java本机引用之外,没有其他引用

dissasembled类的一小段


import 安卓.content.Context;
import 安卓.content.Intent;
import 安卓.content.ServiceConnection;
import 安卓.os.IBinder;
import 安卓.os.IBinder.DeathRecipient;
import 安卓.os.RemoteException;
import 安卓.util.Log;
import java.util.concurrent.CountDownLatch;
import wangpos.sdk4.base.IBinderPool;


public class a
{
  private static final String a = "BaseBinder";
  public static final int BINDER_NONE = -1;
  private Context c;
  private static IBinderPool d = null;

  private static a e;
  private CountDownLatch f;
  protected boolean b = false;

  private a(Context context) {
    c = context;
    d = null;
    c();
  }


  public a() {}

  static a a(Context context)
  {
    if (d == null) {
      synchronized (a.class) {
        if (d == null) {
          e = new a(context);
        }
      }
    }
    return e;
  }

  private ServiceConnection g = new BaseBinder.1(this);
  ...
}

生成的api的相应部分。xml文件:

    <class abstract="false" deprecated="not deprecated" extends="java.lang.Object" extends-generic-aware="java.lang.Object" jni-extends="Ljava/lang/Object;" final="true" name="a" static="false" visibility="public" jni-signature="Lsdk4/wangpos/libemvbinder/a;">
      <constructor deprecated="not deprecated" final="false" name="a" jni-signature="()V" bridge="false" static="false" type="sdk4.wangpos.libemvbinder.a" synthetic="false" visibility="public">
      </constructor>
      <field deprecated="not deprecated" final="true" name="a" jni-signature="Z" static="true" transient="false" type="boolean" type-generic-aware="boolean" visibility="public" volatile="false">
      </field>
      <field deprecated="not deprecated" final="true" name="b" jni-signature="Ljava/lang/String;" static="true" transient="false" type="java.lang.String" type-generic-aware="java.lang.String" value="&quot;sdk4.wangpos.libemvbinder&quot;" visibility="public" volatile="false">
      </field>
      <field deprecated="not deprecated" final="true" name="c" jni-signature="Ljava/lang/String;" static="true" transient="false" type="java.lang.String" type-generic-aware="java.lang.String" value="&quot;debug&quot;" visibility="public" volatile="false">
      </field>
      <field deprecated="not deprecated" final="true" name="d" jni-signature="Ljava/lang/String;" static="true" transient="false" type="java.lang.String" type-generic-aware="java.lang.String" value="&quot;&quot;" visibility="public" volatile="false">
      </field>
      <field deprecated="not deprecated" final="true" name="e" jni-signature="I" static="true" transient="false" type="int" type-generic-aware="int" value="1" visibility="public" volatile="false">
      </field>
      <field deprecated="not deprecated" final="true" name="f" jni-signature="Ljava/lang/String;" static="true" transient="false" type="java.lang.String" type-generic-aware="java.lang.String" value="&quot;1.3&quot;" visibility="public" volatile="false">
      </field>
    </class>

没有对应的。将为此类生成cs文件

更新:链接到。jar SDK文件,供大家尝试:https://www.dropbox.com/sh/msy3pa65x6u1ou7/AACb0rZBo3u3g33-XuRA7U6Ca?dl=0

最后,预期的结果将是在c#中实现完整或几乎完整的SDK类可用性。罐子绑定

因为我是xamarin中java绑定的新手,所以非常感谢提供任何提示


共 (1) 个答案

  1. # 1 楼答案

    通常,我们会在各自的.jar/.aar库中看到模糊类型的特征,我们必须将它们解模糊,以便绑定生成器生成相应的C#类型

    您可以在您的库-转换-元数据中尝试这一点。xml添加:

    <attr path="/api/package[@name='{package_name}']/class[@name='{name}']" name="obfuscated">false</attr>