AndroidStudio一次打多个包

时间:2024-03-21 19:47:22

功能背景:

因公司项目要求,每次打包都需要打包三个版本,两个测试版本和一个线上的版本,

AndroidStudio一次打多个包

并且调用不同的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去请求数据

AndroidStudio一次打多个包

在代码中调用的是当前选择对应的productFlavors版本的代码,比如当前选择的是nduat版,其他版本会显示下面好像报错的红圈,编译正常,当我们打包成功后,它会调用对应目录下面常量

AndroidStudio一次打多个包

然后签名打包,配置gradle文件,这些按照基本流程走,按照下面基本的配置可以得到打包得到三个对应的版本,id 根据你自己的需要设置是否可以同时在一个手机上运行多个自己的app。

AndroidStudio一次打多个包

AndroidStudio一次打多个包
AndroidStudio一次打多个包
AndroidStudio一次打多个包
AndroidStudio一次打多个包

以上过程完成了开始提到的需求,具体实现代码起来很简单,以此类推,资源文件等也可以通过以上方式。


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; //  服务器地址