首页 文章

在Xamarin Android项目中绑定libaums AAR

提问于
浏览
-1

我在Visual Studio的Xamarin Android解决方案中绑定了libaums AAR . 我在here使用了 libaums-0.5.0.aar .

在编译时,我得到了2个错误,我通过将这些指令添加到我的 Metadata.xml 文件来解决:

<attr path="/api/package[@name='com.github.mjdev.libaums.fs.fat32']/class[@name='FatDirectory']/method[@name='createDirectory']" name="managedReturn">IUsbFile</attr>

<attr path="/api/package[@name='com.github.mjdev.libaums.fs.fat32']/class[@name='FatDirectory']/method[@name='createFile']" name="managedReturn">IUsbFile</attr>

然后我尝试实现libaums github上的示例来获取大容量存储设备:

UsbMassStorageDevice[] devices = UsbMassStorageDevice.GetMassStorageDevices(Global.MyActivity.ApplicationContext);

            foreach (UsbMassStorageDevice device in devices)
            {

                // before interacting with a device you need to call init()!
                device.Init();

                // Only uses the first partition on the device
                IFileSystem currentFs = device.Partitions[0].FileSystem;

                Console.WriteLine("Capacity: " + currentFs.Capacity);
                Console.WriteLine("Occupied Space: " + currentFs.OccupiedSpace);
                Console.WriteLine("Free Space: " + currentFs.FreeSpace);
                Console.WriteLine("Chunk size: " + currentFs.ChunkSize);
            }

但是在运行时我在 currentFs.Capacity 上有一个例外,它说:

没有非静态方法“Lcom / github / mjdev / libaums / fs / fat32 / Fat32FileSystem; getCapacity()J”

有任何想法吗?

1 回答

  • 0

    你是如何设法用你的元数据集编译的?我必须将以下内容添加到metadata.xml以进行编译:

    <metadata>
      <attr path="/api/package[@name='com.github.mjdev.libaums.fs.fat32']/class[@name='FatDirectory']/method[@name='createDirectory' and count(parameter)=1 and parameter[1][@type='java.lang.String']]" name="visibility">public override</attr>
      <attr path="/api/package[@name='com.github.mjdev.libaums.fs.fat32']/class[@name='FatDirectory']/method[@name='createDirectory' and count(parameter)=1 and parameter[1][@type='java.lang.String']]" name="final">true</attr>
      <attr path="/api/package[@name='com.github.mjdev.libaums.fs.fat32']/class[@name='FatDirectory']/method[@name='createDirectory' and count(parameter)=1 and parameter[1][@type='java.lang.String']]" name="managedReturn">IUsbFile</attr>
    
      <attr path="/api/package[@name='com.github.mjdev.libaums.fs.fat32']/class[@name='FatDirectory']/method[@name='createFile' and count(parameter)=1 and parameter[1][@type='java.lang.String']]" name="visibility">public override</attr>
      <attr path="/api/package[@name='com.github.mjdev.libaums.fs.fat32']/class[@name='FatDirectory']/method[@name='createFile' and count(parameter)=1 and parameter[1][@type='java.lang.String']]" name="final">true</attr>
      <attr path="/api/package[@name='com.github.mjdev.libaums.fs.fat32']/class[@name='FatDirectory']/method[@name='createFile' and count(parameter)=1 and parameter[1][@type='java.lang.String']]" name="managedReturn">IUsbFile</attr>
    </metadata>
    

    为什么?例如,如果没有这个,在转换方法后,CreateDirectory(string)具有签名 public virtual unsafe global::Com.Github.Mjdev.Libaums.FS.Fat32.FatFile CreateFile (string p0) . 但它必须是 public override unsafe IUsbFile CreateFile (string p0) . 将 final 更改为true似乎会删除虚拟修改器(似乎是一个错误?) .

    关于您的例外,您是否尝试使用较新的库? Here您可以下载0.5.5版本 .

相关问题