@[TOC]
在实际开发中,一个应用经常多个版本,如:pad(HD)版,phone(手机)版。
两个版本业务大多数是一样的,可能只是UI不一样。这样的情况下我们可以通过productFlavors 把同一个module分开不同配置产品风格。
如:
一、创建一个工程,工程有两module, goods\service
二、主工程结构
包含三个部分:main, pad, phone
app build.gradle 文件中的配置,在productFlavors配置不同的applicationId.
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
flavorDimensions "versionCode"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
pad {
applicationId "com.retail.pad"
versionName "retail_pad"
}
phone {
applicationId "com.retail.phone"
versionName "retail_phone"
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//引用module
implementation project(':module_service')
implementation project(':goods')
}
三、module 结构
包含三个部分:common, pad, phone
在主工程新建module build.gradle 文件,这样可以让所有的module引用。
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
}
//官网地址:https://developer.android.com/studio/build/build-variants?hl=zh-cn
//代码块更改 Gradle 希望为源集的每个组件收集文件的位置
sourceSets {
main {
manifest.srcFile 'src/common/AndroidManifest.xml'
java.srcDirs = ['src/common/java', '.apt_generated']
aidl.srcDirs = ['src/common/aidl', '.apt_generated']
assets.srcDirs = ['src/common/assets']
jniLibs.srcDirs = ['src/common/jniLibs']
}
pad {
manifest.srcFile 'src/pad/AndroidManifest.xml'
java.srcDirs = ['src/pad/java', '.apt_generated']
aidl.srcDirs = ['src/pad/aidl', '.apt_generated']
assets.srcDirs = ['src/pad/assets']
jniLibs.srcDirs = ['src/pad/jniLibs']
}
phone {
manifest.srcFile 'src/phone/AndroidManifest.xml'
java.srcDirs = ['src/phone/java', '.apt_generated']
aidl.srcDirs = ['src/phone/aidl', '.apt_generated']
assets.srcDirs = ['src/phone/assets']
jniLibs.srcDirs = ['src/phone/jniLibs']
}
}
// 属性创建一个“模式”风格维度以组织“完整”和“演示”产品风格,以及一个“api”风格维度以基于 API 级别组织产品风格配置:
flavorDimensions "versionCode"
//配置产品风格
productFlavors {
pad {
}
phone {
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
}
在goods\service module中引用
apply from: "../module.gradle"
四、选择你要运行的版本
五、注意事项
1、包的结构
2、 包名称要一致
service module 下
goods module 下
app 下
官网地址:https://developer.android.com/studio/build/build-variants?hl=zh-cn
源码地址:https://github.com/yylxy/productFlavorsDemo