Build Variant在项目中的应用

来源:互联网 发布:南湖国旅官网广州数据 编辑:程序博客网 时间:2024/05/04 16:06

1. 区别debug 、release版本

当我们在进行正式项目开发的时候,通常会有debug、release版本的区别,这两个版本中可能会有部分代码实现不同。而如果我们需要打对应版本应用包之前都要调整代码的话,那会显得十分麻烦。或者说为两个版本分别建立独立的项目,但这在代码同步、git管理上也是相当麻烦的。在这里介绍一种比较合适的解决方式(使用Android Studio):

1> 为debug、release版本建立对应的目录

手动在src/main同级目录下建立debug和release目录(如何建目录这里就不介绍了),建完目录并建立对应的包后的目录结构为(包名可以存在区别):**
这里写图片描述

2> 接下去我们分别在debug与release对应的包路径下建立Java文件Util.java:

注意:debug与release中放置两个版本有区别的部分,而公共代码还是放置在src/main中,而且main中不能存在与debug、release中(同包名)相同的类。

// debug目录下的Java代码public class Util {    public static String getTag(){        return "debug";    }}// release目录下的Java代码public class Util {    public static String getTag(){        return "release";    }}

代码很简单,就是返回一个字符串,以便我们在运行时可以看出当前运行的是哪一段代码。

3> 运行我们想要的版本

  1. 现在如何进行切换版本呢?很简单,在AndroidStudio中的Build Variant进行选择切换即可,如下图:
    这里写图片描述

  2. 当然,我们可以在src/main下做个简单的验证,代码:

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);        fab.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //Util.getTag() 根据其返回的信息,就可以知道当前版本是否切换成功                Snackbar.make(view, Util.getTag(), Snackbar.LENGTH_LONG)                        .setAction("Action", null).show();            }        });    }}

这样,切换版本后,查看运行结果即可。

4> 为不同的版本设置不同的资源文件

以上只涉及到代码的区别,那么要如何设置不同的资源文件呢,其实也十分简单。例:直接修改对应版本的layout/activity_main.xml文件,目录结构为:
这里写图片描述
activity_main里只是将FAB换了个位置,这里就不上代码了。

2. 依赖对应版本的Library(Module)

Module里对应版本的代码与资源的控制方式都和上面提到的一致,这里主要介绍一下如何配置相关gradle文件。添加完的目录结构:
这里写图片描述

1> lib(Module)中的build.gradle

这个仅需要额外加一句:

android {   //... ...    publishNonDefault true  //这个是必须配置的,否则会导致无法依赖该Module}

2> app(Module)中的build.gradle

这里需要注意依赖的写法:

dependencies {    //... ...     debugCompile project(path: ':mylibrary', configuration: 'debug')    //app debug版本依赖lib的debug版本    releaseCompile project(path: ':mylibrary', configuration: 'release')}

3. 多个flavor

当debug与release两个版本不够满足具体情况时,我们还可以利用Product flavors。情景:应用需要一个免费(free)的版本和一个收费(paid)的专业版本。

1> 创建对应目录

与上面提及的debug、release目录建立步骤一致,结构为:
这里写图片描述

2> 在build.gradle中配置对应的Product flavors

android {    //... ...    productFlavors {        //注意名称需要与项目中目录名一致        free {        }        paid {        }    }}

配置运行完gradle后,会发现,现在有4个版本了,分别为:

  • free - debug

  • free - release

  • paid - debug

  • paid - release

每个版本对应相应目录下的代码与资源。

3> 为不用的flavor添加不同的依赖

例如,需要给免费版添加一个广告SDK,那么可以添加相关依赖(注意写法):

dependencies {    freeCompile ' ... '    //freeCompile project(path: ':mylibrary', configuration: 'debug')}

Demo地址

0 0
原创粉丝点击