java - '警告 BG8102 : Class X has unknown base type Y' warning while binding java code in xamarin

标签 java xamarin xamarin.android sdk java-binding

我目前正在尝试获取用 java(.jar 文件)编写的 SDK,以便与 Xamarin.Android 一起使用。因此,我尝试按照官方教程 (https://learn.microsoft.com/en-us/xamarin/android/platform/binding-java-library/binding-a-jar) 绑定(bind) .jar 文件。我如何摆脱警告“警告 BG8102:X 类具有未知的基类型 Y”。没有源代码?

不幸的是,我没有取得太大的成功,因为只有一小部分类可以正确绑定(bind)。我查看了控制台,看到了很多类似的警告“warning BG8102: Class Wangpos.Sdk4.Libbasebinder.IDCard has unknown base type wangpos.sdk4.libbasebinder.a.”。所有其他警告大多相同 - 只有类不同(基本类型保持不变)。我已经尝试反汇编 .jar SDK 文件,但是基类“a”似乎并没有异常。除了 java native 引用之外,没有其他引用。

分解类的一小段。


import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.os.IBinder.DeathRecipient;
import android.os.RemoteException;
import android.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

最后,由于 .jar 绑定(bind),预期结果将是在 c# 中提供完整或几乎完整的 SDK 类。

由于我是 xamarin 中 java 绑定(bind)的新手,非常感谢任何提示。

最佳答案

通常,我们会在各自的 .jar/.aar 库中看到混淆类型的特征,我们必须对它们进行去混淆处理,以便 Bindings Generator 生成各自的 C# 类型。

你可以试试这个,在你的库 - Transforms - Metadata.xml 添加:

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

关于java - '警告 BG8102 : Class X has unknown base type Y' warning while binding java code in xamarin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56776253/

相关文章:

java - 尝试动态定义布局

Java String 在此片段中创建了多少个对象

android - 如何在谷歌地图v2 android上添加像标准 map 按钮一样的按钮

android - 防止选项菜单关闭 OptionItemSelected

c# - System.IO.FileNotFoundException : On InitializeComponent caused by own control

android - 如何实现Expandablelistview子自定义布局?

java - 在实例变量和方法之前写 "this."是好还是坏风格?

java - 在不使用 ArrayList 的情况下创建一个具有原始数组重复元素的数组?

android - Xamarin.Form 元素中的 Material 主题

Xamarin Studio 更新后丢失智能感知,如何修复?