Android开发过程中,经常需要根据不同的需求在同一个应用中实现不同的逻辑或使用不同的资源。比如,在不同的渠道中需要使用不同的图标或logo,在不同的版本中需要使用不同的接口地址,而且这些变化需要在构建时进行配置,因此Android引入了Sourcesets多变体构建的概念。
一、Sourcesets概述
Sourcesets简单来说就是在同一个应用中区分不同变量的组合。在Android开发中,Sourcesets包括了代码源文件、资源文件和Manifest文件等应用程序的全部组成部分。
一个Sourcesets包含了由编译器使用的代码、资源和生成的文件的集合。Sourcesets命名采用如下命名规则:
sourceSet {
name {
manifest.srcFile 'file path'
java.srcDirs = ['dir path']
resources.srcDirs = ['dir path']
aidl.srcDirs = ['dir path']
res.srcDirs = ['dir path']
assets.srcDirs = ['dir path']
}
}
其中,name是自定义的变体名称,manifest、java、resources、aidl、res、assets都是Sourcesets中可以包含的文件类型,可以在每个变量中添加或删除需要包含的文件。
二、Sourcesets的使用
1. Sourcesets的创建
使用gradle来创建Sourcesets非常简单。首先,在buildTypes中添加一个自定义变体:
buildTypes {
release {
minifyEnabled false //是否混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
customType { //自定义变体
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
然后,在productFlavors中添加需要的变体名称:
productFlavors {
googleplay {
applicationIdSuffix ".googleplay" //设定应用ID后缀
versionCode 1
versionName "1.0-googleplay"
}
taobao {
applicationIdSuffix ".taobao"
versionCode 1
versionName "1.0-taobao"
}
}
这样我们就创建了两个productFlavor,分别是googleplay和taobao。然后可以在每个productFlavor中定义相关文件。
2. Sourcesets的使用
在Android Studio中,可以通过如下方式来使用Sourcesets:
- 打开app/build.gradle文件
- 选择左侧菜单中的"Build Variants";
- 在变体的下拉列表中选择一个变体,如googleplayDebug;
- 同步gradle并运行应用程序。
在使用Sourcesets中,可以使用默认变量或自定义变量。如果不使用自定义变量,可以在defaultConfig中添加下面这些配置:
defaultConfig {
applicationId "package-name"
minSdkVersion 15
targetSdkVersion 29
versionCode 1
versionName "1.0"
// 设定默认资源常量值
buildConfigField "String", "API_BASE_URL", "\"https://www.example.com/\""
resValue "string", "app_name", "Best App"
}
三、Sourcesets的优势
1. 渠道包定制
当开发者需要为多个平台制作apk时,就需要使用到渠道包。渠道包即按照具体的渠道制作的apk包,每个apk包含有对应的渠道号码。
渠道包定制使用Sourcesets可以实现简单的配置即可,开发者无需修改代码,即可轻松打包并发布不同的apk版本了。
2. 支持多种版本
通过Sourcesets来构建多种版本,开发者可以轻松地支持多种不同的版本,如灰度版本、正式版本和测试版本等等。
使用Sourcesets,开发者可以轻松构建多种版本,而且可以根据版本需求来定制资源、java源码和清单文件等,不会对已有的其他版本产生影响。
3. 方便维护
Sourcesets可以提高应用程序的维护一致性。因为它能够明确的分离出应用程序的不同部分,并且在每个部分中都给予开发者充分的空间进行自定义开发。
此外,Sourcesets还可以轻松地管理应用程序资源,并且可以使应用程序的维护变得更加容易,当应用程序资源发生变化的时候,可以通过Sourcesets轻松实现变化。
四、总结
我们学习了Sourcesets多变体构建的概念、使用方法以及优势。使用Sourcesets,可以方便地构建和发布多种版本的应用程序。此外,它还可以提高应用程序的维护一致性,使应用程序开发更加容易。
Sourcesets可以让你轻松定制apk,不同的渠道包可以有不同的资源和配置,并且不会对其他包有任何影响。
如果你希望在开发过程中轻松地发布不同版本的应用程序,那么Sourcesets是一个非常值得学习的开发工具。