在 Xamarin Android 项目中绑定 libaums AAR



我在Visual Studio的Xamarin Android解决方案中绑定了libaums AAR。我从这里用了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有一个例外,它说:

no non-static method "Lcom/github/mjdev/libaums/fs/fat32/Fat32FileSystem;getCapacity()J"

有什么想法吗?

您是如何设法将 aar 与您的元数据集一起编译的?我不得不将以下内容添加到元数据中.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 似乎可以删除虚拟修改器(似乎是一个错误?

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

最新更新