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
的值换掉.