回答

5

它們不完全相同。

可能有很多buildType s,但debugrelease是強制性的。如果當前選擇的構建類型爲debug,則BuildConfig.DEBUG將爲true,否則將爲false(參見下面的排除情況)。

ApplicationInfo.FLAG_DEBUGGABLE對應於以下內容:

 

    buildTypes { 
     debug { 
      debuggable true 
     } 

     ... 
    } 
 

現在,ApplicationInfo.FLAG_DEBUGGABLEtrue

因此,你可以得出結論,你可以執行如下:

 

    buildTypes { 
     debug { 
      debuggable false 
     } 

     ... 
    } 
 

有趣的是,儘管你是在debug生成類型,BuildConfig.DEBUG將成爲false

+0

Debuggable爲false時調試的用途是什麼? – Elye

+0

我不能提醒這種情況,對不起。 – azizbekian

2

在這裏找到一篇好文章:http://tekeye.biz/2013/android-debug-vs-release-build

也測試過了。如果我們強迫android:debuggable="false"android:debuggable="true"清單上的應用,它會發出警告:

Avoid hardcoding the debug mode; leaving it out allows debug and release builds to automatically assign one less... 

It's best to leave out the android:debuggable attribute from the manifest. If you do, then the tools will automatically insert android:debuggable=true when building an APK to debug on an emulator or device. And when you perform a release build, such as Exporting APK, it will automatically set it to false. 
If on the other hand you specify a specific value in the manifest file, then the tools will always use it. This can lead to accidentally publishing your app with debug information. 

我可以得出結論,在默認情況下ApplicationInfo.FLAG_DEBUGGABLE通過改變android:debuggable,這是不是明智的行爲一樣BuildConfig.DEBUG,除非覆蓋。

BuildConfig.DEBUG相比,ApplicationInfo.FLAG_DEBUGGABLE是一種更可靠的檢查調試版本的方法,因爲在較低的依賴模塊下,它不能訪問父模塊的BuildConfig.DEBUG,並且可能具有不同的值。

例如應用程序使用MyLib模塊。應用的BuildConfig.DEBUG可能是錯誤的,但MyLib BuildConfig.DEBUG可能是真實的。因此,最好使用ApplicationInfo.FLAG_DEBUGGABLE

0

我的經驗是,BuildConfig.DEBUG總是鏈接到gradle文件中的debuggable構建屬性。

buildTypes { 
    debug { 
     debuggable true 
    } 
    debug { 
     debuggable false 
    } 

    ... 
} 

documentation也支持這一點:

  • 布爾DEBUG - 如果構建可調試。

getContext().getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE很可能以確定是否構建了gradle這個構建系統之前是可調試和Android工作室更換蝕2015年

各地使用BuildConfig.DEBUG,因爲它解析爲可以使用恆定的唯一途徑在編譯期間優化代碼。

相關問題