Android 浅谈BuildTypes

简介

buildTypes 位于模块级build.gradle文件的android{}代码块内,它是用来创建和配置构建类型的。新建一个项目在模块的buildTypes代码块中会默认生成debug和release两个版本。

代码块

这是我代码里的配置,大家可以按需所配。

/**
 *	app模块下的build.greadle
 */
android {
		//签名配置
		signingConfigs {	        
	        release {
	            、、、、、、、、、、、、、
	        }
	
	        debug {
	            、、、、、、、、、、、、、
	        }
    	}
		//构建类型配置
		buildTypes {
			//测试版本
	        debug {
	            /* 签名类型 */
	            signingConfig signingConfigs.debug
	            /* 是否开启代码混淆,默认false */
	            minifyEnabled false
	            /* 是否应该生成可调试的apk */
	            debuggable true
	            /* 混淆规则配置文件 */
	            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
	            /* 自定义buildType */
	            buildConfigField 'String', 'BASE_URL', '"http://api-debug.**/"'
	        }			
	
	        //生产版本
	        release {
	            /* 签名类型 */
	            signingConfig signingConfigs.release
	            /* 是否开启代码混淆,默认false */
	            minifyEnabled false
	            /* 是否应该生成可调试的apk */
	            debuggable false
	            /* 移除无用的resource文件 */
	            shrinkResources true
	            /* 混淆规则配置文件 */
	            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
	            /* 自定义buildType */
	            buildConfigField 'String', 'BASE_URL', '"http://api-release.**/"'
	        }  
	           
			//预生产版本
	        /* 从给定的构建类型复制所有属性 */
	        pre.initWith(release)
	        pre {
	            buildConfigField "String", "BASE_URL", "http://api-pre.**/"
	            matchingFallbacks = ['pre', 'debug', 'release']
	        }
        }  

}

如何调用自定义buildType

public static final String BASE_URL = BuildConfig.BASE_URL;

打包

在控制台输入
gradle assembleDebug
gradle assemblePre
gradle assembleRelease
会生成相应版本的apk。比如控制台输入gradle assembleRelease,会生成下图apk。
在这里插入图片描述

Android Studio 3.0 和 Gradle 3.0带来的问题。

在 Gradle 2.x 时代,如果 app 中定义了 pre 类型,而子模块中没有定义,是不会报错的。但在 Gradle 3.0 下,如果你的 app 包含了新的自定义的 buildType,而依赖库中却没有相应的自定义 buildType,则编译阶段就会报错。
解决方案一:
在子模块中同样定义一个空pre{}类型
解决方案二:
matchingFallbacks,它可以指定在子模块中没找到对应的构建类型时要加载哪个类型

看如下代码:

	//预生产版本
    /* 从给定的构建类型复制所有属性 */
    pre.initWith(release)
    pre {
        buildConfigField "String", "BASE_URL", "http://api-pre.**/"
        matchingFallbacks = ['pre', 'debug', 'release']
    }
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值