当前位置: 首页 > 工具软件 > gradle-doctor > 使用案例 >

Gradle productFlavors功能初体验

姚建树
2023-12-01

最近项目有个需求,项目分2个端,一个医生端,一个病人端,功能大概是医生端基本能覆盖病人端的功能,病人端会包含部分功能。

需满足能同时安装、且医生端横屏、病人端竖屏。

前一段时间复习了一下Gradle,所以想了下,Gradle可以轻松实现该需求。

最初想到的是 buildTypes,实际也可以实现,但后面看到 productFlavors更合适(ci/cd编译打包命令不需要修改)。

于是加了两个flavors

productFlavors{
    doctor{
          applicationId "com.lerous.test" //这个可不配置,默认同AndroidManifest.xml中app
    }

    patient{
          applicationId "com.lerous.test.patient"
    }
}

最开始是在代码中判断是哪一个flavors,然后动态设置横竖屏,但是这样会有个切换动作,体验不太好,

于是想到配置源集,在源文件src目录下,加一个跟main并列的patient文件夹,这样可以加一个AndroidManifest.xml

可以选择替换你想替换的属性,比如应用名称,横竖屏配置,实例如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.lerous.test">

    <application
        android:name=".app.MainApplication"
        android:label="@string/patient_app_name"
        tools:replace="android:label"
        tools:ignore="AllowBackup">
        <activity
            android:name=".app.main.MainActivity"
            android:screenOrientation="portrait"
            tools:replace="android:screenOrientation" />
        <activity
            android:name=".app.auth.LoginActivity"
            android:screenOrientation="portrait"
            tools:replace="android:screenOrientation" />

        <activity
            android:name=".app.splash.SplashActivity"
            android:screenOrientation="portrait"
            tools:replace="android:screenOrientation" />
    </application>

</manifest>

然后测试运行的时候,可以打开BuildVariants,可以选择要运行哪个版本。

另外ci/cd持续集成里面,assembleRelease指令会自动打2个release包。

运行效果不错!

 类似资料: