天辰iOS版APP下载Android多渠道打包--多维度


天辰iOS版APP下载


照片是 2020.05.01 花了半个小时用小米9专业模式拍出的效果,天辰iOS版APP下载有点月色朦胧的味道。感觉到极客时间的摄影课没有白买,至少了解了一点摄影的基础知识。

开端
日常Android开发会有打出不同用途包的要求,最基本的就是给开发环境、测试环境和生产环境打出不同地址的包。以前都是在Java代码里写多个地址,打包时去注释切换不同的地址。例如:

String url = "";
url = "http://192.168.1.1/";     // 开发环境
// url = "http://192.168.1.2/";     // 测试环境
// url = "http://192.168.1.3/";     // 生产环境
这样的方式有个问题,如果忘记改了那就打错包了,而且一次只能打出一个包。如果多个人开发,并且切换过不同的地址提交到git,还得解决冲突问题,特别的麻烦。

以上就是我这个强迫症的动力源泉,就去万能的google搜索解决方案去了。说到这,还是要批评下自己,很多东西知道它的存在,但是没有亲自动手用过,影响就是需要用的时候不能直接上手,领导也不会让你直接用,还需要花时间学习使用。这也就是日常学习与练手的目的,知其然,知其所以然,还要能熟练运用。

单维度
上面的那个需求,只需要添加下面的配置,就可以将配置提到 gradle 内,在开发与打包时都可以通过选择版本来控制打包地址,甚至可以将三个包一同打出来。

flavorDimensions "default"

productFlavors {
    dev {
        buildConfigField "String", "BASE_URL", '"http://192.168.20.100/flavors/"'
    }

    ftest {
        buildConfigField "String", "BASE_URL", '"http://172.16.20.100/flavors/"'
    }

    pro {
        buildConfigField "String", "BASE_URL", '"http://www.pro.flavors.conan/"'
    }
}
可以看到定义了三个地址,那么怎么在代码中运用呢?留意一下这个 BASE_URL 变量的名字,还有这个单引号嵌套双引号的写法。

public static Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(BuildConfig.BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .client(httpClient)
        .build();
日常我们使用 Retrofit 作为网络库,在公共代码部分会使用 BuildConfig.BASE_URL 作为网络库地址。可以看到 BASE_URL 这个变量的名字,天辰iOS版APP下载与我们上面在 gradle 中定义的变量是一样的。其实这个 BuildConfig 类就是由 gradle 编译时生成的类,它的内容大概是:

/**
* Automatically generated file. DO NOT MODIFY
*/
package com.example.xue.myapplication;

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.example.xue.myapplication";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "dev";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "1.0";
  // Fields from product flavor: dev
  public static final String BASE_URL = "http://192.168.20.100/flavors/";
}
可以看到这个类的最后一行和它的注释这个就是我们配置的变量,这就说明了,刚才为什么要用单引号嵌套双引号。因为它是个String类型的变量,如果是 int 或者 boolean 类型就不需要写双引号了。

默认是 dev 地址的包,如果开发过程中想要使用 ftest 的包怎么办(ps:ftest不是打错了,是不让用test作为开头,所以可以使用for test -> test 或者 te5t 之类的作为名字)?可以使用 Build Variants 来切换环境包。

上一篇:漫天辰iOS版APP下载谈数据仓库之维度建模
下一篇:天辰iOS版APP下载自我的五个维度天辰iOS版APP下载

网友回应

欢迎扫描关注我们的微信公众平台!

欢迎扫描关注我们的微信公众平台!