【问题标题】:Xamarin C# .jar wrappingXamarin C# .jar 包装
【发布时间】:2016-06-03 20:10:31
【问题描述】:

我正在尝试在 Xamarin 中为 Android 的 SQLCypher 创建一个绑定,但我遇到了 4 个似乎无法克服的错误。

4 个错误是:

错误 CS0534:“BulkCursorToCursorAdaptor”未实现继承 抽象成员'AbstractCursor.GetType(int)' (CS0534) (SQLCyper)

public sealed partial class BulkCursorToCursorAdaptor : global::Info.Guardianproject.Database.AbstractWindowedCursor {

错误 CS0534:“MatrixCursor”未实现继承的抽象 成员'AbstractCursor.GetType(int)' (CS0534) (SQLCyper)

public partial class MatrixCursor : global::Info.Guardianproject.Database.AbstractCursor {

错误 CS0738:“AbstractCursor”未实现接口成员 'ICrossProcessCursor.Window'。 'AbstractCursor.Window' 无法实现 'ICrossProcessCursor.Window' 因为它没有匹配 'CursorWindow' 的返回类型。 (CS0738) (SQLCyper)

public abstract partial class AbstractCursor : global::Java.Lang.Object, global::Android.Database.ICrossProcessCursor {

错误 CS0534:“SQLiteCursor”未实现继承的抽象 成员'AbstractCursor.GetType(int)' (CS0534) (SQLCyper)

public partial class SQLiteCursor : global::Info.Guardianproject.Database.AbstractWindowedCursor 

如你所见,3 个是相似的。

我的 Xamarin 是最新的,目标平台是 Android 4.1 jellybean。

jar文件的来源是:http://www.java2s.com/Code/Jar/s/Downloadsqlcipherjar.htm

我正在尝试的另一个 jar 文件是:http://www.trojanpc.co.za/sqlcipher.jar

这是我从一个有这个 jar 的 android 项目中取出的,这个有不同的错误。

【问题讨论】:

    标签: c# jar binding xamarin xamarin.android


    【解决方案1】:

    您不必自己创建绑定。它们作为 Xamarin 组件提供。

    安卓:https://components.xamarin.com/gettingstarted/sqlcipher-for-xamarin-android

    iOS:https://components.xamarin.com/view/sqlcipher-for-xamarin-ios

    一般信息:https://www.zetetic.net/sqlcipher/sqlcipher-for-xamarin/

    或者

    我不知道链接的 jar 有多旧。所以我决定,基于最新的社区版本来构建绑定。

    我做了什么:

    1. 将 android-database-sqlcipher-3.3.1-2.aar [1] 添加到 jar 文件夹中
    2. 将它的构建动作设置为LibraryProjectZip
    3. 通过扩展元数据消除构建错误

      <metadata>
          <attr path="/api/package[@name='net.sqlcipher']/class[@name='AbstractCursor']/method[@name='getWindow' and count(parameter)=0]" name="managedReturn">Android.Database.CursorWindow</attr>
          <remove-node path="/api/package[@name='net.sqlcipher']/interface[@name='Cursor']/method[@name='getType' and count(parameter)=1 and parameter[1][@type='int']]"></remove-node>
      </metadata>
      

      这会将 Window 属性的返回值设置为 Android.Database.CursorWindow,因为接口需要它。 并删除了一个多余的getType 方法。

      1. 编译没有错误。
      2. 将其推送到 github 存储库:https://github.com/smstuebe/xamarin-sqlcipher

    我没有测试它。如果发现错误,请随时发送拉取请求。

    [1]https://bintray.com/bintray/jcenter/net.zetetic%3Aandroid-database-sqlcipher/3.3.1-2/view

    【讨论】:

    • 谢谢,但我没有 500 美元用于这些绑定,因此尝试创建自己的绑定.. 我希望我确实有 500 美元给你....
    • 好的,我在家时看看。我猜它只是一些元数据 xml 魔术和一些部分类扩展。
    • 非常感谢,希望不会占用您太多时间,问题在于他们是抽象成员,我认为..
    • 我已经仔细查看并使用了最新版本。看看我更新的答案。
    猜你喜欢
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2014-10-30
    • 2015-08-06
    • 1970-01-01
    相关资源
    最近更新 更多