【问题标题】:Binding libaums AAR in a Xamarin Android project在 Xamarin Android 项目中绑定 libaums AAR
【发布时间】:2017-10-23 15:14:37
【问题描述】:

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

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

<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”

有什么想法吗?

【问题讨论】:

    标签: android xamarin bind aar


    【解决方案1】:

    您是如何设法将 aar 与您的元数据集一起编译的?我必须将以下内容添加到 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版本。

    【讨论】:

    • 我的数据集只需要我第一篇文章中的 2 行来编译并解决我遇到的异常,我必须对 libaums Java 源代码进行一些修改。我现在使用的是 libaums 0.5.2 版。
    • 您能更新您帖子中的 libaums 源代码修改吗?
    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 2017-10-10
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    相关资源
    最近更新 更多