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就是你选择的对应版本了: