android plugin dsl 部分整理
最基本的build.gradle
apply plugin: 'com.android.application'android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { minSdkVersion 8 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { debug {signingConfig signingConfigs.myConfig} release {signingConfig signingConfigs.myConfig //修改apk生成文件名称 def today = new Date() if (variant.buildType.getName().equals("release")) { println "Change output apk name" variant.outputs.each { output -> output.outputFile = new File( output.outputFile.parent, output.outputFile.name.replace(".apk", "-" + defaultConfig.versionName + "-" + today.format('yyyyMMdd') + ".apk")) } }} } flavorDimensions("free", "channel") //productFlavors 必须指定对应dimension productFlavors { free {dimension "free"} vip {dimension "free"} huawei {dimension "channel" applicationId "huawei"} xiaomi {dimension "channel" applicationId "xiaomi"} } //buildTypes 加flavorDimensions加productFlavors 最多可生成对应版本为彼此数量相乘2*2*2}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:19.0.1'}
BuildVariants
Gradle的Android插件中有个BuildVariants的概念,其实简单来说其实就是buildTypes+productFlavors,buildType主要就是debug和release的分别。而productFlavors就是我们用来打包不同版本app的主要方式。从字面意思来翻译指的就是不同的“产品特点”。
productFlavors可以是多维的,flavorDimensions定义了2个纬度productFlavors中对应每个纬度有2个对应的productFlavor所以可以组合成2*2=4种组合。例如:vipxiaomi,viphuawei,freexiaomi,freehuawei这4个版本。
有的时候我们每个flavor可能不只是一个渠道名这么简单,我的ICON可能给每个渠道的有所不同,我的包名也可能有所不同。所有这些,都可以直接在这个flavor中重新定义,如果需要不同的源代码或资源文件,可以在app/src下新建一个名为“flavor名”的目录(比如xiaomi)。也就是app/src/xiaomi,然后这个目录下的结构和app/src/main中是一样的,打包的时候会优先使用当前flavor下的文件。
Manifest 占位符
有些SDK会把配置在Manifest文件中的meta信息里,而不同的flavor这个信息不一样,这是我们可以通过Manifest 占位符来实现
mainfest.xml片段 build.gradle片段android { productFlavors { xiaomi{ applicationId "xiaomi" manifestPlaceholders = [UMENG_APPKEY: "我的友盟KEY"] } }}
Android Studio会为我们生成一个名叫BuildConfig的类,这个类有一些关于打包的静态变量,例如freexiaomidebug
public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); public static final String APPLICATION_ID = "xiaomi"; public static final String BUILD_TYPE = "debug"; public static final String FLAVOR = "freexiaomi"; public static final int VERSION_CODE = 1; public static final String VERSION_NAME = "1.0"; public static final String FLAVOR_free = "free"; public static final String FLAVOR_channel = "xiaomi";}
refer:http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.ProductFlavor.html
http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.BaseExtension.html#com.android.build.gradle.BaseExtension:productFlavors
转载于:https://my.oschina.net/u/3959225/blog/1942026
更多相关文章
- Android 读取本地txt文件和写入txt文件到本地
- android > SDcard读写文件
- Android APP 版本更新通知代码
- android xml文件操作
- android 操作文件
- Android版本及API等级关系
- 【有图】android通过jdbc连接mysql(附文件)