Android绑定库:找不到类型或命名空间



我开发了一个Android绑定库来绑定打印机Android AAR文件(AAR的构建操作设置为LibraryProjectZip(,该项目使用Android 7.1、类解析Android类解析器和AndroidCodeGen Target:XAJavaInterop1编译我可以提供简单的项目,以便完全访问代码和库

但我有以下错误:"类型或命名空间"ILlibrary"在Com.Sun.Jna.Native.cs的命名空间"Com.Sun.Jna"中不存在。所以我决定使用反编译器检查Android库,以下是我发现的:

  • AAR文件包含一个接口"Library"(而非ILibrary(,Native.class文件包含一种方法,其签名如下,是错误的来源,需要一个Library对象作为输入

    public static Library synchronizeLibrary(final Library library){...}

  • C#生成的代码包含一个Com.Sun.Jna.ILibrary.cs文件,该文件包含一个公共抽象类"Library":

    [Register ("com/sun/jna/Library", DoNotGenerateAcw=true)] public abstract class Library : Java.Lang.Object {...}

    但是生成的Native.cs文件具有对应的方法SynchronizeLibrary:

    // Metadata.xml XPath method reference: [Register ("synchronizedLibrary", "(Lcom/sun/jna/Library;)Lcom/sun/jna/Library;", "")] public static unsafe global::Com.Sun.Jna.ILibrary SynchronizedLibrary(global::Com.Sun.Jna.ILibrary library) {...}

我不明白为什么C#生成的方法SynchronizedLibrary需要ILlibrary而不是Library。

我试图修改Metadata.xml文件,将类库重命名为ILibrary,但没有成功。此外,我有一个警告说:

class-parse: warning: could not load .jar entry 'libjnidispatch.jnilib': System.Argument.OutOfRangeException,

我试图使用<attr path="/api/package[@name='com.sun.jna']/class[@name='Library']" name="managedName">ILibrary</attr>将接口的名称从Library更改为ILibrary,但接口的定义没有更改。奇怪的是,我有一个接口成员的参考路径,但没有接口本身

[Register ("com/sun/jna/Library", DoNotGenerateAcw=true)]
public abstract class Library : Java.Lang.Object {
internal Library ()
{
}
// Metadata.xml XPath field reference: path="/api/package[@name='com.sun.jna']/interface[@name='Library']/field[@name='OPTION_ALLOW_OBJECTS']"
[Register ("OPTION_ALLOW_OBJECTS")]
public const string OptionAllowObjects = (string) "allow-objects";,

我不知道这是否与之前的问题有关。

感谢您的任何建议

最后,我找到了纠正错误的方法,通过在元数据文件中添加以下行来修改接口的名称:

<attr path="/api/package[@name='com.sun.jna']/interface[@name='Library']" name="name">ILibrary</attr>

但现在我有错误告诉我JNIENv不包含像NewString这样的方法。我想知道这是否与我告诉我的警告有关,它无法加载.jar条目libjnidispatch.jnilib

有什么想法,谢谢

相关内容

  • 没有找到相关文章

最新更新