91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于ADT中的BuildConfig.DEBUG

發布時間:2020-09-17 14:57:41 來源:網絡 閱讀:1927 作者:飛翔的貓咪 欄目:移動開發

前言

在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的菜單中可以看出來,分為手動和自動兩種類型:

關于ADT中的BuildConfig.DEBUG     關于ADT中的BuildConfig.DEBUG

默認情況下,使用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,建議每次發布的時候按照下列步驟執行:

  1. 取消自動Build;

  2. Clean(會丟棄所有編譯好的狀態);

  3. 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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

济阳县| 紫金县| 古丈县| 信宜市| 霍州市| 肥西县| 常山县| 山东省| 临邑县| 永嘉县| 克什克腾旗| 镇康县| 平顶山市| 双牌县| 正镶白旗| 佛坪县| 钟山县| 无为县| 兰坪| 海盐县| 舟曲县| 云和县| 正安县| 海南省| 永德县| 阿荣旗| 仙游县| 通城县| 施秉县| 资讯| 乐陵市| 鹤壁市| 章丘市| 永丰县| 黄浦区| 余干县| 永修县| 望都县| 永登县| 合肥市| 鄯善县|