您好,登錄后才能下訂單哦!
前言
在Android 應用程序開發中,不可避免地會常常輸出各種調試信息,通常我們會使用android.util.Log類輸出該類日志信息(這是推薦使用的方式)。然而,在項目發布的時候,我們常常需要關閉這些冗余的Log信息,手工關閉Log相當不方便,而且容易出現遺漏。
一種解決方案
package org.flyingcat.util; import android.util.Log; /** * @author Flyingcat * @create 2014-4-23 * @version 1.0 */ public class AppLog { private static final boolean LOG_DEBUG = true; public void d(String tag, String msg){ if (LOG_DEBUG){ Log.i(tag, msg); } } //省略重載方法…… }
這里展示了一種解決方案。這實際上是對標準Log的一個簡單包裝,在正式發布之前仍然需要手工將LOG_DEBUG變量的值設置為false,頻繁發布的時候比較麻煩。
ADT的新特性
ADT 17.0.0以上版本在Build之后,會在R.java的相同路徑下生成一個叫做BuildConfig.java的文件,內容非常簡單:
/** Automatically generated file. DO NOT MODIFY */ package org.flyingcat.androidcodelib; public final class BuildConfig { public final static boolean DEBUG = true; }
在ADT的更新說明中是這樣寫的:
Added a feature that allows you to run some code only in debug mode. Builds now generate a class called BuildConfig containing a DEBUG constant that is automatically set according to your build type. You can check the (BuildConfig.DEBUG) constant in your code to run debug-only functions.
大意是:
ADT17添加了一個新的特性,允許開發者僅在debug模式運行某些代碼。每次Build的時候會新生成一個BuildConfig類,包含一個DEBUG常量,這個常量會在Build的時候根據Build類型自動生成。你可以在代碼中測試(BuildConfig.DEBUG)常量來執行僅應在debug模式執行的代碼。
但實際上,有些時候并不能達到效果,為什么呢?
很顯然,我們可能使用方法不對。
如何確保關閉Log
既然Build的時候根據Build類型自動生成BuildConfig類,從Eclipse的Project的菜單中可以看出來,分為手動和自動兩種類型:
默認情況下,使用Eclipse生成的項目中bin目錄下的.apk文件,無論Build模式為哪種,DEBUG字段始終為true。這主要是由于Eclipse使用的是默認的android調試簽名debug.keystore,這個簽名被限制為debug mode,因此和release mode 的簽名略有不同。
但是,這并不是說使用Android Tools->Export Signed Application Package生成的.apk就是release mode!之前我記得我看的某些博客中講,只要使用AndroidTools導出的,DEBUG常量的值都是false,這是非常不正確和不負責任的,為此我還在客戶面前鬧過笑話::>_<::。【好吧你們知道我為什么要寫這個了】
經過多次測試,如果使用的是自動build,在簽名導出的時候生成的.apk很可能仍然是debug mode,即使是手動Build,偶爾也會出現這種情形【我使用的ADT版本為 22.3.0】。為了確保自己的.apk是release mode,建議每次發布的時候按照下列步驟執行:
取消自動Build;
Clean(會丟棄所有編譯好的狀態);
Export Signed Application Package.
有人說第三步應該是Build,之后才是Export,但導出的時候實際上會重新Build一次。一個明顯的例子是在Clean之后gen包變空了,但是執行Export之后它的內容又回來了。因此我認為可以略去這一步。
可以使用一個簡單的App測試發布方式是否為debug模式,其主要代碼如下。由于篇幅所限,這里不貼出運行截圖,有需要的同學可以在文末地址免費下載任意調戲,別玩壞了:-)。
//省略包聲明、導入語句 public class MainActivity extends Activity { private static final String LOG_TAG = "MainActivity"; private TextView textview; @Override protected void onCreate(Bundle savedInstanceState) { 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("This release is debug mode!"); } else{ textview.setText("This release is not debug mode."); } } }
附測試應用下載地址:http://down.51cto.com/data/1143476
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。