Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

怎么使用productFlavors和buildConfig对安卓进行灵活配置 #223

Open
soapgu opened this issue Aug 23, 2023 · 0 comments
Open

怎么使用productFlavors和buildConfig对安卓进行灵活配置 #223

soapgu opened this issue Aug 23, 2023 · 0 comments
Labels
IDE Good for newcomers JAVA This doesn't seem right 安卓 安卓

Comments

@soapgu
Copy link
Owner

soapgu commented Aug 23, 2023

  • 前言

其实productFlavors这个安卓的gradle配置特性我很早就见过了!
一只没有正式使用过。
主要的原因是不知道怎么用!
图片

  • 安卓程序配置中的几大痛点

  1. 硬件环境的差异性配置
  • 我专用的安卓的设备需要使用system签名,而安装到广大C端(手机、平板)以后必须只能用普通用户
  • root过的系统可以sdcard范围内随意存取,而没有root过的系统只能使用专用存储
  1. 后端环境的差异性配置
  • 内测环境配置一个地址
  • QA环境配置另一个地址
  • Stable环境再换一个地址
  1. Debug/Release环境的差异性代码
  • 比如我如果使用的debug包可能我需要多输出一点日志,但是我必须要屏蔽远端升级等一些专门逻辑
  • 但是到了Release环境是另外一个情况,我必须更注重程序到完整性和性能,比如一些日志就尽量不输出。
  1. 模拟器设备 vs 真机设备
  • 对于模拟器可能为了快速开发会专注UI层而“放水”通讯逻辑层
  • 而对于真机肯定使用的完整逻辑

面对这几项问题会对git产生很多“无意义”而又不得不做的git commit。
经常为了适配不同的情况去修改配置,还要反复检查。整多了就烦,难道就没有一劳永逸解决问题方法吗?

  • 救世主“productFlavors”、“buildConfig”登场

所以说productFlavors,buildConfig 常规情况下完全不需要使用,只有当你碰到配置开始“手忙脚乱”了,就可以开始考虑了

  1. 配置buildConfig

需要在app基本配置(gradle8.0后必须)

buildFeatures {
        buildConfig = true
    }

这样就会自动生成 {package}.Config类,你可以在java(generated)中看到
图片

  1. productFlavors配置
flavorDimensions "version"

productFlavors {
        dev {
            //...
        }
        qa {
            //...
        }
        stable {
            //...
        }
    }

我记得中文翻译叫“产品变体”,感觉略显生硬。
如上我针对配置了三种输出

  • dev:测试环境

  • qa:测试环境

  • stable:发布环境

  • “productFlavors”和“buildConfig”威力和联动效果

前面只是讲了配置,然而和我第一次学的时候“看上去没什么卵用”
图片
接下来讲讲具体细节和作用

  1. 资源适配的兼容
图片 配置了productFlavors以后,你增加资源的时候可以直接配置对于变种产品的专属配置 这样想象空间可以打开了
  • 专属的AndroidManifest.xml(权限、uid等等)
图片
  • 专属的app名称
图片 图片
  • 专属的界面
  1. productFlavors source sets

不仅资源可以专属,App的代码也可以这么玩,惊喜不惊喜。这样代码自由度瞬间提升
比如

我device的变体中
图片
我使用的正式的EWSRepository

但是我在模拟器输出版本中
图片
我只实现了Mock版,更关注UI的细节,算是一个“阉割版本”

  1. 感知buildtype
图片 可以看到,这样debug/release的配置就可能通过代码的方式获取,这样就可以写一些区分build type的代码逻辑了 图片

比如这样,再也不用担心内测的时候被自动更新覆盖了!
Debug直接skip,而且这样写又不会影响到发布版功能的完整性。

  1. 和 buildConfigField的梦幻组合

首先buildConfigField是什么?
说白了就是.net里面的app.config里面的appSettings。

但是和productFlavors配合使用就更爽了

图片

这样配置以后,直接可以通过BuildConfig动态获取
图片

特别注意:如果是String,要写成这样 buildConfigField("String","{field name}",""{field value}"")
这和代码自动生成有关,不深入讲了

  • 总结&参考链接

以上基本上productFlavors和buildConfig把配置中遇到的一些痛点全搞定了。看来对于一些复杂项目是必要的

这里吐槽一把,Android Stuido的IDE配置入口的链接改版了不知道去哪里了
这篇非常重要的配置文档的中文版也不知道去哪里了,英文版将就看看吧

@soapgu soapgu added 安卓 安卓 IDE Good for newcomers JAVA This doesn't seem right labels Aug 23, 2023
@soapgu soapgu changed the title 怎么使用productFlavors和buildTypes对安卓进行灵活配置 怎么使用productFlavors和buildConfig对安卓进行灵活配置 Sep 9, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
IDE Good for newcomers JAVA This doesn't seem right 安卓 安卓
Projects
None yet
Development

No branches or pull requests

1 participant