开发Android应用时,如何管理多种环境?

我们正在构建一个连接到云端的 Android应用.我们有一个API的测试URL和一个生产URL.我们将应用连接到我们的本地开发机器,以便在开发过程中与数据库进行交流,但是每次为Play Store生成APk时,都会发现自己将全局API URL修改为生产URL.

有没有更好的方式来管理Android的环境?我们还可以有两个版本的应用程序(开发版本)和Play Store版本?我不能有两个版本,因为这两个应用程序具有相同的签名.我们如何最好地管理这个?

解决方法

随着android工作室和gradle它的简单现在.

在你的应用程序build.gradle里编辑签名配置

signingConfigs {
    debug {
        storeFile file("debug.keystore")
        storePassword "..."
        keyAlias "..."
        keyPassword "..."
    }

    prod {
        storeFile file("prod.keystore")
        storePassword "..."
        keyAlias "..."
        keyPassword "..."
    }

    dev {
        storeFile file("dev.keystore")
        storePassword "..."
        keyAlias "..."
        keyPassword "..."
    }
}

添加buildTypes

buildTypes {

    debug {
        buildConfigField 'String','BASE_URL','"http://127.0.0.1:8080/"'
        ......
        signingConfig signingConfigs.debug
    }

    prod {

        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'

        buildConfigField 'String','"http://prod.example.com"'
        ......
        signingConfig signingConfigs.prod
    }


    dev {
        buildConfigField 'String','"http://dev.example.com"'
        ......
        signingConfig signingConfigs.dev
    }
}

在你的代码中,使用这个代码在gradle文件中配置base url.

public final static String BASE_URL = BuildConfig.BASE_URL;

您还可以将不同的KEY或任何构建类型特定于Gradle文件中的代码以及根据正在运行的构建类型执行的代码.

它甚至可能有不同的包名.

productFlavors {
    my_prod {
        applicationId "com.example.packtwo"
    }
    my_dev {
        applicationId "com.example.packone"
    }
}

检查更多的可能性…

但是,如果您使用不同的口味,您可能需要处理清单合并和所有.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...