调试Android应用程序时如何使用不同的设置?

时间:2014-10-06 10:31:37

标签: android intellij-idea

我有一个Android应用程序,在生产中使用时使用某个URL与我们的服务器进行通信。我想在调试时能够使用不同的URL,这样我就可以在我的机器上对服务器的本地实例运行应用程序。

如何在不手动编辑网址的情况下执行此操作?

4 个答案:

答案 0 :(得分:4)

使用Android Studio,您可以定义构建变体,并在这种情况下定义字符串:

生成Java常量

插件版本大于0.7.x(当前方法)

android {
    buildTypes {
        debug {
            buildConfigField "int", "FOO", "42"
            buildConfigField "String", "FOO_STRING", "\"foo\""
        }

        release {
            buildConfigField "int", "FOO", "52"
            buildConfigField "String", "FOO_STRING", "\"bar\""
        }
    }
}

插件版本低于0.7(旧)

android {
    buildTypes {
        debug {
            buildConfig "public final static int FOO = 42;"
        }

        release {
            buildConfig "public final static int FOO = 52;"
        }
    }
}

您可以使用BuildConfig.FOO

访问它们

生成Android资源(自插件0.8.3开始)

android {
    buildTypes {
        debug{
            resValue "string", "app_name", "My App Name Debug"
        }
        release {
            resValue "string", "app_name", "My App Name"
        }
    }
}

您可以使用@string/app_nameR.string.app_name

以常规方式访问它们

来源:https://stackoverflow.com/a/17201265/1096905(所有积分给他,我只是复制和粘贴)

答案 1 :(得分:0)

如果您使用的是针对Eclipse的Android开发工具,请查看BuildConfig.DEBUG。在When does ADT set BuildConfig.DEBUG to false?

进行了一些讨论

答案 2 :(得分:-1)

您可以创建一个为您生成网址的实用工具类。扩展Robin Ellerkmann在我之前提到的内容。

public class UrlGenerator{

    private static final String STAGIN_URL = "http://www.statingurl.com/";
    private static final String PRDOUCTION_URL = "http://www.productionurl.com/";

    private static final boolean DEBUGGING = true;

    private static String getBaseUrl(){
        if(DEBUGGING)
            return STAGING_URL;
        else
            return PRODUCTION_URL;
    }

    public static String getLoginUrl(){
        return getBaseUrl() + "login";
    }
}

然后在整个应用中使用类似

的内容
String loginRequestUrl = UrlGenerator.getLoginUrl();

这样就可以在你的实用程序类中进行管理。

答案 3 :(得分:-2)

在代码中使用全局DEBUGGING布尔变量和if / else语句。

private boolean DEBUGGING = true;

if (DEBUGGING) {
    //Use local machine url here
} else {
    //Use real url here
}