Android productFlavors 使用

@[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

你可能感兴趣的:(Android productFlavors 使用)