美文网首页
Android 实现差异化打包,并根据productFlavor

Android 实现差异化打包,并根据productFlavor

作者: Sakumi | 来源:发表于2019-07-29 16:31 被阅读0次

    手头的项目有个需求,需要生成两个apk,实现部分不同的功能,本想拉个分支,项目组长说可以了解下差异化打包,于是学习了一下~
    一、在app -> build.gradle的android标签中配置productFlavors

    productFlavors{
            project1{
            }
            project2{
            }
        }
    

    这里还可以配置不同的包名,应用名,图标,参数:

    productFlavors{
            project1{
                    applicationId "com.demo.project1"
                    manifestPlaceholders = [APP_NAME: "project1" ,ICON: "@mipmap/ic_launcher_project1"]
                    buildConfigField "boolean" , "IS_PROJECT1","true"
            }
            project2{
                    applicationId "com.demo.project2"
                    manifestPlaceholders = [APP_NAME: "project2" ,ICON: "@mipmap/ic_launcher_project2"]
                    buildConfigField "boolean" , "IS_PROJECT2","false"
            }
        }
    

    如果设置了manifestPlaceholders,需要在AndroidManifese.xml的application标签下配置

    android:label="${APP_NAME}" android:icon="${ICON}"。
    

    另外,我在同步gradle的时候遇到了一个error:

    Error:All flavors must now belong to a named flavor dimension。
    

    在网上找到了一个解决方法,在defaultConfig种加一句flavorDimensions "versionCode":

    defaultConfig {
            applicationId "com.xxx.xxxx"
            minSdkVersion xx
            targetSdkVersion xx
            versionCode xx
            versionName xxxxxxx
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            //版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了
            flavorDimensions "versionCode"
        }
    

    二、代码的差异化:

            //  根据编译的包来实现不同功能
           if (BuildConfig.FLAVOR.equals("project1")) {
                //your code
            } else {
                //your code
            }
    

    三、修改apk的名字

                applicationVariants.all { variant ->
                    variant.outputs.each { output ->
                        def type = ""
                        if (output.name == 'debug') {
                            type = "_debug"
                        }
                        def fileName = "project_V${defaultConfig.versionName}${type}_${productFlavors[0].name}.apk"
                        output.outputFileName = fileName
                    }
                }
    

    这样就可以打包出不同的apk啦。

    相关文章

      网友评论

          本文标题:Android 实现差异化打包,并根据productFlavor

          本文链接:https://www.haomeiwen.com/subject/pmubrctx.html