多渠道打包不是第一次接触,但今天是第一次自己去实现,特此记录一下实现过程中各种细节。
如今各种三方平台能够实现多渠道打包,那不是这篇文章涉及范围,主要讲一下通过build.gradle自己去实现的过程。首先在app下的build.gradle里面配置多渠道打包,在这里面可以动态设置每个不同渠道对应不同的包名、版本、应用名和应用图标等,先看代码:
productFlavors {
one {
applicationId ''//设置不同的包名
versionCode 0
versionName ''
manifestPlaceholders = [
app_icon:"@mipmap/****",//设置应用图标
app_name:"@string/****"//设置应用名称
]
}
two {
applicationId ''
versionCode 0
versionName ''
manifestPlaceholders = [
app_icon:"@mipmap/****",
app_name:"@string/****"
]
}
}
这里需要注意mainfestPlaceholders
结尾处的s
,我配置的时候少了这个s
,在点击snyc now
后,出现了如下的报错:
Caused by: groovy.lang.MissingPropertyException: Could not set unknown property 'manifestPlaceholder' for ProductFlavor_Decorated{name=rivamed, dimension=null, minSdkVersion=null, targetSdkVersion=null, renderscriptTargetApi=null, renderscriptSupportModeEnabled=null, renderscriptSupportModeBlasEnabled=null, renderscriptNdkModeEnabled=null, versionCode=null, versionName=null, applicationId=null, testApplicationId=null, testInstrumentationRunner=null, testInstrumentationRunnerArguments={}, testHandleProfiling=null, testFunctionalTest=null, signingConfig=null, resConfig=null, mBuildConfigFields={}, mResValues={}, mProguardFiles=[], mConsumerProguardFiles=[], mManifestPlaceholders={}, mWearAppUnbundled=null} of type com.android.build.gradle.internal.dsl.ProductFlavor.
提示没有这个属性,检查了好久才发觉少了个s
,需要注意这个地方。
改过来之后,在编译的时候又出现了如下报错:
All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
出现这个错误,是没有给渠道配置统一纬度,在defaultConfig
闭包下配置flavorDimensions "app"
即可,引号中的属性值随便取,这样上面的错误就解决了。
以上是我遇到的两个问题,至此多渠道打包就算配置好了,之后在打包的时候就能选择打包渠道了,如下:
打包渠道选择
网友评论