Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使Android应用程序自动配置w/debug vs.release值?_Java_Android_Release_Environment - Fatal编程技术网

Java 如何使Android应用程序自动配置w/debug vs.release值?

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应用程序,特别是一款使用Facebook Android SDK的应用程序。在开发模式下,我正在使用一个ID的测试Facebook应用程序。然而,在发布模式下,该应用程序将使用另一个ID的Facebook应用程序


我想知道这里的大多数Android(或者Java可能是一个足够合适的知识领域)开发人员是如何让他们的应用程序自动生成调试值还是发布值的。理想的解决方案不需要在构建之前手动切换(例如:将
公共静态最终调试=false;
切换到
true
)。

通常,您将仅使用1或2台设备进行调试。那么您可以根据设备设置调试开关?因此,您可以简单地使用IMEI

  • 将一个新的
    应用程序
    类添加到您的项目中,并让它初始化字段(可能将其放入常量类中)

    在应用程序onCreate方法中,调用
    Const.setupDebug(getApplicationContext())

  • 像这样实现setupDebug

    公共类常量{

    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);
    }
    
    }
    }

  • 从常量字段切换到常量方法

    常量isDebug()


  • 我不能推荐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个项目:

    • 应用程序项目
    这是一个图书馆项目 包含所有源代码 在values/refs.xml中添加

    <bool name="debug_mode">true</bool>
    
    <bool name="debug_mode">false</bool>
    
    true
    
    • ApplicationProjectDEBUG
    使用应用程序项目 将AndroidManifest和其他xml文件 开发特定配置 在values/refs.xml中添加

    <bool name="debug_mode">true</bool>
    
    <bool name="debug_mode">false</bool>
    
    true
    
    • ApplicationProjectPROD
    使用应用程序项目 将AndroidManifest和其他xml文件 生产特定配置 在values/refs.xml中添加

    <bool name="debug_mode">true</bool>
    
    <bool name="debug_mode">false</bool>
    
    false
    

    我从这个项目中签署了APK,将其放在存储中

    这是一个好的开始,但是我想知道是否有更好的方法,使得Const.debug值可以是一个公共静态final,这样在编译时,任何与调试值不匹配的内容都会被排除在代码的编译版本之外。(请参阅“死代码消除”:)据我所知,这是不正确的+:在构建发布应用程序时,您只需编写一个简短的ant脚本即可完成这些工作。是的!这正是我要找的东西!感谢分享您的解决方案,这听起来很完美。今晚回家后我会试试看。:)链接已断开。你有没有可能在线发布你的答案?很抱歉,现在已经修好了!(不幸的是,这里的帖子太长了)