正如标题所说,我想在使用Xamarin编写的用Java编写的Android应用程序和用C#编写的应用程序之间共享Sqlite数据库。我可以在两个Java应用程序(With the help of this question)之间成功共享数据库但是当我在Xamarin中尝试相同的操作时,我收到以下错误:
Android.Database.Sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
我想我有两个问题。
我没有正确设置Shared UserId。目前,我将以下属性置于主要活动之上。
[Register("my.user.id")]
我尝试使用清单文件中的android:sharedUserId="my.user.id"
,但这会导致错误并且不会部署到我的设备。
我不知道整个应用程序的签名是如何运作的。因此,我的设备可能会将这两个应用视为来自不同发布商的每个设备,并且不允许这两个应用共享上下文。
编辑:
只是想添加我如何使用相同的证书签署这两个应用程序以供将来参考。
Android证书是"C:\Users\userName\.android\debug.keystore"
,而且"C:\Users\userName\AppData\Local\Xamarin\Mono for Android\debug.keystore"
中的Xamarin证书是noramlly。我首先构建了Xamarin应用程序,因此我将debug.keystore文件从xamarin文件夹复制到了android文件夹。 (我相信它会相反,但还没有测试过它)
答案 0 :(得分:2)
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应用程序使用相同的签名证书。