build.gradle 配合项目理解 - productFlavors的配置 - 各语句的解释

前言

为什么要写这个androidflavors的文章,其实关于flavors的配置的文章有很多。主要是想记录一下这两天遇到的关于gradle编译的问题,项目上有三个flavors,但是我们每个flavors都需要写自动化测试用例,自动化测试用的框架是 Espresso,但是我们要分flavors来写测试代码,所以如果按照正常的写测试用例是不行的,当然最后的解决方法肯定是和gradle的编译有关,所以想从0开始学习gradle的编译。gradle其实在项目中是非常重要的,控制着整个项目的编译方式,可以说是整个项目的大纲。我们先分三步:

  1. 给项目配置多个flavors
  2. build.gradle中每段代码都是起到什么作用
  3. 解决实际问题给Espresso自动化测试分多flavors

多个flavors的配置:

ok现在就开始我们的第一步,如何给 android 项目分多个flavors

1.build.gradle 中配置 

android {
    defaultConfig {  
....
        flavorDimensions "wxy“
    }
    productFlavors {
        flavor1 {}
        flavor2 {}
    }
    sourceSets {
        flavor1 {
            java.srcDirs('src/flavor1/java')
            res.srcDir('src/flavor1/res')
            manifest.srcFile('src/flavor1/AndroidManifest.xml')
        }
        flavor2 {
            java.srcDirs('src/flavor2/java')
            res.srcDir('src/flavor2/res')
            manifest.srcFile('src/flavor2/AndroidManifest.xml')
        }
    }

}

2. 在src文件中配置flavor

  如图:                                         

3.选择需要编译的flavors

 如图:                       

build.gradle中语句的含义:

通过上面的讲解我们大致了解了flavors的配置,但是每个语句起到什么作用,我们接下来来分析以下:

首先我们来看一张图: 

                                                                                       

上图我们可以看到选中的文件,有的是可编译状态有的是不可编译状态,都是我们写的class文件,为何有的后缀名是.java.为何androidTest文件夹下面的java文件和flavor1 / flavor2下面的java图标为何不一样????

其实这些都是我们build.gradle中的代码控制的,接下来我们来分析代码。

//项目文件路径配置---闭包
sourceSets {
    flavor1 {
        java.srcDirs('src/flavor1/java')
        res.srcDir('src/flavor1/res')
        manifest.srcFile('src/flavor1/AndroidManifest.xml')
    }
    flavor2 {
        java.srcDirs('src/flavor2/java')
        res.srcDir('src/flavor2/res')
        manifest.srcFile('src/flavor2/AndroidManifest.xml')
    }
}

通过两个图我们来了对比解以下这段代码:

                               

每个项目的sourceets{}里面都默认配置了右侧图片信息,所以我们项目main下面的文件才是始终可编译的状态。如果我们把 main下面的java文件夹名字改成了javaTest,项目就会报错。这时候我们也需要把 java.Dirs('src/main/javaTest')路径也改了才行。

所以这就是我们为什么配置 flavor1 和 flavor2 的路径和文件名称。也就是我们写代码时候为什么必须要在main/java下面创建java类,其他地方创建不起作用的原因了。因为gradle编译的时候只识别到 main/java 文件下面。

Espresso 分 flavors 做自动化测试:

我们用这个espresso框架集成多个flavors,怎么给不同的flavors写对应的测试用例呢。

首先我们正常的自动化测试用例的项目结果是如图:

                                               

 如图:java文件夹是可编译状态,但是我们现在需要给不同的flavors加单独的测试用例,我们写了一个java文件肯定不行呀,所以就有图下图:

                                           

 我们写了两个flavors,但是我们可以看到两个文件都是不可编译状态,我们运行项目这两个文件完全不起作用。这怎么办呢?

我们上面已经讲过了,java文件之所以能编译是因为,gradle中早已经给我们设置了默认加载路径,但是我们新加的两个flavors,是不是也要到 gradle中去把路径给她们写好,所以:

sourceSets {
   ..........
    //就有了如下两句去加载我们的路径
    androidTestFlavor1.java.srcDirs=['src/androidTest/flavor1/java']
    androidTestFlavor2.java.srcDirs=['src/androidTest/flavor2/java']
}

通过上面的设置之后,我们的项目就是能编译的状态了。

其实解决这个问题很简单,我们主要就是,举个例子,来让我们明白gradle的配置到底有多重要。所以我们才有动力去学习他,使用它。

其实这个问题很简单,主要就是举个例子,来让我们明白,gradle 在项目编译的时候是非常重要的,这样我们才会有动力去学习他。

发布了119 篇原创文章 · 获赞 140 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/WangRain1/article/details/87882911