Android 打包 flavorDimensions和productFlavors

flavorDimensions 的意义

flavorDimensions 从单词字面理解知道是 “风味维度”

是需要结合 “产品风味(即productFlavors)” 来一起使用的。

android {
	// 省略其他参数
	
	flavorDimensions 'ENV', "DEVICE_TYPE"
}

定义出两个维度:env和 device_type。一个参数一个维度

Android 打包 flavorDimensions和productFlavors_第1张图片

productFlavors

 productFlavors 从字面了解是“产品风味”。他需要和一个风味维度对接,否则会报错。

接着我们上面的例子,使用 productFlavors 定义维度上的风味,使用 dimension 关联。

// 创建产品风味
    productFlavors {
        horizon {
            dimension "DEVICE_TYPE"  // 关联纬度
        }
        vertical {
            dimension "DEVICE_TYPE"
        }
         beta {
            dimension 'ENV'
            buildConfigField("String","LOGIN_URL","\"https://www.beta.login.com/\"")
            buildConfigField("String","OSS_URL","\"https://www.beta.oss.com\"")
        }
        prod {
            dimension 'ENV'
            buildConfigField("String","LOGIN_URL","\"https:///www.prod.login.com/\"")
            buildConfigField("String","OSS_URL","\"https://www.prod.oss.com\"")
        }
    }

在 device_type维度上关联了两个产品,即 “horizon” 和 “vertical”

在 env         的维度上关联了两个产品,即 “beta”、“prod”

这些维度的交织就会形成最终的风味,

horizon_beta  vertical_beta  

horizon_prod  vertical_prod 

不同维度定义参数,如url,用buildConfigField

可以根据不同的风味,打出不同的apk包,便可以实现一套核心代码打出多个有些差异的包。 

Android 打包 flavorDimensions和productFlavors_第2张图片

productFlavor 的属性意义 

android {
    productFlavors{
        zincPower{
            // applicationId 应用的包名,会覆盖 defaultConfig 中的 applicationId
            // applicationId 会替换 AndroidManifest.xml 中的 manifest 标签下 package 的 value
            applicationId "com.zinc.power"
            // 会追加在 applicationId 字符串的后面,形成最终的包名。
            applicationIdSuffix '.debug'
            // 风味的维度,指定我们当前风味所所属的维度
            dimension 'version'
            配置差异化的 logo 和 app名字
            manifestPlaceholders = [
	                logo    : "@drawable/logo_bear",
	                appName : "bear",
	        ]
            // 配置签名
	        signingConfig signingConfigs.xiaopenyou
     	}
     	
    }
}

 然后在 AndroidManifest.xml 中使用,使用 ${你配置的变量名}

productFlavor 的方法意义 

buildConfigField(type, name, value)

buildConfigField('String', 'name', '"XiaoPenYou"')

buildConfigField('int', 'age', '26')

会生成

String name = BuildConfig.name;

int age = BuildConfig.age; 

你可能感兴趣的:(android,android,android,studio,java)