【问题标题】:How do I share a sqlite database between a Xamarin app and Java Android app如何在 Xamarin 应用程序和 Java Android 应用程序之间共享 sqlite 数据库
【发布时间】:2017-01-20 10:32:38
【问题描述】:

正如标题所说,我想在一个用 Java 编写的 Android 应用程序和一个使用 Xamarin 用 C# 编写的应用程序之间共享一个 Sqlite 数据库。我可以在两个 Java 应用程序 (With the help of this question) 之间成功共享数据库,但是当我在 Xamarin 中尝试相同的操作时,我收到以下错误:

Android.Database.Sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database

我认为我有两个问题。

  1. 我没有正确设置共享用户 ID。目前我将以下属性放在我的主要活动之上。

    [Register("my.user.id")]

    我尝试在 Manifest 文件中使用 android:sharedUserId="my.user.id",但这会引发错误并且不会部署到我的设备上。

  2. 我不知道应用程序的整个签名是如何工作的。因此,也许我的设备将这两个应用程序视为来自每个设备的不同发布者,并且不允许两者共享上下文。

编辑:
只是想添加我如何使用相同的证书签署两个应用程序以供将来参考。

Android 证书是正常的"C:\Users\userName\.android\debug.keystore",Xamarin 证书是正常的"C:\Users\userName\AppData\Local\Xamarin\Mono for Android\debug.keystore"。我首先构建了 Xamarin 应用程序,因此我将 debug.keystore 文件从 xamarin 文件夹复制到了 android 文件夹。 (我确信它会反过来工作,但还没有测试过)

【问题讨论】:

    标签: c# android sqlite xamarin xamarin.android


    【解决方案1】:

    Xamarin.Android 不支持SharedUserId 通过ApplicationAttribute。 (我想没有人提出过关于它的问题)

    参考:Android.App.ApplicationAttribute

    通过清单添加您的共享用户 ID,它会正常工作:

    例子:

    <application android:allowBackup="true" android:sharedUserId="com.sushihangover" android:icon="@mipmap/icon" android:label="@string/app_name"></application>
    

    注意:确保手动卸载这两个应用程序,添加sharedUserId,重新构建并重新安装这两个应用程序。

    注意:确保您对 Java 和 Xamarin 应用使用相同的签名证书。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 2014-11-03
      相关资源
      最近更新 更多