• Android通过Gradle命名动态传参打包
  • Android通过gradle的productFlavors多个维度切换项目环境

一、Android通过Gradle命名动态传参打包

Android开发中,我们常常需要给测试,或者其他人提供APP的安装包。
这些安装包跟生产包,多多少少会有差异,改app名字,logo等等。
一些简单的,我们通过buildType,在debug/release模式切换下,可以满足我们的需求。但是,还有一些需求,比如,修改项目的id,跟后台联调,修改host等等。
往往每次打这些包的时候,就需要我们来修改代码来完成了,这样出错的概率也会大大的增加。


其实,如果,我们对Gradle熟悉的话。我们知道Gradle其实有个-P的命令,就是专门来设置属性的。
我们先看下,这个命令的解释。

-P, --project-prop        Set project property for the build script (e.g. -Pmyprop=myvalue).

设置构建脚本的项目属性。-Pmyprop=myvalue 。-P后面跟着key=value

下面,我们就实现一个类似的需求。[在打包时候,动态的传入APP的名字。]

第1步,当时是给要传入的key起个名字啦。

我们就叫它appName吧。

记得把string.xml下面的app_name这个属性删除(不然,跟我们动态设置的参数冲突)。毕竟,我们的需求是打包的时候,才输入APP的名字嘛。

第2步,在主module的build.gradle里面配置这个key

buildTypes {        release {            ...            //没错,就是这里            resValue "string", "app_name", project.hasProperty("appName") ? appName : "默认release"            ...        }    }

这里通过project.hasProperty(“appName”)来判断,执行gradle命令的时候,是否设置了这个属性。如果设置了,就把它赋值给string.xml里面的app_name里面。如果没有,就用默认的赋值。

第3步,通过gradle命令来打包,动态设置app的名字了

直接看命令

gradlew clean assembleRelease -PappName=测试

执行完就把app的名字改成了测试。

到这里,我们的动态设置就完成了,是不是很简单。

二、Android通过Gradle的productFlavors多个维度切换项目环境

通过Gradle的productFlover和flavorDimensions,我们可以把项目从多个维度分割开。
比如,一般的项目我们都有测试环境,准生产环境,生产环境(API的host都是不一样的)

flavorDimensions "env"    productFlavors{        dev{            //host:dev            dimension "env"        }        online{            //host:online            dimension "env"        }    }

我们就可以通过productFlavors来配置。

如果这个时候,我们又需要收费的和免费的两种模式的APP呢。

没关系,我们在gradle里面再配置一个flavorDimensions 就可以啦

1,在build.gradle进行配置

flavorDimensions "env","kind"    productFlavors{        dev{            //host:dev            dimension "env"        }        online{            //host:online            dimension "env"        }        free{            dimension "kind"        }        pro{            dimension "kind"        }    }

这样productFlavors就分为两类了【dev,online】和【free,pro】。
这样,我们就可以组合出devFree(开发免费版),devPro(开发收费版),onlineFree(线上免费版),onlinePro(线上收费版)等不同的模式了。当然,还可以组织出更多(乱)的,只要舍得添加。。。

到这里,我们就可以在Build Variants里面来切换不同的场景进行测试啦。

2,在main的平级结构里,创建文件夹free、pro,把差异化的代码分别放到不同的包。

创建文件夹后。我们只需要把free/pro有差异的代码/xml放到对应的文件夹里就可以啦。
公用的还是在main里面放着。如下

这样,就完成了从多个维度来配置APP。个人感觉,在某些特定的场景,这个东西是非常有用的。但是,如果dimensions配置过多的话,整个APP会很乱,尤其是在修改某个公共功能后,需要修改每个包的代码,有点得不偿失。

Gradle 依赖替换规则

以后再补,参考文档
https://juejin.im/post/5d2dee0851882569755f5494
https://docs.gradle.org/current/userguide/customizing_dependency_resolution_behavior.html#sec:dependency_substitution_rules
https://github.com/JakeWharton/u2020/blob/master/build.gradle

更多相关文章

  1. Android兼容性测试
  2. 运行Android程序时,出现提示:No compatible targets were found .
  3. [置顶] Eclipse工程转换为Android(安卓)Studio工程
  4. android 5分钟集成环信及时聊天DEMO
  5. 玩Android项目开发4------首页(ListView实现文章置顶)
  6. android 实用的开源框架
  7. android 开源的游戏引擎
  8. 现有的Android(安卓)原生项目里面集成RN 页面的学习和踩坑之路
  9. React Native中gif格式图片无法在Android中显示问题

随机推荐

  1. Android(安卓)Liftcycle
  2. android关于RandomAccessFile
  3. Android中NDK的使用方法
  4. Android通过uri获取资源路径问题
  5. android:编写属性动画程序(旋转,缩放,淡出淡
  6. ch020 Android(安卓)SQLite3(第一部分)
  7. Android(安卓)水平平分布局和垂直平分布
  8. Android(安卓)速度检测demo
  9. Android:SQLiteOpenHelper
  10. Android图片上传工具类