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

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

有帮助吗?

解决方案

根据这个 stackoverflow 邮政, ,在 SDK 工具版本 17(撰写本文时我们的版本为 19)中添加了 BuildConfig.DEBUG 构建开发版本时正确的常量。

其他提示

下面的解决方案假定清单文件,你总是设置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
}

@一个有用溶液维克托-bresan感谢。它会是更有帮助,如果你只是包括检索当前应用程序的情况下,使之工作的完整示例的通用方法。沿的下面的行的东西:

PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);

的Android的build.gradle具有把手调试和发布环境良好。

将以下代码片段在build.gradle文件

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

    release {
        buildConfigField "Boolean", "IS_DEBUG_MODE", 'false'
    }
}

现在可以访问像下面的变量

    if (BuildConfig.IS_DEBUG_MODE) { {
        //Debug mode.
    } else {
        //Release mode
    }

如何像下面的代码...

public void onCreate Bundle b ) {
   super.onCreate(savedInstanceState);
   if ( signedWithDebugKey(this,this.getClass()) ) {
     blah blah blah
   }

  blah 
    blah 
      blah

}

static final String DEBUGKEY = 
      "get the debug key from logcat after calling the function below once from the emulator";    


public static boolean signedWithDebugKey(Context context, Class<?> cls) 
{
    boolean result = false;
    try {
        ComponentName comp = new ComponentName(context, cls);
        PackageInfo pinfo = context.getPackageManager().getPackageInfo(comp.getPackageName(),PackageManager.GET_SIGNATURES);
        Signature sigs[] = pinfo.signatures;
        for ( int i = 0; i < sigs.length;i++)
        Log.d(TAG,sigs[i].toCharsString());
        if (DEBUGKEY.equals(sigs[0].toCharsString())) {
            result = true;
            Log.d(TAG,"package has been signed with the debug key");
        } else {
            Log.d(TAG,"package signed with a key other than the debug key");
        }

    } catch (android.content.pm.PackageManager.NameNotFoundException e) {
        return false;
    }

    return result;

} 

我今天对面的另一种方法也是出于偶然,似乎真的直线前进再看看Build.TAGS,在发展中创建应用程序这一计算结果为字符串“测试键”。

没有比字符串比较容易多了。

另外Build.MODEL和Build.PRODUCT评估到模拟器上的字符串“google_sdk”!

下面是我使用的方法:

HTTP:// whereblogger .klaki.net / 2009/10 /选择-机器人-MAPS-API-键-AT-run.html

我用它来切换调试记录和地图API密钥。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top