如何使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。
-
向项目中添加一个新的
Application
类并让它初始化该字段(怀疑将它放在Const类中)。在Applications onCreate方法中,调用
Const.setupDebug(getApplicationContext());
-
像这样实现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); }
}
}
-
从常量字段切换到常量方法。
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到商店