重命名 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";
}