3

プロジェクトのデバッグ バージョンを実行するときと、実行バージョンを実行するときのfinal変数が必要です。ビルド構成でこれを実行できることは理解していますが、Eclipse でこれをセットアップする方法がわかりません。特に変数の定義に関する Stack Exchange に関するチュートリアルや質問はないようです。truefalse

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の回答に加えて-prop debugging=true追加のエミュレーターコマンドラインオプションで使用し、実行時に次の方法で確認できますRuntime.getRuntime().exec("getprop debugging")

デバッグ構成のスクリーンショット

また、次の質問が役に立つかもしれません: Android: Release and testing mode?

于 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";

または、ファイナライズされた変数の初期化をコンストラクターに移動するだけで、そこで最終的な変数を初期化できます。

于 2012-09-07T09:01:07.773 に答える