一般开发过程都会有开发环境和线上环境,而他们的服务器地址是不同的;每次打包都要去改里面的url地址很麻烦。下面说一下我自己的配置方法:

defaultConfig {//        applicationId rootProject.ext.android.applicationId  //ysl 通过下面的多环境来配置,这里不需要写包名了        minSdkVersion rootProject.ext.android.minSdkVersion        targetSdkVersion rootProject.ext.android.targetSdkVersion        versionCode rootProject.ext.android.versionCode        versionName rootProject.ext.android.versionName        multiDexEnabled true        vectorDrawables.useSupportLibrary = true        ndk {            // 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置            abiFilters 'armeabi-v7a'//,'armeabi','x86'        }        //必须要保证所有的flavor 都属于同一个维度        flavorDimensions "default"        //这里是集成的极光推送时定义的,也是为在清单文件中引用;已经放在下面的多环境配置中了//        manifestPlaceholders = [//                JPUSH_PKGNAME : applicationId,//                JPUSH_APPKEY : "df9895e5495fd197d7319a03", //JPush 上注册的包名对应的 Appkey.//                JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.//        ]    }    buildTypes {        debug{            minifyEnabled false            shrinkResources false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }        release {            minifyEnabled true            shrinkResources true            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    productFlavors {        //开发环境        develop {            applicationId 'com.dtrt.preventpro.develop'            buildConfigField "int", "ENV_TYPE", "1"            resValue "string", "app_name", "开发-安全管理"            manifestPlaceholders = [                    //极光推送的相关信息配置,便于清单文件中的引用                    JPUSH_PKGNAME : applicationId,                    JPUSH_APPKEY : "df9895e5495fd197d7319a03", //JPush 上注册的包名对应的 Appkey.                    JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.                    app_icon: "@mipmap/splash"            ]        }        //测试环境//        check {//            buildConfigField "int", "ENV_TYPE", "2"//            applicationId 'com.dtrt.preventpro.test'//            manifestPlaceholders = [//                    app_name: "测-安全管理",//                    app_icon: "@mipmap/splash"//            ]//        }        //生产环境        product {            applicationId 'com.dtrt.preventpro'            buildConfigField "int", "ENV_TYPE", "3"            resValue "string", "app_name", "安全管理"            manifestPlaceholders = [                    //极光推送的相关信息配置,便于清单文件中的引用                    JPUSH_PKGNAME : applicationId,                    JPUSH_APPKEY : "df9895e5495fd197d7319a03", //JPush 上注册的包名对应的 Appkey.                    JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.                    app_icon: "@mipmap/logo"            ]        }    }

注意:里面写注释的地方,通常写包名的地方不需要了,写在了productFlavors里面;极光推送的配置也写在了里面;buildTypes里面照常写混淆规则,debug不混淆代码,release混淆代码。

通过上面的配置,来看一下打包时的样子:

开发环境和生产环境的debug/release包全都列出来了,我们一次可以全部打出来;

清单文件的写法:

                                                                                        

注意:我测试的结果是最顶部的package不用改,就是代码的文件夹路径那个包名;其余部分,appIcon使用${app_icon}来引用gradle文件中配置的图标名字;其它的有关极光推送的地方都是使用${applicationId}来引用;同理像极光推送的Key也可以在gradle文件中做配置。其它第三方的引用都可以通过此方式来写。

代码中怎么使用:

public final class BuildConfig {  public static final boolean DEBUG = Boolean.parseBoolean("true");  public static final String APPLICATION_ID = "com.dtrt.preventpro";  public static final String BUILD_TYPE = "debug";  public static final String FLAVOR = "product";  public static final int VERSION_CODE = 10;  public static final String VERSION_NAME = "1.0.10";  // Fields from product flavor: product  public static final int ENV_TYPE = 3;}

上面是Android为我们自动生成的,可以看到FLAVOR、ENV_TYPE这些参数;生产环境定义的就是3,准确无误。

然后我们就可以在代码中利用这个来判断当前的环境了,根据环境切换服务器地址:

public static String getUrl() {    String baseUrl;    if(BuildConfig.ENV_TYPE == ApiConstants.PRODUCT){        baseUrl = ApiConstants.BASE_URL_PRODUCT;//生产环境的服务器地址    }else {        baseUrl = ApiConstants.BASE_URL_DEVELOP;//开发环境的服务器地址    }    logger.info("BASE_URL = "+baseUrl);    return baseUrl;}

通过上面的一系列配置;每次打包的时侯,再也不用去修改代码里的服务器地址了。一次打多个包出来,测试验证通过后,把生产环境的包直接发布即可。

 

 

更多相关文章

  1. Android-JUnit
  2. cocos2dx跨平台直播实例-ffmpeg-android篇
  3. Android(安卓)Studio下Svn忽略文件配置的几种方法
  4. Android(安卓)studio开发环境搭建教程与软件安装教程(从零开始学a
  5. Android(安卓)GreenDao最的基本配置与初始化
  6. android横竖屏问题解决办法
  7. Android(安卓)init进程——解析配置文件
  8. Android+NDK+OpenGLES开发环境配置
  9. HockeyApp环境搭建

随机推荐

  1. Android里merge和include标签的使用
  2. Android开发贴士集合(Part 1~4)
  3. Android修改自己程序字体
  4. Android Studio下添加assets目录
  5. Android菜单详解
  6. 跟大家分享下Android布局文件layout.xml
  7. android binder 基础实例及解析(一)
  8. Android中集结了大量的系统管家Manager
  9. Android 代码实现应用强制装到手机内存
  10. android studio查看模拟器文件夹