如何使Android应用程序自动配置调试与发布值?

我正在开发Android应用程序,特别是使用Facebook Android SDK的应用程序。 在开发模式中,我正在使用一个带有一个ID的测试Facebook应用程序。 但是,在发布模式下,该应用程序将使用具有不同ID的第二个Facebook应用程序。

我想知道大多数Android(或Java可能是一个适当的知识领域)开发人员如何让他们的应用程序自动构建调试与发布值。 在构建之前,理想的解决方案不涉及手动切换(例如:切换public static final DEBUG = false;true )。

你提问已经有一段时间,但我想我会分享我是怎么做的。

就像Sebastian暗示的那样,Ant脚本可以为您处理这种变化并生成您正在寻找的静态最终常量。 您可以配置IntelliJ或Eclipse以使其几乎无缝。

我试着详细说明我在这里采取的不同步骤,让我知道它是否有帮助。 我知道在发布之前我永远不需要做任何手动更改,这是一个很好的解脱!

在eclipse ADT 17.0及更高版本中,有一个新function。 检查使用您的代码自动构建的BuildConfig.DEBUG。

有关更多信息,请参阅http://developer.android.com/sdk/eclipse-adt.html

我不推荐使用IMEI方法……主要问题是并非所有Android设备都有IMEI。 更好的方法是检查用于签署.apk的签名。

 // See if we're a debug or a release build try { PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES); if (packageInfo.signatures.length>0) { String signature = new String(packageInfo.signatures[0].toByteArray()); isReleaseBuild = !signature.contains("Android Debug"); } } catch (NameNotFoundException e1) { e1.printStackTrace(); } 

我使用了一种稍微平凡的方法(如果你仍然对解决方案感兴趣)。

在应用程序启动时,我的应用程序检查是否存在/ sdcard /中存储的文本文件。 我在每个应用程序中查找特定文件,如“applicationdebug.txt”。 如果该文件存在,则应用程序进入调试模式并开始使用日志语句和使用我的调试Facebook密钥等进行详细操作。

然后,我只需将文件移除(或重命名)到设备上,即可查看应用程序在发布模式下的执行情况。

通常,您将仅使用1个或2个设备进行调试。 那你可以根据设备设置DEBUG开关吗? 所以你可以简单地使用IMEI。

  1. 向项目中添加一个新的Application类并让它初始化该字段(怀疑将它放在Const类中)。

    在Applications onCreate方法中,调用Const.setupDebug(getApplicationContext());

  2. 像这样实现setupDebug

    public class Const {

     private static boolean debug = false; public static boolean isDebug() { return debug; } private static void setDebug(boolean debug) { Const.debug = debug; } private static String [] DEBUG_DEVICES = new String[] { "000000000000000", "gfjdhsgfhjsdg" // add ur devices }; public static void setupDebug(Context context) { Arrays.sort(DEBUG_DEVICES); 
     TelephonyManager mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String imei = mTelephonyMgr.getDeviceId(); if (imei == null) imei = "000000000000000"; if(Arrays.binarySearch(DEBUG_DEVICES, imei) > -1) { setDebug(true); } 

    }

    }

  3. 从常量字段切换到常量方法。

    Const.isDebug()

使用Eclipse,我在工作区中创建了3个项目:

  • ApplicationProject

它是一个库项目包含所有源代码在values / refs.xml中我添加

 true 
  • ApplicationProjectDEBUG

使用ApplicationProject覆盖AndroidManifest和其他具有开发特定配置的xml文件在values / refs.xml中我添加

 true 
  • ApplicationProjectPROD

使用ApplicationProject覆盖AndroidManifest和其他具有生产特定配置的xml文件在值/ refs.xml中我添加

 false 

我从这个项目signe APK到商店