我正在使用Android SDK中的NotesList示例程序进行试验。我在程序中做了轻微的更改,但是当我安装我的编辑版本时,当我尝试在设备上已经安装原始notes程序时,我在控制台中一直得到消息INSTALL_FAILED_CONFLICTING_PROVIDER。我需要在提供者中更改什么以使其成为唯一的数据库?如果我卸载原来的notes程序,然后安装我编辑过的版本,它就可以正常工作。
当前回答
解决方案1
在物理设备而不是模拟器上运行应用程序。我遇到了这个问题,我的应用程序没有定义一个内容提供者。
解决方案2
在另一个实例中,我有一个测试应用程序安装匹配相同的applicationId。
为了解决这个问题,我必须运行。/gradlew uA - uA是uninstallAll task的缩写。
你也可以使用Gradle面板,选择导航到app\install\uninstallAll任务
如果使用模拟器,则可以擦除数据
其他回答
重命名包后可能会出现相同的错误。从AndroidManifest.xml中检查android:权威的string.xml中的值。
<provider
android:authorities="@string/content_authority"
android:name=".data.Provider"
... />
在string.xml中,该值应该与manifest中声明的包名相同。
<string name="content_authority">com.whatever.android.sunshine.app</string>
解决方案1
在物理设备而不是模拟器上运行应用程序。我遇到了这个问题,我的应用程序没有定义一个内容提供者。
解决方案2
在另一个实例中,我有一个测试应用程序安装匹配相同的applicationId。
为了解决这个问题,我必须运行。/gradlew uA - uA是uninstallAll task的缩写。
你也可以使用Gradle面板,选择导航到app\install\uninstallAll任务
如果使用模拟器,则可以擦除数据
这是显而易见的,但也要确保你没有在android中混淆了对applicationId的引用:权威。
在我的例子中,我犯了一个错误,漏掉了该死的美元符号:
android:authorities="{applicationId}.myprovider"
而不是:
android:authorities="${applicationId}.myprovider"
这不会立即导致任何错误(因为它是有效的权威名称)。但几天后,当我尝试安装一个应用程序的不同变体时,要了解错误是什么真的很痛苦,因为错误消息没有提供关于内容提供者错误的太多信息。
解决此问题的另一种方法是比较合并的清单,寻找相同的权限。
在android:authorities中列出的权限必须是唯一的。引用此属性的文档:
为了避免冲突,授权名称应该使用java风格的命名约定(例如com.example.provider.卡通提供者)。通常,它是实现提供者的ContentProvider子类的名称
遇到这个问题。
解决方法:
1 -打开AndroidManifest.xml
2 - ctrl+f查找“provider”
3 -找到提供者并更新你的根目录名。
运行项目。希望问题会得到解决!
推荐文章
- 警告:API ' variable . getjavacompile()'已过时,已被' variable . getjavacompileprovider()'取代
- 安装APK时出现错误
- 碎片中的onCreateOptionsMenu
- TextView粗体通过XML文件?
- 如何使线性布局的孩子之间的空间?
- DSL元素android.dataBinding。enabled'已过时,已被'android.buildFeatures.dataBinding'取代
- ConstraintLayout:以编程方式更改约束
- PANIC: AVD系统路径损坏。检查ANDROID_SDK_ROOT值
- 如何生成字符串类型的buildConfigField
- Recyclerview不调用onCreateViewHolder
- Android API 21工具栏填充
- Android L中不支持操作栏导航模式
- 如何在TextView中添加一个子弹符号?
- PreferenceManager getDefaultSharedPreferences在Android Q中已弃用
- 在Android Studio中创建aar文件