功能背景:
因公司项目要求,每次打包都需要打包三个版本,两个测试版本和一个线上的版本,
并且调用不同的baseURL,最开始的做法是每次打包一次就换一个baseURL,然后一个个打包,分别需要打包三次,如果编译很慢会浪费了很多时间,还需要注释掉不同的baseURL,于是想到应该如何一次性打包三个版本的apk并且调用不同的baseURL,如果有类似需求的,可以参照我下面自己实现的方式。
首先在 src 目录下新建几个自己需要打包对应名称的包,比如我要打包如下三个版本, uat ,nduat,product,新建各自java文件夹,可以直接复制main文件下的java包到各个新建目录下,然后只新建和声明自己需要类和对应常量(需一致)。
public class Constant {public static String BASE_URL = "http://www.*****";}
然后在主程序main需要的地方调用对应的常量baseUrl,实际开发中是调用api去请求数据
在代码中调用的是当前选择对应的productFlavors版本的代码,比如当前选择的是nduat版,其他版本会显示下面好像报错的红圈,编译正常,当我们打包成功后,它会调用对应目录下面常量
然后签名打包,配置gradle文件,这些按照基本流程走,按照下面基本的配置可以得到打包得到三个对应的版本,id 根据你自己的需要设置是否可以同时在一个手机上运行多个自己的app。
以上过程完成了开始提到的需求,具体实现代码起来很简单,以此类推,资源文件等也可以通过以上方式。
gradle中声明变量:
buildConfigField BOOLEAN, BUG, TRUE // 这句话是设置了一个boolean类型的变量BUG,并且赋值为true
buildConfigField STRING, URL_API, "\"http://xx.xx.xx.xx:8080\"" // 设置一个String类型变量URL_API,并且将api地址赋给它 versionNameSuffix
引用再build中定义的值:
在xml中引用
<meta-data android:name="TD_CHANNEL_ID" android:value="${TD_CHANNEL_VALUE}" />
<category android:name="${applicationId}" />
在java中引用
public static boolean isDebug = BuildConfig.BUG; // true 调试。false:上线 public static final String URL = BuildConfig.URL_API; // 服务器地址