INSTALL_FAILED_CONFLICTING_PROVIDER


重命名 applicationId 时碰到如下问题

Installation did not succeed.
The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER.

原因

在Android中 authority 要求必须是唯一的,比如你在定义一个 provider 时需要为它指定一个唯一的 authority 。如果你在安装一个带有 provider 的应用时,系统会检查当前已安装应用的 authority 是否和你要安装应用的 authority 相同,如果相同则会弹出上述警告,并且安装失败

解决办法

定义provider地方,更改 applicationId 或者使用 ${applicationId} 代替

<provider
    android:name="xxx.Provider"
    android:authorities="${applicationId}.xxx.Provider"
    android:grantUriPermissions="true"
    android:exported="false">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

上述代码中通过 ${applicationId}.xxx.Provider 的形式来指定provider的authorities,所以该provider的authorities会根据applicationId的不同而不同,从而避免了authorities的冲突问题。

那么如何使用刚才定义的authorities呢?
我们在定义authorities是采用了 applicationId + xxx.Provider 的形式,在获取authorities的时候,我们就可以通过 包名 + fileprovider 来获取,代码如下:

public final static String getFileProviderName(Context context){
    return context.getPackageName()+".xxx.xxx.Provider";
}

文章作者: PudgeLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 PudgeLee !
评论