Java 如何使Android应用程序自动配置w/debug vs.release值?
我正在开发一款Android应用程序,特别是一款使用Facebook Android SDK的应用程序。在开发模式下,我正在使用一个ID的测试Facebook应用程序。然而,在发布模式下,该应用程序将使用另一个ID的Facebook应用程序Java 如何使Android应用程序自动配置w/debug vs.release值?,java,android,release,environment,Java,Android,Release,Environment,我正在开发一款Android应用程序,特别是一款使用Facebook Android SDK的应用程序。在开发模式下,我正在使用一个ID的测试Facebook应用程序。然而,在发布模式下,该应用程序将使用另一个ID的Facebook应用程序 我想知道这里的大多数Android(或者Java可能是一个足够合适的知识领域)开发人员是如何让他们的应用程序自动生成调试值还是发布值的。理想的解决方案不需要在构建之前手动切换(例如:将公共静态最终调试=false;切换到true)。通常,您将仅使用1或2台设
我想知道这里的大多数Android(或者Java可能是一个足够合适的知识领域)开发人员是如何让他们的应用程序自动生成调试值还是发布值的。理想的解决方案不需要在构建之前手动切换(例如:将
公共静态最终调试=false;
切换到true
)。通常,您将仅使用1或2台设备进行调试。那么您可以根据设备设置调试开关?因此,您可以简单地使用IMEI
应用程序
类添加到您的项目中,并让它初始化字段(可能将其放入常量类中)
在应用程序onCreate方法中,调用Const.setupDebug(getApplicationContext())代码>
公共类常量{
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);
}
}
}
我不能推荐IMEI方法。。。它的主要问题是并不是所有的Android设备都会有IMEIs。更好的方法是检查用于签名.apk的签名
<bool name="debug_mode">true</bool>
你问我已经有一段时间了,但我想我应该分享一下我是怎么做的 正如Sebastian所暗示的,Ant脚本可以为您处理该更改,并生成您正在寻找的静态最终常量。您可以配置IntelliJ或Eclipse使其几乎无缝
我试图详细说明我采取的不同步骤,如果有帮助,请告诉我。我知道在发布之前我从来不用做任何手动更改,这是一种很好的解脱 我使用了一种稍微普通一点的方法(以防您仍然对解决方案感兴趣) 在应用程序启动时,我的应用程序检查是否存在存储在/sdcard/中的文本文件。我使用的每个应用程序都会查找一个特定的文件,如“applicationdebug.txt”。如果文件存在,那么应用程序将进入调试模式,并开始使用日志语句和my debug Facebook密钥等进行详细说明
然后,我只需将设备上的文件删除(或重命名)为,以查看应用程序在发布模式下的性能。在eclipse ADT 17.0及更高版本中,有一个新特性。检查用代码自动生成的BuildConfig.DEBUG
有关更多信息,请参见使用Eclipse I在工作区中创建3个项目:
- 应用程序项目
<bool name="debug_mode">true</bool>
<bool name="debug_mode">false</bool>
true
- ApplicationProjectDEBUG
<bool name="debug_mode">true</bool>
<bool name="debug_mode">false</bool>
true
- ApplicationProjectPROD
<bool name="debug_mode">true</bool>
<bool name="debug_mode">false</bool>
false
我从这个项目中签署了APK,将其放在存储中这是一个好的开始,但是我想知道是否有更好的方法,使得Const.debug值可以是一个公共静态final,这样在编译时,任何与调试值不匹配的内容都会被排除在代码的编译版本之外。(请参阅“死代码消除”:)据我所知,这是不正确的+:在构建发布应用程序时,您只需编写一个简短的ant脚本即可完成这些工作。是的!这正是我要找的东西!感谢分享您的解决方案,这听起来很完美。今晚回家后我会试试看。:)链接已断开。你有没有可能在线发布你的答案?很抱歉,现在已经修好了!(不幸的是,这里的帖子太长了)