区分Android上的开发模式和发布模式环境设置

Joe*_*way 55 android development-environment release-management

我正在构建一个Android应用程序,并希望维护一些我可以调整的环境变量,具体取决于我是处于开发模式还是发布模式.例如,我需要调用Web服务,并且在任一模式下URL都会略有不同.我想将此设置和其他设置外部化,以便我可以根据目标部署轻松更改它们.

SDK中是否有任何最佳实践或任何内容可以满足此需求?

Vik*_*šan 44

以下解决方案假定您在清单文件中始终android:debuggable=true在开发和android:debuggable=false应用程序发布时设置.

现在,您可以通过检查从中获取的ApplicationInfo.FLAG_DEBUGGABLE标志来检查代码中此属性的值.ApplicationInfoPackageManager

以下代码段可以提供帮助:

PackageInfo packageInfo = ... // get package info for your context
int flags = packageInfo.applicationInfo.flags; 
if ((flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
    // development mode
} else {
    // release mode
}
Run Code Online (Sandbox Code Playgroud)

  • 从最近的SDK版本开始,这似乎是最好的方法,因为Eclipse和Ant都会根据构建类型自动设置它. (4认同)

yin*_*ash 29

根据这个stackoverflow 帖子,在SDK Tools版本17中(我们在撰写本文时已经是19)添加了一个BuildConfig.DEBUG在构建开发构建时才成立的常量.

  • 现在将此标记为已接受的答案,因为它可能更适用于未来的旅行者 (2认同)
  • API 无关紧要,只是构建工具版本。 (2认同)

Ero*_*eal 9

@ viktor-bresan感谢您提供有用的解决方案.如果您只是包含一般方法来检索当前应用程序的上下文以使其成为一个完全可用的示例,那将会更有帮助.下面的内容:

PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
Run Code Online (Sandbox Code Playgroud)


Zum*_*med 6

Android build.gradle很好地处理了调试和发布环境.

build.gradle文件中附加以下代码段

buildTypes {
    debug {
        buildConfigField "Boolean", "IS_DEBUG_MODE", 'true'
    }

    release {
        buildConfigField "Boolean", "IS_DEBUG_MODE", 'false'
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以像下面一样访问变量了

    if (BuildConfig.IS_DEBUG_MODE) { {
        //Debug mode.
    } else {
        //Release mode
    }
Run Code Online (Sandbox Code Playgroud)