今天公司项目APP要发布一个供产线专用的测试版,刚好之前看过一些关于“productFlavors”的内容,正好派上用场。
在app module的build.gradle中加入了productFlavors所需的相关代码
flavorDimensions "p"
productFlavors{
p1{
applicationId "com.pad.p"
}
p2{
applicationId "com.pad.p"
}
pTest{
applicationId "com.pad.product"//为了同时能安装正式版和测试版,修改成不同的APPID
}
}
在Android studio中的Build Variants工具中选择pTest后,编译运行发现安装失败,提示
Installation did not succeed.
The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER
Installation failed due to: 'null'
Retry
看到安装异常时,猜想应该是APPID冲突了,但是我在pTest中已经修改了不同的applicationId了啊;会是什么原因呢?
仔细查看了AndroidManifests.xml文件,发现有这样一段代码是需要使用applicationId的
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.pad.p.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepath" />
</provider>
上面代码中android:authorities="com.pad.p.fileprovider"这句使用到了applicationId,与其他providerFlavors中的ID冲突了
修改代码如下
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepath" />
</provider>
重新编译运行,发现已成功安装
做个记录