calces-gradle-plugin

Introduction: Android componentized automatic build script
More: Author   ReportBugs   
Tags:

Material Render Phone

Calces

🍭wow Android 辅助构建工具,机械性工作交给我来处理,把时间用在更有价值的工作上。

compnent version screen version AppConfig Modules Modules Author Gradle Gradle

介绍

Android 构建工具包,这个工具的主旨是使用脚本自动处理机械化的重复劳动,让开发者专注更有价值的工作。 目前提供自动组件化控制与屏幕适配插件。

  • 组件化构建 Gradle 插件 插件包的名字叫: component,其中提供了两个组件化辅助插件,分别叫 calces.appconfig 和 calces.modules。 主要的功能是: 提供 Gradle 配置 App 依赖的组件、配置组件是否能单独运行、实现多个依赖不同模块的 App 同时构建等。
  • 屏幕适配插件 组件包的名字叫: screen,其中提供了 calces.screen 插件 主要功能是: 根据设计稿与配置,自动生成 smallestWidth 适配文件,让你从此不需要再关注屏幕适配。

教程

  • 组件化插件

Gradle 自动实现 Android 组件化模块构建

  • 屏幕适配插件

给你一个全自动的屏幕适配方案(基于 SW 方案)!—— 解放你和 UI 的双手

功能介绍

自动组件化构建插件

  • 根据 Gradle 配置,自动实现 Android 组件的构建模式(application or library)
  • 可配置多个依赖不同组件的 App
  • 自动要依赖需要的组件
  • 自动配置组件独立运行(被依赖)时的 AndroidManifest 文件格式,即独立运行时自动配置启动 Activity

屏幕适配插件

  • 根据 Gradle 配置,自动生成你需要的 smallestWidth 适配文件
  • 自动压缩位图

快速开始

自动组件化构建插件

  1. 引入依赖库 在 Gradle 2.1 及更高版本的插件构建脚本代码: 在项目的 build.gradle 中

    buildscript {
        ...
    }
    plugins {
      id "calces.appconfig" version "3.3.0-alpha01"
    }
    

在较旧版本的 Gradle 中或需要动态配置的情况下的插件构建脚本代码:

      buildscript {
        repositories {
          maven {
            url "https://plugins.gradle.org/m2/"
          }
        }
        dependencies {
          classpath "gradle.plugin.com.tangpj.tools:component:3.3.0-alpha01"
        }
      }

      apply plugin: "calces.appconfig"
  1. 在项目 build.gradle 配置 AppConfig

    ```groovy appConfig {

    debugEnable true
    apps {
        app1 {
            mainActivity "com.xxx.MainActivity1"
            modules ':modules1',
                    ':modules2'
        }
    
          app2 {
            mainActivity "com.xxx.MainActivity2"
            modules ':modules1'
        }
    }
    
    modules {
        modules1 {
            applicationId "com.xxxx.modules1"
            mainActivity ".Modules1Activity"
            isRunAlone true
        }
    
         modules2 {
            applicationId "com.xxxx.modules2"
            mainActivity ".Modules2Activity"
            isRunAlone true
        }
    }
    

    }




3. 在 modules(子模块)引入模块自动化构建插件 (注意:不需要手动配置 com.android.library 或 com.android.application)

   ```groovy
   apply plugin: 'calces.modules'

屏幕适配插件

  1. 引入依赖库 在 Gradle 2.1 及更高版本的插件构建脚本代码: 在项目的 build.gradle 中

    buildscript {
        ...
    }
    plugins {
      id "calces.screen" version "1.3.4-alpha01"
    }
    

在较旧版本的 Gradle 中或需要动态配置的情况下的插件构建脚本代码:

      buildscript {
        repositories {
          maven {
            url "https://plugins.gradle.org/m2/"
          }
        }
        dependencies {
          classpath "gradle.plugin.com.tangpj.tools:screen:1.3.4-alpha01"
        }
      }

      apply plugin: "calces.screen"
  1. 在需要适配的组建上 build.gradle 配置 Screen 值
    screen{
     auto true
     dimens{
         designPx 375
         smallesWidths 360,480
         scale 3            //保留小数位,默认为 2
         scaleMode BigDecimal.ROUND_HALF_UP  //小数保留的方式
     }
    }
    

auto 是用来确认是否需要自动生成 sw 文件的,会影响编译时间,如果 values 没有更新的话建议设置为 false。 除此之外,可以通过手动调用 gradle 任务来手动生成 sw 文件。

演示

Android-advanced-blueprint

该开源项目包含了笔者关于 Android 进阶系列教程的示例代码,其中 TodoCalces 是该构建脚本的 Demo。

属性介绍

自动组件化构建插件

AppConfig

  • debugEnable, 布尔值 是否开个 debug 模式,只有当 debugEnbale 为 true 时,modules 的 isRunAlone 才能生效。即 modoules 只能在 debug 模式中独立启动

  • apps, String 列表 app 列表,控制当 debug 模式为 false 时的 app 数量与基础配置

  • modules, String 列表 组件列表,配置需要实现自动组件化控制的组件列表

App(apps 里面的配置项)

  • name, String 类型 app 的名字,需要和项目路径对应,如果不填写默认为该配置的名字(如配置名为 app 的话,name 则为:name)。导入规则和 setting.gradle 中的 include 规则保持一致
  • modules, String 列表 需要依赖的组件列表,通过修改该属性实现依赖不同的组件
  • dependMethod, String 类型 依赖的方法,默认为 implementation,一般不需要配置该字段,除非有特殊需求
  • applicationId, String 类型 动态填入 applicationId。非特殊情况,建议为空
  • applicationName, String 类型 配置启动 Application(对应 manifest 中的 application name 属性)
  • mainActivity, String 类型 配置启动 Activity,为空则默认为 AndroidManifest 中的 Activity。非特殊情况,建议为空

Modules(modules 里的配置项)

  • name, String 类型 与 app 中的 name 一致
  • isRunAlone, 布尔值 该组件能否独立启动
  • applicationId, String 类型 独立启动时的 applicationId

  • applicationName, String 类型 配置启动 Application(对应 manifest 中的 application name 属性)

  • mainActivity, String 类型 独立启动的 Activity

屏幕适配插件

dimens( 自动化 Sw 屏幕适配方案配置 )

  • dimensFileName, String 类型 待转换 dimensions 文件名,默认为 dimens(/res/values/dimens.xml)
  • designPx, int 类型 设计稿 width 的 px 值,默认为 375。需要根据设计稿的实际 width 值来确定
  • scale, int 类型 保留小数位, 需要手动设置 scaleMode 值才会生效
  • scaleMode, int 类型 取整方式,和 BigDecimal 的 Sacle 值一致,这里需要注意的是,必须要设置 scaleMode 值,scale 才会生效。 不设置的话,默认保留小数位,会把转换后的 dp 四舍五入成 int 值。
  • auto, 布尔值 是否自动启动转换任务,设置为 false 可以避免每次构建时自动检查是否转换 如果设置为 false 需要手动启动任务,任务名称为 dimensCovert 启动方法:./gradlew dimensCovert
  • smallestWidths, int 列表 需要适配的 sw 值

mipmap( 图片资源自动适配指定密度 )

  • folder, String 类型 待转换资源文件夹的文件夹名字,默认为 mipmap,如果图片资源保存在 drawable-xxx 文件夹下,则设置为 drawable
  • designDensity, String 待转换资源文件夹的密度,如 xxxhdpi,会与 folder 组合成真正的文件夹名字。designDensity 为 xxxdpi, folder 为 mipmap 时则待转换资源文件保存在 mipmap-xxxhdpi 路径下
  • convertDensity, String 列表 需要转换的密度,只支持高密度图片转换为低密度图片。如待转换的图片密度为 xxhdpi,则可以转换为 xhdpi 密度的图片,但是不能转换为 xxxhdpi 密度的图片
  • auto, 布尔值 作用与 dimens 的 auto 一样

UPDATE

Version 1.1.0

  • 增加 applicationName 属性,用于配置启动 application
  • 不再直接对 AndroidManifest 进行修改,改成根据配置动态生成新的 AndroidManifest 的模式,生成目录:/app/calces 建议在使用版本管理的时候忽略对 calces 文件夹的跟踪。

Version 1.2.0

  • 增加 ScreenPlugin 屏幕适配插件
  • 可指定设计稿尺寸 width,根据设计稿 width 值生成对应适配文件
  • 屏幕适配方案为 smallestWidth 方案

Version 1.2.3

  • ScreenPlugin 支持位图缩放功能
  • 可以根据配置,实现高分辨率位图自动缩放为低分辨率位图

Version 1.2.31

  • 修复 ModulesPlugin 无法编译 Manifest BUG

Version 1.2.42

  • screen 插件提供转换文件路径控制。 dimens 任务提供配置 dimensFileName 字段( 控制待转换 dimensions 文件的名称) mipmap 任务提供配置 folder 字段( 控制图片资源保存路径,目的时支持采用 drawable 保存图片资源的项目)
  • 更新 com.android.tools.build:gradle 插件版本到 3.2.1

Version 1.2.52

  • screen 插件 dimens 支持浮点数格式转换
  • dimens 浮点数控制配置更新 更改为:sacle 控制保留小数位,scaleMode 控制小数保留模式

插件分离,由原来的 calces 插件包分离成 calces.component 包和 calces.screen 插件包

主要目的是为了解耦,把组件化插件和屏幕适配插件分离。

calces.component version 3.3.0-alpha01

组件化插件会依赖 Android Build Plugin,所以从 3.3.0 版本开始,版本好会与 Android Build Plugin 保持一致,而 alpha01 则是 calces.component 自身的版本变化。

calces.screen version 1.3.4-alpha02

与 1.2.52 功能一样,唯一的区别是能单独依赖 calces.screen 包,不需要再依赖整个 calces 插件包

TODO

  • 位图自动压缩,减少安装包体积
  • 组件版本管理支持
  • 暂时还没想到...

License

Copyright 2018 Tang.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools