android - tools - ADT何時將BuildConfig.DEBUG設置為false?




eclipse luna (8)

創建自己的班級的一個好方法是:

public class Log {

public static void d(String message) {
    if (BuildConfig.DEBUG)
        android.util.Log.d(
            "[" + (new Exception().getStackTrace()[1].getClassName()) + "]",
            "{" + (new Exception().getStackTrace()[1].getMethodName()) + "} "
            + message
        );
}

}

在最新版本的ADT(r17)中,生成的常量添加了根據構建類型設置的BuildConfig.DEBUG 。 我遇到的問題是,它從來沒有設置為false,我希望它在執行“Android工具 - >導出簽名的應用程序包”時發生變化,但它不適用於我。

那麼如何更改構建類型?

增加了一項功能,只允許您在調試模式下運行一些代碼。 Builds現在生成一個名為BuildConfig的類,其中包含一個根據構建類型自動設置的DEBUG常量。 您可以檢查代碼中的(BuildConfig.DEBUG)常量以運行僅調試功能


Eclipse中 ,我始終在發布中導出應用程序之前禁用“自動構建”選項。 然後我清理項目並導出。 否則它開始以調試模式編譯,然後BuildConfig.DEBUG的值可能是錯誤的。

使用Android Studio ,我只需在build.gradle中添加自己的自定義變量:

buildTypes {
    debug {
        buildConfigField "Boolean", "DEBUG_MODE", "true"
    }
    release {
        buildConfigField "Boolean", "DEBUG_MODE", "false"
    }
}

當我構建項目時,BuildConfig.java如下生成:

public final class BuildConfig {
  // Fields from build type: debug
  public static final Boolean DEBUG_MODE = true;
}

然後在我的代碼中,我可以使用:

if (BuildConfig.DEBUG_MODE) {
    // do something
}

我建議在切換調試/發布版本後進行清理。


它不能正常工作:

問題27940 :對於導出的應用程序包,BuildConfig.DEBUG為“true”

令人失望的是,他們有時會發布錯誤的功能。


它確實有效,但請注意,即使導出簽名文件,代碼文件也不會更改。 導出過程將此變量的值更改為false,這可能會給您錯誤的印象,即它不起作用。 我用類似的日誌語句來測試它

if (com.mypackage.BuildConfig.DEBUG)
            Log.d(TAG, location.getProvider() + " location changed");

測試時,我的Log語句不再產生任何輸出。


我的解決方案:

  1. 項目 - >自動生成
  2. 項目 - >清潔
  3. 項目 - >構建
  4. 項目導出Android應用程序

這是在r20工作


據我了解,無法正常工作( Android問題22241

我在項目(使用Eclipse)上遇到了一些麻煩,在導出我的項目的簽名APK時,該常量沒有設置為true :(

很想听聽它的作品


當BuildConfig中的值設置為最終值時,我已經看到了一些奇怪的行為。 這可能與您的問題有關。

簡單的解釋是默認值是在Proguard運行之前初始設置的,然後在Proguard運行之後,BuildConfig文件將重新生成適當的值。 但是,Proguard已經通過這一點優化了您的代碼,並且您遇到了問題。

這是我針對Gradle創建的一個錯誤。 https://code.google.com/p/android/issues/detail?id=182449


目前,通過禁用“自動構建”,清理項目,然後通過“Android工具 - >導出簽名的應用程序包”導出,您可以獲得正確的行為。 當你運行應用程序時, BuildConfig.DEBUG應該是false。





adt