在Xamarin Android项目中绑定libaums AAR

时间:2017-10-23 15:14:37

标签: android xamarin bind aar

我在Visual Studio的Xamarin Android解决方案中对libaums AAR进行了绑定。 我使用了来自here<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>

在编译时,我通过将这些指令添加到 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); } 文件中解决了2个错误:

currentFs.Capacity

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

{{1}}

但是在运行时我在{{1}}上有一个例外:

  

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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版本。