【移動應(yīng)用開發(fā)技術(shù)】關(guān)于ADT中的BuildConfig.DEBUG_第1頁
【移動應(yīng)用開發(fā)技術(shù)】關(guān)于ADT中的BuildConfig.DEBUG_第2頁
【移動應(yīng)用開發(fā)技術(shù)】關(guān)于ADT中的BuildConfig.DEBUG_第3頁
【移動應(yīng)用開發(fā)技術(shù)】關(guān)于ADT中的BuildConfig.DEBUG_第4頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】關(guān)于ADT中的BuildConfig.DEBUG

前言在Android應(yīng)用程序開發(fā)中,不可避免地會常常輸出各種調(diào)試信息,通常我們會使用android.util.Log類輸出該類日志信息(這是推薦使用的方式)。然而,在項目發(fā)布的時候,我們常常需要關(guān)閉這些冗余的Log信息,手工關(guān)閉Log相當(dāng)不方便,而且容易出現(xiàn)遺漏。一種解決方案packageorg.flyingcat.util;

importandroid.util.Log;

/**

*@authorFlyingcat

*@create2014-4-23

*@version1.0

*/

publicclassAppLog{

privatestaticfinalbooleanLOG_DEBUG=true;

publicvoidd(Stringtag,Stringmsg){

if(LOG_DEBUG){

Log.i(tag,msg);

}

}

//省略重載方法……

}這里展示了一種解決方案。這實際上是對標(biāo)準(zhǔn)Log的一個簡單包裝,在正式發(fā)布之前仍然需要手工將LOG_DEBUG變量的值設(shè)置為false,頻繁發(fā)布的時候比較麻煩。ADT的新特性ADT17.0.0以上版本在Build之后,會在R.java的相同路徑下生成一個叫做BuildConfig.java的文件,內(nèi)容非常簡單:/**Automaticallygeneratedfile.DONOTMODIFY*/

packageorg.flyingcat.androidcodelib;

publicfinalclassBuildConfig{

publicfinalstaticbooleanDEBUG=true;

}在ADT的更新說明中是這樣寫的:Addedafeaturethatallowsyoutorunsomecodeonlyindebugmode.

BuildsnowgenerateaclasscalledBuildConfigcontainingaDEBUG

constantthatisautomaticallysetaccordingtoyourbuildtype.

Youcancheckthe(BuildConfig.DEBUG)constantinyourcodetorundebug-onlyfunctions.大意是:ADT17添加了一個新的特性,允許開發(fā)者僅在debug模式運行某些代碼。每次Build的時候會新生成一個BuildConfig類,包含一個DEBUG常量,這個常量會在Build的時候根據(jù)Build類型自動生成。你可以在代碼中測試(BuildConfig.DEBUG)常量來執(zhí)行僅應(yīng)在debug模式執(zhí)行的代碼。但實際上,有些時候并不能達(dá)到效果,為什么呢?很顯然,我們可能使用方法不對。如何確保關(guān)閉Log既然Build的時候根據(jù)Build類型自動生成BuildConfig類,從Eclipse的Project的菜單中可以看出來,分為手動和自動兩種類型:

默認(rèn)情況下,使用Eclipse生成的項目中bin目錄下的.apk文件,無論Build模式為哪種,DEBUG字段始終為true。這主要是由于Eclipse使用的是默認(rèn)的android調(diào)試簽名debug.keystore,這個簽名被限制為debugmode,因此和releasemode的簽名略有不同。但是,這并不是說使用AndroidTools->ExportSignedApplicationPackage生成的.apk就是releasemode!之前我記得我看的某些博客中講,只要使用AndroidTools導(dǎo)出的,DEBUG常量的值都是false,這是非常不正確和不負(fù)責(zé)任的,為此我還在客戶面前鬧過笑話::>_<::。【好吧你們知道我為什么要寫這個了】經(jīng)過多次測試,如果使用的是自動build,在簽名導(dǎo)出的時候生成的.apk很可能仍然是debugmode,即使是手動Build,偶爾也會出現(xiàn)這種情形【我使用的ADT版本為22.3.0】。為了確保自己的.apk是releasemode,建議每次發(fā)布的時候按照下列步驟執(zhí)行:取消自動Build;Clean(會丟棄所有編譯好的狀態(tài));ExportSignedApplicationPackage.有人說第三步應(yīng)該是Build,之后才是Export,但導(dǎo)出的時候?qū)嶋H上會重新Build一次。一個明顯的例子是在Clean之后gen包變空了,但是執(zhí)行Export之后它的內(nèi)容又回來了。因此我認(rèn)為可以略去這一步。可以使用一個簡單的App測試發(fā)布方式是否為debug模式,其主要代碼如下。由于篇幅所限,這里不貼出運行截圖,有需要的同學(xué)可以在文末地址免費下載任意調(diào)戲,別玩壞了:-)。//省略包聲明、導(dǎo)入語句

publicclassMainActivityextendsActivity{

privatestaticfinalStringLOG_TAG="MainActivity";

privateTextViewtextview;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Log.i(LOG_TAG,"Hello,Flyingcat.");

textview=(TextView)findViewById(R.id.textView1);

if(BuildConfig.DEBUG){

textview.setText("Thisreleaseisdebug

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論