Android中build.gradle的productFlavors为我们提供了这样的能力。...productFlavors productFlavors包含了各种flavor包,每种flavor,我们以名字作为开头,然后在它的作用域内,加上当前flavor所属的维度。...在每个productFlavors的作用域中,我们可以对当前包,做一些设置。在上面的例子中,我们对不同国家的APK设置了不同的包名。.../gradlew assembleChinaRelease 细节用法 productFlavors除了能够改变包名,还能够根据不同的flavor改变非常多的东西。...我们可以通过ProductFlavors修改应用资源、AndroidManifest等。
文章目录 一、报错信息 二、解决方案 一、报错信息 ---- 在 build.gradle 中配置 productFlavors 后报错 ; 配置内容 : // 定义不同的开发和产品风格...productFlavors { // 开发风格 dev { // 开发时使用 minSDKVersion = 21 允许 Android Gradle
2、在build.gradle设置productFlavors 这里假定我们需要打包的渠道为小米、百度 android { productFlavors { xiaomi...manifestPlaceholders = [CHANNEL_VALUE: "baidu"] } } } 如果打包的渠道比较多我们还可以批量修改 //多渠道打包 productFlavors...{ xiaomi {} baidu {} } productFlavors.all { flavor -> flavor.manifestPlaceholders...= [CHANNEL_VALUE: name] } 所谓ProductFlavors其实就是可定义的产品特性,配合 manifest 使用的时候就可以达成在一次编译过程中产生多个具有自己特性配置的版本...名称为JPay_0.0.1_xiaomi.apk def fileName = "JPay_${defaultConfig.versionName}_${variant.productFlavors
这里我们主要用到gradle文件中的buildTypes和productFlavors,今天我们主要研究下它俩。 先上图: ?...buildConfigField:自定义全局变量,供BuildConfig中创建和调用,其格式为: buildConfigField "boolean", "LOG_DEBUG", "false" productFlavors...productFlavors顾名而思义,就是用于定义产品的特性,这是每个产品不同的地方。...设置productFlavors的方法如下: 在build.gradle中加入productFlavors结构 ? 在其中每一种产品中可定义不用的属性,已创建不同的应用。...您已经发现: 版本数=buildTypes* productFlavors 然后您就可以运行各渠道对应的应用了。
android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" /> 第二步 在 build.gradle 设置 ProductFlavors...android { productFlavors { xiaomi { manifestPlaceholders = [UMENG_CHANNEL_VALUE... xiaomi {} _360 {} baidu {} wandoujia {} } productFlavors.all... def fileName = "boohee_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors... xiaomi {} tencent {} taobao {} ... } productFlavors.all
CHANNEL_VALUE}" /> 二、在app的build.gradle的android{}中添加如下内容: android { flavorDimensions "default" productFlavors...web {} baidu {} c360 {} qq {} wandoujia {} } productFlavors.all...wandoujia { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } } } productFlavors...sourceSets.main { jni.srcDirs = [] jniLibs.srcDir "src/main/jniLibs" } productFlavors...lenovo {} leshi {} sogou {} wandoujia {} samsung {} } productFlavors.all
//多渠道打包 productFlavors{ test{} } //打包类型 buildTypes{ //debug版本 debug{} //release版本 release{} } 这里需要注意一点就是...:如果我们用了productFlavors{}属性,那咱们就不用去添加defaultConfig.versionName了,因为如果添加了,打出包的名称就会多一个versionName。...例如: 没有使用productFlavors{}情况下:AppName-1.0.0.apk 使用productFlavors{}情况下:AppName-test-release-1.0.0.apk
比如: // 多渠道打包可以用在这里配置 // 一旦配置了productFlavors,生成apk时会默认选其中一个选项 productFlavors { red { versionName...com.rustfisher.gradletest.green" // 使用另一个签名 versionNameSuffix "-green"// 版本名添加后缀 } } 资源文件 新建了productFlavors...,debug时会默认选一个选项 productFlavors { red { versionName "1.0-red" dimension...就像上面的color和price必须出现在下面4种productFlavors之中。否则会报错。...定义构建变量 给productFlavors中的类型添加资源 productFlavors { red { versionName "1.0-red" dimension
meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" / (二)在build.gradle设置productFlavors...这里假定我们需要打包的渠道为酷安市场、360、小米、百度、豌豆荚 android { productFlavors { kuan { manifestPlaceholders...{ kuan {} xiaomi {} qh360 {} baidu {} wandoujia {} } productFlavors.all {...flavor - flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } } 所谓ProductFlavors其实就是可定义的产品特性...{ kuan {} xiaomi {} qh360 {} baidu {} wandoujia {} } productFlavors.all {
那么,定义两个Flavors分别对应测试环境和生产环境,并且applicationId不同,可以如下定义: productFlavors { beta { applicationId...首先,productFlavors定义的每个渠道是会继承自defaultConfig的,就是说上面定义的beta和production都继承了defaultConfig。...然后,productFlavors每个渠道里自定义的属性会覆盖defaultConfig相应的属性,beta和production定义了applicationId,则会覆盖了defaultConfig的...这个后缀是相对于Flavors来说的,比如我们定义了一个如下的productFlavors: productFlavors { free { applicationId 'com.domain.productname.free...对于本方案二来说,并不需要再定义额外的productFlavors,使用默认的即可。
第二步: 在build.gradle设置productFlavors productFlavors { wandoujia { manifestPlaceholders =...我们可以发现,按照上面的方式写,比较繁琐,其实还有更简洁的方式去写,方法如下: android { productFlavors { wandoujia{} xiaomi...{} qq{} _360 {} } productFlavors.all { flavor -> flavor.manifestPlaceholders...= [UMENG_CHANNEL_VALUE: name] } } 其中name的值对相对应各个productFlavors的选项值,这样就达到自动替换渠道值的目的了。..."xxxx(apk的名字)-${variant.buildType.name}-${defaultConfig.versionName}-${variant.productFlavors
5.4 productFlavors {} 这个配置的作用跟 buildTypes 很类似,但它是从产品角度出发来设置不同的配置。...之所以提了 buildTypes 和 productFlavors 这两个,是因为想来讲讲,最终打包的时候,总类型的包一共是:buildTypes * productFlavors 比如在 buildTypes...但这是通常情况下的配置,如果在 productFlavors 中使用了 dimension 的话,那又是另外一种方式了。...5.5 flavorDimensions 这个是用于将 productFlavors 划分维度的,比如我们打包时不仅需要多个渠道,每个渠道还分收费版、免费版。...那么此时,传统的方法就是在 productFlavors 里对每个渠道分别去配置,比如 : android { productFlavors { googleFree {
//多渠道打包 productFlavors { yingyongbao {} huawei {} baidu {} xiaomi {}...qh360 {} } productFlavors.all { flavor - flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE...//多渠道打包 flavorDimensions "tier","minApi" productFlavors { yingyongbao { dimension...flavorDimensions "code" } productFlavors { yingyongbao {} huawei {} baidu {}...xiaomi {} qh360 {} } productFlavors.all { flavor - flavor.manifestPlaceholders
2、Flavors : 产品渠道,可以根据productFlavors,针对不同的渠道配置个性化apk 3、BuildVariants:每一个buildtype和flavor组成一个buildvariant...UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" /> 2.app的build.gradle配置 1)写法一 productFlavors...jky { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "jky"] } } 2)写法二 productFlavors...yingyongbao{} huawei{} xiaomi{} sc360{} baidu{} jky{} } productFlavors.all
//多渠道打包 productFlavors{ test{} } //打包类型 buildTypes{ //debug版本 debug{} //release版本 release{...} } 这里需要注意一点就是,如果我们用了productFlavors{}属性,那咱们就不用去添加defaultConfig.versionName了,因为如果添加了,打出包的名称就会多一个versionName...例如: 没有使用productFlavors{}情况下:AppName-1.0.0.apk 使用productFlavors{}情况下:AppName-test-release-1.0.0.apk,
&& outputFile.name.endsWith('.apk')) { def name = "qq_v${defaultConfig.versionName}_${variant.productFlavors...buildType.name}.apk" output.outputFile = new File(outputFile.parent, name) } } } //多渠道 productFlavors...tencent{ } vivo{ } oppo{ } } 修改名字的地方 def name = "xxx_${defaultConfig.versionName}_${variant.productFlavors...}_${buildType.name}.apk" xxx:为你自己的工程名,自己起的标识- 比如 wx、qq、taobao defaultConfig.versionName:版本号 variant.productFlavors...buildType.name:build方式release/debug //这么写也可以 def name= "qq"+"_"+"v"+defaultConfig.versionName+"_"+variant.productFlavors
flavor-dimension-issue 多渠道打包的细节我就不说了,参考网络上的,或者我上面的这个链接就好,下面给出一下我修改的代码(如果有其他的改法也希望能多多交流) flavorDimensions "default" productFlavors...manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } } 或者: flavorDimensions "default" productFlavors...qh360 {dimension "default"} baidu {dimension "default"} wandoujia {dimension "default"} } productFlavors.all...... dimensions) flavorDimensions 后面可以添加多个不同类型的参数例如: flavorDimensions “api”, “mode” 接下来的使用对应起来就好了: productFlavors
不同环境的设置基本都是在 productFlavors 里设置的, 而且在里面你想添加多少个环境都可以。...经测试,productFlavors 设置的不同环境包名会覆盖 defaultConfig 里面的设置, 所以我们可以推测,它执行的顺序应该是先执行默认的,然后在执行分渠道的,如果冲突,会覆盖处理,这也很符合逻辑...productFlavors { dev { resValue "string", "app_name", "dev_myapp" resValue "bool"...productFlavors { dev { buildConfigField "String", "ENVIRONMENT", '"dev"' } stage... ②在 build.gradle 设置 productFlavors productFlavors { dev { manifestPlaceholders
productFlavors { baidu {} xiaomi {} qihu360 {} yingyongbao {} huawei {} } productFlavors.all {...= null && outputFile.name.endsWith('.apk')) { def fileName = "driver_${variant.productFlavors[0].name...applicationVariants.all { variant - variant.outputs.all { outputFileName = "driver_${variant.productFlavors
多渠道打包变更 flavorDimensions "default" productFlavors { xxxx { dimension "default" } } productFlavors.all
领取专属 10元无门槛券
手把手带您无忧上云