利用productFlavors实现一套代码打包多版本

app的build.gradle中

android{
    //默认配置,所有 productFlavors 都会继承 defaultConfig 中配置的属性
    defaultConfig {
        applicationId "com.myapp.ics"
        minSdkVersion rootProject.ext.android["minSdkVersion"]
        targetSdkVersion rootProject.ext.android["targetSdkVersion"]
        versionCode 3
        versionName "2.0"
        testInstrumentationRunner rootProject.ext.dependencies["androidJUnitRunner"]
        flavorDimensions "versionCode"
        javaCompileOptions {
            annotationProcessorOptions {
                includeCompileClasspath true
            }
        }
    }
    //配置多版本的apk
    // productFlavors 定义了一个应用的自定义构建版本
    //一个单一的项目可以同时定义多个不同的 flavor 来改变应用的输出。
    // productFlavors 这个概念是为了解决不同的版本之间的差异非常小的情况,通常用于区分同一个应用的不同渠道/客户等,可包含少量业务功能差别。
    // productFlavors 中的 flavor 不能跟 buildType 中的一样,否则会报: "ProductFlavor names cannot collide with BuildType names"
    productFlavors {
        releases {
            applicationId "com.yhmsi.ics.release"
            manifestPlaceholders = [app_name: "MyApp", icon: "@drawable/ic_launcher"]
            //在java代码中具体的使用方式为:context.getResources().getString(R.string.strKey);
            resValue("string", "strKey", "release版本")
//            versionName "1.0.0"
//            versionCode 1
        }
        outtest {
            applicationId "com.yhmsi.ics.test"
            manifestPlaceholders = [app_name: "MyApp2", icon: "@drawable/ic_launcher_play"]
            resValue("string", "strKey", "test版本")
        }
    }
}

在app/src目录中,创建与main同级的文件(文件名与productFlavors里的命名一样),里面可放不同环境的不同资源文件等

利用productFlavors实现一套代码打包多版本_第1张图片

在代码中判断版本

 

if(BuildConfig.FLAVOR.equals("external")){//用于判断打包的是哪个版本
}

 

你可能感兴趣的:(android)