美文网首页程序员
使用gradle使App变种,在一个项目里生成不同的变种

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

作者: Coding小学生 | 来源:发表于2018-10-26 16:46 被阅读32次

原文链接: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

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title_name">AA</string>
</resources>

b/res/values/string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title_name">BB</string>
</resources>

c/res/values/string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title_name">CC</string>
</resources>

然后在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变种,在一个项目里生成不同的变种

    原文链接:https://www.bigademo.com/2018/10/26/%E4%BD%BF%E7%94%...

  • 每周一本《天生的烦恼》书摘

    一人类种族变迁的史诗 8040 1物种之起源 一个物种,在不同的环境压力下会产生不同的变种,这种变种,就是“种族”...

  • gradle 相关

    Android Gradle Plugin指南(五)——Build Variants(构建变种版本)配置gradl...

  • Unity开发过程中用AsssetBundle还是Resourc

    Unity商业项目中都会使用AssetsBundle或者它的变种Addressable,而不使用Resources...

  • gradle task init

    gradle init task 初始化一个gradle 项目 使用 生成一个java项目gradle init ...

  • 变种

    我们每个人都活在这个人群密集的城市里,每天忙忙碌碌的生活、工作、学习,生存的压力让我们无所遁形,所以只能拼命的...

  • 变种

    变种 我改变了我的NDA,不可救药。 黑夜还好,我可以睡一觉,一到白天, 耳朵,眼珠,头发,肌肉,尾巴般的异变。 ...

  • 变种

    在莫言的《红高粱家族》一书中曾提到过变种的概念,爷爷辈的人骁勇善战,以余占鳌为首,像一匹嗜血的狼,带着桀骜不驯的野...

  • 变种

    我怎么如此幸运-重生72-戴红霞(2020-11-08) 我怎么如此幸运-变种 1.我怎么如此幸运意想不到舅舅说只...

  • Day 119. 勤奋的主妇很疲惫

    星期五 晴 今日新增2215。迄今共发现1667 总英国变种病例,48例南非变种,1例乌干达变种。尤其英国变种病...

网友评论

    本文标题:使用gradle使App变种,在一个项目里生成不同的变种

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