1、app Gradle android下添加 productFlavors节点 和 flavorDimensions 标识。如下代码
flavorDimensions 'default'
productFlavors {
demo2 {
applicationId "com.example.noticeTest"
minSdk 21
targetSdk 31
versionCode 1
versionName "1.9"
manifestPlaceholders = [
app_icon: "@mipmap/ic_launcher",
app_name: "Test"]
}
demo {
applicationId "com.example.noticedemo"
minSdk 21
targetSdk 31
versionCode 2
versionName "1.0"
manifestPlaceholders = [
app_icon: "@mipmap/icon",
app_name: "Demo"]
}
}
2、修改manifests下 app图标和名称。如下代码
android:icon="${app_icon}"
android:label="${app_name}"
**注意:必要时需添加以下代码解决冲突
tools:replace="icon,label"
3、manifests下 修改app图标和名称后若build报如下错误:
no value for <app_icon> is provided
需要在 defaultConfig下添加如下配置:
manifestPlaceholders = [
app_icon: "@mipmap/ic_launcher",
app_name: "Demo"]
4、第三方差异化配置需要添加到 manifestPlaceholders中。如下代码
manifestPlaceholders = [
app_icon : "@mipmap/icon",
app_name : "***",
provider_name : "***",
JPUSH_PKGNAME : applicationId,
JPUSH_APPKEY : "***",//值来自开发者平台取得的AppKey
JPUSH_CHANNEL : "default_developer",]
5、provider 冲突问题,可通过添加 provider_name(如上图,名称可自取)或使用 applicationId。如下代码
<provider
android:name="cn.udesk.provider.UdeskExternalCacheProvider"
android:authorities="${applicationId}.udesk_external_cache_provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/udesk_provider_paths_external_cache" />
</provider>
<provider
android:name="cn.udesk.provider.UdeskExternalCacheProvider"
android:authorities="${provider_name}"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/udesk_provider_paths_external_cache" />
</provider>
完成以上配置已经可以实现基础的差异化打包。
特别注意:
当 manifestPlaceholders 配置的值无效,都引用是 defaultConfig下 manifestPlaceholders 的配置时,可查看自己的Gradle配置里是否添加了一下代码:
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
此时需删除此部分代码,并将 UMENG_CHANNEL_VALUE 添加到各个 manifestPlaceholders中,如下:
manifestPlaceholders = [
app_icon: "@mipmap/ic_launcher",
app_name: "Demo",
UMENG_CHANNEL_VALUE: name]