最近项目有个需求,项目分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包。
运行效果不错!