Android Build Variants 为项目设置变种版本的方法

 更新时间:2018年01月20日 11:53:44   作者:却把清梅嗅  
下面小编就为大家分享一篇Android Build Variants 为项目设置变种版本的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

前言

在项目开发过程中,时常会碰到这种情况:

1.同一个Project的同一个API,有几个不同的接口,比如内部测试用的Server,和当前版本暴露给用户使用的Server;

2.同一个Project有免费版和收费版

3.同一个Project不同环境下有不同的Constants常量

当然我们可以简单的通过这种方式处理不同情况下的API:

// GET 电影信息
String douban_movie_info = "/v2/movie/test/subject";
//String douban_movie_info = "/v2/movie/production/subject";

或者这种情况:

long waitTime = 10000; //正式版本某个操作,会耗时10秒
//long watTime = 1000; //开发环境我们只想1秒就足够了

在不同的环境下我们通过注释,切换使用对应的API,比如说开发时我们使用内网Server的“test/subject”接口,正式发布版本切换为“production/subject”接口;

同理:

不同的环境下我们通过注释,平时开发打开1000,注释掉10000;版本发布时注释掉1000,打开10000……

但是这种操作太繁琐太麻烦了,我们可以使用big更高一些的方式,比如AndroidStudio为开发人员配置的一个功能:Build Variants(直译:Build 口味)。

1.Module中 Build.Gradle配置:

buildTypes {
 release {
  minifyEnabled true //是否代码混淆
  multiDexEnabled true //防止方法数量超过65536导致错误
 }
 debug {
  minifyEnabled false 
  multiDexEnabled true
 }
}
// If you need to add more flavors, consider using flavor dimensions.
// 构建变种版本
productFlavors { 
 production { //正式发布版本
 }
 dev {   //开发测试版本
 }
}

ok,基本配置结束,我们点击sync同步项目之后,打开AndroidStudio左下角的Build Variants菜单:

我们先不考虑右边的代码,我们看到了我们Module的“productionDebug”按钮,这意味着我们当前的环境是正式发布版本的Debug模式。我们有哪几种模式呢?

所有Build Variant 
- productionDebug //正式版本的debug包 
- productionRelease //正式版本的Release包 
- devDebug //开发版本的debug包 
- devRelease //开发版本的Release包

可以看到,我们拥有的四种变种版本,数量正好是「Build.gradle」文件中「buildTypes」*「productFlavors」的结果,我们便完全可以据此开发出不同的变种版本。

2.Build Variant牛刀小试:

现在我们可以在build.gradle文件中加一些小「佐料」:

productFlavors {
 production {
  manifestPlaceholders = [
    APP_NAME   : "@string/app_name"]
 }
 dev {
  manifestPlaceholders = [
    APP_NAME   : "@string/app_name_dev"]
 }
}

在你的string资源文件中添加:

<resources>
<string name="app_name">LIFE TOOL</string>
<string name="app_name_dev">LT 开发版</string>
</resources>

然后是你的清单文件Manifest.xml添加占位符${APP_NAME}:

<application
android:icon="@mipmap/ic_app_icon"
android:label="${APP_NAME}"//app名称,根据不同变种版本名字也不同
android:supportsRtl="true"
android:theme="@style/AppTheme">

然后我们切换到productionDebug版本,点击运行:

模拟器中,我们获得的App:

然后我们切换到devDebug版本,点击运行:

模拟器中,我们获得的App:

是不是很方便!其实我们仔细点还可以观察到,在我们切换不同变种版本的时候,同时gradle也在进行编译,与其说我们是在切换变种版本,更准确的是我们在切换两种不同版本的代码!

3.Build Variant深入学习:

如果说单单只能改个app名字啥的实际上并没有什么用,我们在工程的对应目录下创建2个不同的文件夹:

如图,我们创建了「production」和「dev」两个文件夹,这两个文件夹什么用呢,在我们切换不同的变种版本时,我们app使用的代码就从对应的文件夹下去找!

比如:

public interface ConstantsApi {
long waitTime = 10000; //正式版本某个操作,会耗时10秒
}
public interface ConstantsApi {
long watTime = 1000; //开发环境我们只想1秒就足够了
}

假如创建两个ConstantsApi文件,显然我们想将第二个「ConstantsApi」文件放入「开发环境」对应的dev版本中使用,我们就可以这样:

创建和src/main同样目录的文件夹(这样最好,不容易乱)

比如我的工程src/main下面结构可能是这样: 
- /MyProject/MyApplication/app/src/main/java/com/mei_husky/lifemanager 
那么src/dev文件夹下的目录结构最好也是: 
- /MyProject/MyApplication/app/src/dev/java/com/mei_husky/lifemanager

这时,我们切换到我们的dev变种版本,打开我们的Android视图,我们可以看到:

同理,我们在同样的方式在production目录下创建同样的文件夹,将另外一个10s的ConstantsApi文件放在该目录下,切换到productionDebug变种,我们又会看到:

我们可以看到,不同变种的文件夹只有我们在切换到该变种时,该文件夹才会显示,比如dev变种只显示dev文件夹不显示production文件夹,当我们切换到production变种时,dev同样消失了。

更神奇的是,我们此时使用这些变量,运行代码,所得的结果也因为版本的不同而不同,我们使用dev变种版本,我们只需要等1s,切换到production版本,我们直接就可以打包发布。

4.总结

这样的好处是很明显的,「首先」我们不管有多少不同环境的配置,我们只需要配置一次,以后想切换到哪种环境,我们只需要切换到该变种就可以了;「其次」,这样的结构非常清晰,等同于我们有N套不同版本的代码,不会代码多了版本多了,人就蒙了。

相关文章

  • android输入框与文本框加滚动条scrollview示例

    android输入框与文本框加滚动条scrollview示例

    这篇文章主要介绍了android输入框与文本框加滚动条scrollview示例,需要的朋友可以参考下
    2014-05-05
  • 使用Docker来加速构建Android应用的基本部署思路解析

    使用Docker来加速构建Android应用的基本部署思路解析

    这篇文章主要介绍了使用Docker来加速构建Android应用的部署思路解析,在服务器中通过Docker镜像来获得更高效的开发和测试流程,需要的朋友可以参考下
    2016-01-01
  • 房卡麻将分析系列

    房卡麻将分析系列 "牌局回放" 之 数据设计详解及实例

    这篇文章主要介绍了房卡麻将分析系列 "牌局回放" 之 数据设计详解及实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • android实现下拉菜单三级联动

    android实现下拉菜单三级联动

    这篇文章主要为大家详细介绍了android实现下拉菜单三级联动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 浅谈Android 照相机权限的声明

    浅谈Android 照相机权限的声明

    今天小编就为大家分享一篇浅谈Android 照相机权限的声明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • android shape实现阴影或模糊边效果

    android shape实现阴影或模糊边效果

    这篇文章主要介绍了android shape实现阴影或模糊边效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Android APK反编译图文教程

    Android APK反编译图文教程

    学会反编译比较关键,也是我们美化必须掌握技术,学会反编译也是实现制作ROM的起步,ROM高手必然是反编译高手这里有必要说一下,教程只是给你一个动手的那一个跷板,教程不是万能的,给了你基础与启发,最重要的是我们能够自主的进行创新与思考
    2016-04-04
  • Android系统自带分享图片功能

    Android系统自带分享图片功能

    这篇文章主要为大家详细介绍了Android系统自带分享图片功能,图片分享的工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Android对图片Drawable实现变色示例代码

    Android对图片Drawable实现变色示例代码

    这篇文章主要给大家介绍了关于Android对图片Drawable实现变色的相关资料,文中通过示例代码将实现的方法介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-08-08
  • Android实现自制和播放录音程序

    Android实现自制和播放录音程序

    这篇文章主要为大家详细介绍了Android实现自制和播放录音程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论