上一篇从技术上面,利用Gradle实现了Overlay机制。Gradle中还有一个sourceSet,可以实现更骚的操作。
需求:我们的应用,主要有三个模块,主界面模块、设置模块、商城模块,三个模块各有负责人进行开发。 新增欧洲和美洲市场,我们需要根据不同市场,进行定制开发,如欧洲市场不能有开屏广告等等。

我们最终想实现如下的效果:

也就是UI资源单独作为一个目录出现,app目录下面不包含UI资源相关的文件。并且资源文件,根据不同的渠道可以实现动态编译。

这其实是上一节Overlay机制的一个进阶,利用的是productFlavors+sourceSet相配合实现的,优点:
1.是MVP模式的重要一环,View独立出来,包括res资源和自定义控件。
2.方便开发,资源相关的直接进UI目录查看
3.方便迭代,layout或者drawable增多,导致单个目录下文件过多,不利于查看。我们可以新增AppUI、SettingUI、ShopUI等目录,对主界面UI、设置界面UI、商城界面UI进行归类。
4.方便模块化,不同模块的开发,各自维护自己模块,如商城模块,只需要关注ShopUI下的资源。

1.build.gradle配置

1.在build.gradle中,新增变量app_ui_folder,在后面会用到

2.利用productFlavors变种两个渠道

    flavorDimensions "product"productFlavors {// @Step1 新增America渠道america {dimension "product"}//  @Step2 新增Europe渠道europe {dimension "product"}}

3.使用sourceSet指定各个渠道下所指向的资源文件

sourceSets {// 基类所指向的资源main {manifest.srcFile 'AndroidManifest.xml'java.srcDirs = ['src',app_ui_folder + 'Common/src',]res.srcDirs = ['res',app_ui_folder + 'Common/res',]jniLibs.srcDirs = ['jniLibs']assets.srcDirs = ['assets']java.srcDirs = java.srcDirsresources.srcDirs = java.srcDirsaidl.srcDirs = java.srcDirsrenderscript.srcDirs = java.srcDirs}// Europe渠道指向的资源europe {java.srcDirs = [app_ui_folder + 'Europe/src',]res.srcDirs = [app_ui_folder + 'Europe/res',app_ui_folder + 'Europe/res_overlay',]resources.srcDirs = java.srcDirsaidl.srcDirs = java.srcDirsrenderscript.srcDirs = java.srcDirs}// America渠道指向的资源america {java.srcDirs = [app_ui_folder + 'America/src',]res.srcDirs = [app_ui_folder + 'America/res',app_ui_folder + 'America/res_overlay',]resources.srcDirs = java.srcDirsaidl.srcDirs = java.srcDirsrenderscript.srcDirs = java.srcDirs}debug.setRoot('build-types/debug')release.setRoot('build-types/')}

2.新增目录

2.1 Project视图下,在根目录TestGradle右键新增UI目录。
2.2 在UI目录下新增如下目录

2.3 将app目录下的res文件夹,copy至UI\AppUI\Commom目录下,作为基类res

架构-Android Studio利用 sourceSet独立出UI资源相关推荐

  1. Android Studio中进行单元测试和UI测试

    目录 在Android Studio中进行单元测试和UI测试 - 1.概述 在Android Studio中进行单元测试和UI测试 - 2.创建新的Android Studio工程 在Android ...

  2. Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容

    Android studio根据文本提取出的关键词在sqlite数据库中查找相关内容 一.介绍 二.Android studio连接.操作和查看sqlite数据库 三.在数据库中查找相关内容 四.运行 ...

  3. Android之Android Studio三种方式导入外部资源 以及 报错处理

    Android Studio三种方式导入外部资源 以及 报错处理 android studio提供了三种方式导入外部资源: 1. Library dependency – 在线添加.需联网下载 . 2 ...

  4. android 静态list,android studio 利用gradle和cmakelist生成c++静态库.a的方法总结

    android生成静态库的方法有两种,一种是编辑android.mk文件,一种是编辑cmakelist文件.前一种没做研究,因为用的ide是android studio,所以直接利用gradle调用c ...

  5. Android Studio利用host文件配置dl.google.com的国内镜像源

    国内的Android开发者,基本每隔一段时间就会碰到项目突然不能编译的情况.sdk更新.插件安装也有诸多不便,环境的折腾确实伤透了脑筋.本文主要记录下使用host配置dl.google.com的国内镜 ...

  6. 2.7、Android Studio使用翻译编辑器本地化UI

    如果你的应用支持多语言,你需要合理的管理你的翻译的string资源.Android Studio 提供了翻译编辑器来使查看和管理翻译的资源更加容易. 关于翻译编辑器 翻译后的资源在你的项目里保存在不同 ...

  7. 2.3、Android Studio使用Layout Editor设计UI

    Android Studio提供了一个高级的布局编辑器,允许你拖拽控件,在编辑XML之后可以实时预览. 在布局编辑器中,你在文字视图和设计视图直接来回切换. 在文字视图中编辑 你可以在文字视图中编辑你 ...

  8. android studio菜单自动弹出,Android实现微博菜单弹出效果

    先上Android仿微博菜单弹出效果图,这个截图不是很流畅,大家可以下载apk试一下. 说一下实现思路: 1.截取当前窗口,对图片做高斯模糊处理,将处理后的图片做popupwindow的背景图片: 2 ...

  9. Android Studio利用Build.gradle导入Git commit ID、Git Branch、User等版本信息

    文章目录 1. 前言 2. 实现方法 2.1 添加BuildConfig成员变量 2.2 实现gradle接口函数 2.3 关键部分 2.3.1 接口及接口转换 2.3.2 实现Java接口 3. 调 ...

最新文章

  1. mysql开启远程访问
  2. python集群到hadoop_如何使用Hadoop流在本地Hadoop集群中运行MRJob?
  3. java string 栈_Java堆和栈的区别(String类)
  4. js <->java 时区处理
  5. ScrollView滑动控制
  6. python机器学习之特征值处理(sklearn)
  7. 计算机中丢失msvcr100.dll怎么办,Win7计算机中Msvcr100.dll丢失的解决方法
  8. 女儿拿着小天才电话手表问我App启动流程
  9. js 拉勾网效果_js仿拉勾网首页穿墙广告效果
  10. Nunit使用(一)
  11. windows和linux快捷键
  12. element表格样式优化
  13. 找素数模板:马氏筛法【复杂度nlgnlgn】
  14. Asp.Net MVC访问数据库实现登录
  15. 天猫、京东、苏宁双11房产战事起
  16. Docker下运行Presto访问Redis及BI展示
  17. excel基础(一)
  18. vue3 baseCss 初始化
  19. split()函数的使用方法
  20. 数据库mysql中对于drop_数据库之删除表数据drop、truncate和delete的用法

热门文章

  1. [Linux From Scratch 作一个自己的Linux操作系统发行版本]一、环境准备
  2. using b tree mysql_浅析MysQL B-Tree 索引
  3. MATLAB 机器人工具箱简单教程:(下载及安装)
  4. Dijkstra算法的思想
  5. 我们无法创建新分区。【错误:0x80042468】
  6. 3D扫描建模技术应该如何学习?来来来,看这里!
  7. 微信小程序提取汉字字母大写
  8. 4-1蚁群算法(ACO)原理
  9. jit和jitx区别_JIT的核心思想是什么?
  10. 主要的数据交换格式XML与JASON