Android Studio —— 多服务端接口地址打包技巧

Android开发中必不可少的就是向服务端请求数据,服务端小伙伴就会给你一个URL(http://192.168.1.194:8080)这样
你就可以愉快的进行开发;但是随着app的开发然后又多了外网测试地址、正式地址等等….

所以这篇文章就来说说,如何优雅的管理项目中各种接口地址

我这里使用的是Retrofit2进行网络请求,需要定义一个BASE_URL供Retrofit进行初始化;当地址多了就会出现下面这种情况:

public interface ApiService {
    /**
     * 内网
     */
//    String BASE_URL = "http://192.168.1.161:8191/openapi/";
//    String BASE_URL = "http://192.168.1.42:8080/openapi/";

    /**
     * 外网
     */
    String BASE_URL = "http://119.147.139.149:8191/openapi/";

    // ......
}

现在我们就可以通过gradle来进行优化

在编译项目的时候系统会为我们生成一个BuildConfig.java类,该类位于ProjectName\app\build\generated\source\buildConfig\buildTypes\packageName\下;(buildTypes就是当前的打包类型)这个类中的属性是可以通过build.gradle进行添加我们来看下默认生成的有哪一些:

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.azhon.test";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "1.0";
}

这个文件生成了一些应用的信息:应用包名、当前打包类型、版本信息等….

  • 通过build.gradle根据不同的打包类型生成我们的BASE_URL属性和值,如下:
android {

    // 测试接口地址
    def DEBUG_BASE_URL = "\"http://192.168.1.161:8191/openapi/\""
    // 正式接口地址
    def RELEASE_BASE_URL = "\"http://119.147.139.149:8191/openapi/\""
    // 其它接口地址
    def OTHER_BASE_URL = "\"http://119.147.129.149:8191/openapi/\""

    signingConfigs {
        config {
         // .....
        }
    }
    defaultConfig {
        //....
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
            // 定义生成在 BuildConfig.java 类中的属性
            buildConfigField("String", "BASE_URL", "${RELEASE_BASE_URL}")
        }
        debug {
            signingConfig signingConfigs.config
            buildConfigField("String", "BASE_URL", "${DEBUG_BASE_URL}")
        }
        //自定义打包类型时 好像必须指定签名
        beta {
            signingConfig signingConfigs.config
            buildConfigField("String", "BASE_URL", "${OTHER_BASE_URL}")
            //(当依赖了其他module时)自定义打包类型需要加上下面这行代码
            matchingFallbacks = ['debug']
        }
    }
  • 然后再来修改之前在ApiService中定义的URL
public interface ApiService {

    //直接获取 BuildConfig中生成的BASE_URL
    String BASE_URL = BuildConfig.BASE_URL;

    //....
}

这样当我们通过Build-->Generate Signed APK菜单打包时就可以选择对应的打包版本了
这里写图片描述

当我们直接点击运行按钮进行安装的时候默认打包的是debug版本,那如果想调试其他版本的地址怎么办呢?

  • 解决办法当然是有的了,进入Build Variants面板进行打包类型选择这样运行出来的apk就是你选择的对应版本了:
    这里写图片描述

通过这个案例,你可以进行举一反三看看在开发中还有什么地方也是可以这样进行玩耍的

猜你喜欢

转载自blog.csdn.net/a_zhon/article/details/81216561