3

我想要一个final变量,true当我运行我的项目的调试版本时,false当我运行运行版本时。我知道我可以通过构建配置来做到这一点,但不知道如何在 Eclipse 中进行设置。Stack Exchange 上似乎没有任何关于具体定义变量的教程或问题。

我在 Eclipse Classic 4.2 中编译 Java,使用 ADT 插件创建一个 Android 应用程序。


编辑:根据@Xavi,我设置了以下内容:

    try {
        String line = null;
        java.lang.Process p = Runtime.getRuntime().exec("getprop debugging");
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((line = input.readLine()) != null) {
            Log.d("Property:", line); //<-- Parse data here.
        }
        input.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

在 Debug Configurations 窗口的 Target 选项卡的“Additional Emulator Command Line Options”字段中,我输入了:

-prop debugging=true

不幸的是,这看起来只适用于模拟器模式。在我的手机上运行时它不会打印任何内容。(它在模拟器上运行良好。)


编辑:根据@Sharks,我发现了一些似乎相关的链接,但我不知道如何将它们应用于我的情况:

4

3 回答 3

4

如果您使用 ADT 在 Eclipse 中工作,那么您可以检查 variable BuildConfig.DEBUG。它是自动生成的并放置在gen/<package>/BuildConfig.java

if (BuildConfig.DEBUG) {
   variable = true;
}
于 2012-09-06T09:49:40.210 回答
1

除了@Yury's answer之外,您还可以-prop debugging=trueAdditional Emulator Command Line Options中使用并在运行时通过以下方式检查它Runtime.getRuntime().exec("getprop debugging")

调试配置截图

此外,您可能会发现以下问题很有用:Android:发布和测试模式?

于 2012-09-06T09:17:35.803 回答
0

好的,因为命令行参数对你不起作用;Eclipse 不适合你,所以为什么不试试这样的东西

  • 在您的 APK 资产中放置一个配置文件。
  • 在变量赋值之前读取静态块中的文件
  • 根据您在文件中读取的内容分配您的调试值...

    private ByteArrayOutputStream getAssetFileAsByteArrayOutputStream(String filename)
    {
    AssetManager assetManager = this.getAssets();
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();//  OutputStream(helper);
    try
    {
        final InputStream assetFile = assetManager.open(filename, AssetManager.ACCESS_RANDOM);
        byte readBuffer[] = new byte[1024 * 64];    //64kB
        int byteCount;
        while ((byteCount = assetFile.read(readBuffer)) > 0)
            byteStream.write(readBuffer, 0, byteCount);
        byteStream.flush();
        //          copiedFileStream.close();
    } catch (IOException e)
    {
    }
    return byteStream;
    }
    

然后在初始化最终(const)值之前,要么放置一个静态块

  static 
  {
       //read file
       //get the value you want
  }
  public final static Variable myVar = valFromFile ? "DEBUG" : "NORMAL";

或者只是将 finalized 变量的初始化移动到构造函数,您可以在那里初始化 final vars。

于 2012-09-07T09:01:07.773 回答