开发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 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...