使用gradle使App变种,在一个项目里生成不同的变种

原文链接:https://www.bigademo.com/2018/10/26/%E4%BD%BF%E7%94%A8gradle%E4%BD%BFApp%E5%8F%98%E7%A7%8D%EF%BC%8C%E5%9C%A8%E4%B8%80%E4%B8%AA%E9%A1%B9%E7%9B%AE%E9%87%8C%E7%94%9F%E6%88%90%E4%B8%8D%E5%90%8C%E7%9A%84%E5%8F%98%E7%A7%8D/index.html

前言

记得之前做过一个电梯的项目,分为监管端和客户端。两端的数据基本相同,仅仅是页面的布局和文字信息不同。当初为了省事在代码里控制了不同角色使用不同的文字和布局,现在想来耦合度很高,很不利于以后的维护。今天在《巧用gradle构建Android应用》的书中看到了,使用gradle来构建不同的变种来解决一个项目不同的体现效果。

官方文档的讲解

https://developer.android.com/studio/build/build-variants?utm_source=android-studio#product-flavors

开工

假如项目需要构建A,B,C这个不同风格的App。A端是监管端,B端是商家端,C端是用户端。使用gradle的DSL里的productFlavors来为三个不同的App进行配置

android{
    ...
    productFlavors{
        a{
            applicationId "com.bigademo.a"
        }
        b{
            applicationId "com.bigademo.b"
        }
        c{
            applicationId "com.bigademo.c"
        }
    }
}

或者使用applicationIdSuffix来简化applicationId,这样最后生成的applicationId就是applicationId + applicationIdSuffix

android{
    ...
    defaultConfig{
        applicationId "com.bigademo"
    }
    productFlavors{
        a{
            applicationIdSuffix ".a"
        }
        b{
            applicationId ".b"
        }
        c{
            applicationId ".c"
        }
    }
}

有了App的ApplicaiotnId以后,设置每个端的布局和文字,甚至代码。首先按照下图新建文件夹。


项目目录

当创建完以后会发现类似a和c文件夹的情况,都是灰色的,和main的目录文件夹图片不一样。好像只是普通的文件夹,怎么可能生成Apk呢。接下来看下图的操作。点击AS左侧的Build Varinat,然后在Build Variant的面板里选择。当选择a的时候,a的目录就变成了和main目录一样的文件夹图片了。

AndroidStudio面板

接下来就是让app变种的时候了。在a,b,c文件夹下的res下创建 values/string.xml的文件,(和main/res/values/string.xml一样),新建一个名叫title_name的string。

a/res/values/string.xml



    AA

b/res/values/string.xml



    BB

c/res/values/string.xml



    CC

然后在main/res/layout/activity_main.xml中引用@string/title_name,最后切换Build Variants中的a,b,c,当构建的时候,会发现布局文件里的文本已经发生了变化。

选择了a的变种

选择了b的变种

选择了c的变种

到这里基本的变种算是实现了,但是我们会开发版的经常碰到最低版本号多少合适的问题。试想一下,现在的手机更新换代这么快,如果是直播类的app那么使用的群体必然是80年以后的人了,手机的更新程度也应该是比较快的,所以直播类的app,一般都会把最低版本设置在5.0,或者4.4。而对于有些商家来说,只要手机能打电话,发短信,微信,日常的基本使用就行了,一般两到三年才会换手机,甚至需要更久的时间,那么,我们在设置最低版本的时候,设置在4.0,是比较合适。那么现在对a,b两个变种使用最低4.0的版本,c变种使用5.0的最低版本。

android{
    ...
    defaultConfig{
        applicationId "com.bigademo"
    }
    flavorDimensions "api","mode"
    productFlavors{
        a{
            applicationIdSuffix ".a"
            dimension "mode"
        }
        b{
            applicationId ".b"
            dimension "mode"
        }
        c{
            applicationId ".c"
            dimension "mode"
        }
        minApi14{
            dimension "api"
            minSdkVersion 14
        }
        minApi18{
            dimension "api"
            minSdkVersion 19
        }
    }
}

当gradle同步完以后,会发现在Build Variant里会发现变的更丰富了。


多变种

。那么现在可以在一个设备上安装不同类型的app了。

你可能感兴趣的:(使用gradle使App变种,在一个项目里生成不同的变种)