2017年9月1日 星期三
问题描述:
Android安装 APK , 手机报错 :"该文件包与具有同一名称的现有文件包存在冲突" (如图1)

图1
通过AndroidStudio安装,LOG显示的无法安装的错误信息:(如图2)
Package couldn't be installed in /data/app/com.xxx:
Can't install because provider name com.xxx.provider is already used by com.yyy

图2
问题解决:
INSTALL FAILED CONFLICTING PROVIDER,
这个问题其实本质就是手机里已经安装有同名的Provider的APK了.
比如我在甲APP(com.xxx)中的AndroidManifest.xml中定义了一个Provider,
安装完这个甲APP,
我把代码里的ApplicationId改成com.yyy,即换皮成乙APP(com.yyy) ,
此时如果没有把Provider的android:authorities的属性也换掉,
安装乙APP到手机上,provider就会和甲APP的冲突.
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.xxx.fileprovider" <!--问题所在,Provider的名字忘记换了-->
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
所以最好使用如下写法
${applicationId}.provider
避免换皮的时候,忘记把Provider的值换掉.