Cordova - android 应用程序因联系人权限而在启动时崩溃

Cordova - android app crashes at launch due to contact permission

我遇到了一个问题,我找到了原因但无法解决。

我的 cordova 应用程序在 android 8.0.0 上崩溃。我做了一个 logcat 显示该应用程序正在尝试访问联系人。

奇怪的是我没有联系人插件,也没有在我的应用程序中使用联系人。

关于 logcat,我有这个错误:

12-11 17:29:42.094 E/AndroidRuntime( 5609): java.lang.RuntimeException: java.lang.RuntimeException: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{6155964 5609:com.pierrickmartelliere.UPHAIRR/u0a210} (pid=5609, uid=10210) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS

我什么都试过了,添加了

<config-file parent="/manifest" target="AndroidManifest.xml"> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> </config-file>

对于我的 config.xml,它在构建时添加 AndroidManifest.xml 很好,但我仍然遇到错误。

我按照 here 的说明尝试了标签 uses-permissionuses-permission-sdk,但没有成功。

我的cordova-android版本是6.2.3

我还尝试了 cordova-plugin-permission,就像在 deviceready 监听器中一样:

var permissions = cordova.plugins.permissions;
    permissions.requestPermission(
      permissions.READ_CONTACTS,
      function(success) {},
      function(error) {}
    );
    permissions.requestPermission(
      permissions.WRITE_CONTACTS,
      function(success) {},
      function(error) {}
    );

但没有任何改变。应用程序在触发 "deviceready" 事件之前崩溃,因此我在运行时无法执行任何操作。

如前所述here,如果我将 targetSdkVersion 更改为低于 23(甚至 25),崩溃就会消失,但我无法将其上传到 google play,因为 play console不接受 targetSdkVersion < 26.

此外,如果我从应用程序设置中手动授权联系人访问并强制停止并重新启动该应用程序,它就可以工作。这让我发疯。

在此方面提供一些帮助将不胜感激。

感谢所有愿意花时间阅读或回答的人。

我终于在 cordova-android github 中发布了一个问题。我很快得到了答案,它是:

更新 cordova-android 到 7.1.4 !

https://github.com/apache/cordova-android/issues/606