有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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


共 (6) 个答案

  1. # 2 楼答案

    你问我已经有一段时间了,但我想我应该分享一下我是怎么做的

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

    我试图详细说明我采取的不同步骤,如果有帮助,请告诉我。我知道在发布之前我从来不用做任何手动更改,这是一种很好的解脱

  2. # 3 楼答案

    我不能推荐IMEI方法。。。它的主要问题是,并不是所有的安卓设备都会有iMIS。更好的方法是检查用于签名的签名。阿普克

    // 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();
    }
    
  3. # 4 楼答案

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

    1. 向项目中添加一个新的Application类,并让它初始化该字段(可能需要将其放入Const类中)

      在应用程序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. 从常量字段切换到常量方法

      康斯特。isDebug()

  4. # 5 楼答案

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

    • 应用程序项目

    这是一个图书馆项目 包含所有源代码 在值/参考中。我添加的xml

    <bool name="debug_mode">true</bool>
    
    • ApplicationProjectDEBUG

    使用ApplicationProject 覆盖AndroidManifest和其他xml文件 特定于开发的配置 在值/参考中。我添加的xml

    <bool name="debug_mode">true</bool>
    
    • ApplicationProjectPROD

    使用ApplicationProject 覆盖AndroidManifest和其他xml文件 特定于生产的配置 在值/参考中。我添加的xml

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

    我从这个项目中签了APK,把它放在商店里

  5. # 6 楼答案

    我使用了一种稍微平淡一点的方法(以防你仍然对解决方案感兴趣)

    在应用程序启动时,我的应用程序检查是否存在存储在/sdcard/中的文本文件。我使用的每个应用程序都会寻找一个特定的文件,比如“applicationdebug.txt”。如果文件存在,那么应用程序将进入调试模式,并开始使用日志语句和我的调试Facebook密钥等详细信息

    然后,我只需将文件删除(或重命名)到设备上,以查看应用程序在发布模式下的性能