第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在將應(yīng)用程序發(fā)布到GooglePlay之前,如何刪除所有調(diào)試日志調(diào)用?

在將應(yīng)用程序發(fā)布到GooglePlay之前,如何刪除所有調(diào)試日志調(diào)用?

ibeautiful 2019-07-01 11:06:32
在將應(yīng)用程序發(fā)布到GooglePlay之前,如何刪除所有調(diào)試日志調(diào)用?根據(jù)谷歌的說法,我必須“禁用源代碼中對(duì)日志方法的任何調(diào)用“在發(fā)布我的Android應(yīng)用程序之前,摘錄自出版清單:在生成要發(fā)布的應(yīng)用程序之前,請(qǐng)確保禁用日志記錄并禁用調(diào)試選項(xiàng)。您可以通過刪除源文件中對(duì)日志方法的調(diào)用來禁用日志記錄。我的開源項(xiàng)目很大,每次發(fā)布時(shí)手工操作都很痛苦。此外,刪除日志行可能很棘手,例如:if(condition)   Log.d(LOG_TAG, "Something");data.load();data.show();如果我對(duì)Log行進(jìn)行注釋,則條件將應(yīng)用于下一行,而LOAD()不被調(diào)用。這樣的情況是否很罕見,以至于我可以決定它不應(yīng)該存在?這是在官方的清單上,所以我想很多人經(jīng)常這樣做。那么,如何有效而安全地刪除所有的日志線路呢?
查看完整描述

3 回答

?
30秒到達(dá)戰(zhàn)場(chǎng)

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊

我發(fā)現(xiàn)一個(gè)更容易的解決辦法是忘掉所有if到處檢查然后用ProGuard剔除任何Log.d()Log.v()方法調(diào)用Ant時(shí)調(diào)用release目標(biāo)。

這樣,我們就可以將調(diào)試信息輸出到常規(guī)構(gòu)建中,而不必為發(fā)布版本進(jìn)行任何代碼更改。ProGuard還可以對(duì)字節(jié)碼進(jìn)行多次傳遞,以刪除其他不需要的語句、空塊,并可以在適當(dāng)情況下自動(dòng)內(nèi)聯(lián)簡短的方法。

例如,下面是用于Android的非常基本的ProGuard配置:

-dontskipnonpubliclibraryclasses-dontobfuscate-forceprocessing-optimizationpasses 5-keep class * extends android.app.Activity-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);}

因此,您可以將其保存到一個(gè)文件中,然后從Ant調(diào)用ProGuard,傳入您正在使用的剛編譯的JAR和Android平臺(tái)JAR。

另見實(shí)例在護(hù)衛(wèi)隊(duì)手冊(cè)里。


更新(4.5年后):現(xiàn)在我用木材用于Android日志記錄。

它不僅比默認(rèn)的好一點(diǎn)Log實(shí)現(xiàn)-日志標(biāo)記是自動(dòng)設(shè)置的,并且很容易記錄格式化的字符串和異常-但是您也可以在運(yùn)行時(shí)指定不同的日志記錄行為。

在本例中,日志記錄語句只會(huì)在我的應(yīng)用程序的調(diào)試構(gòu)建中寫入logcat:

木材建在我的Application onCreate()方法:

if (BuildConfig.DEBUG) {
  Timber.plant(new Timber.DebugTree());}

然后,在我的代碼中的其他地方,我可以輕松地記錄:

Timber.d("Downloading URL: %s", url);try {
  // ...} catch (IOException ioe) {
  Timber.e(ioe, "Bad things happened!");}

木材樣品應(yīng)用程序更高級(jí)的例子是,在開發(fā)過程中,所有的日志語句都被發(fā)送到logcat,在生產(chǎn)過程中,沒有記錄調(diào)試語句,但是錯(cuò)誤會(huì)悄悄地報(bào)告給Crashlytics。


查看完整回答
反對(duì) 回復(fù) 2019-07-01
?
揚(yáng)帆大魚

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊

我建議在某個(gè)地方設(shè)置一個(gè)靜態(tài)布爾值,指示是否進(jìn)行日志記錄:

class MyDebug {
  static final boolean LOG = true;
}

然后,無論您想在哪里登錄代碼,只需這樣做:

if (MyDebug.LOG) {
  if (condition) Log.i(...);
}

現(xiàn)在,當(dāng)您將MyDebug.LOG設(shè)置為false時(shí),編譯器將刪除這些檢查中的所有代碼(因?yàn)樗且粋€(gè)靜態(tài)的最終結(jié)果,它在編譯時(shí)知道代碼不被使用)。

對(duì)于較大的項(xiàng)目,您可能希望開始在單個(gè)文件中使用布爾值,以便能夠在需要時(shí)輕松地啟用或禁用在那里的日志記錄。例如,這些是窗口管理器中的各種日志常量:

static final String TAG = "WindowManager";static final boolean DEBUG = false;static final boolean DEBUG_FOCUS = false;static final boolean DEBUG_ANIM = false;static final boolean DEBUG_LAYOUT = false;static final boolean DEBUG_RESIZE = false;static final boolean DEBUG_LAYERS = false;static final boolean DEBUG_INPUT = false;static final boolean DEBUG_INPUT_METHOD = false;static final boolean DEBUG_VISIBILITY = false;static final boolean DEBUG_WINDOW_MOVEMENT = false;static final boolean DEBUG_ORIENTATION = false;static final boolean DEBUG_APP_TRANSITIONS = false;static final boolean DEBUG_STARTING_WINDOW = false;static final boolean DEBUG_REORDER = false;static final boolean DEBUG_WALLPAPER = false;static final boolean SHOW_TRANSACTIONS = false;static final boolean HIDE_STACK_CRAWLS = true;static final boolean MEASURE_LATENCY = false;

具有相應(yīng)的代碼,如:

    if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT) Log.v(
        TAG, "Adding window " + window + " at "
        + (i+1) + " of " + mWindows.size() + " (after " + pos + ")");


查看完整回答
反對(duì) 回復(fù) 2019-07-01
  • 3 回答
  • 0 關(guān)注
  • 673 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)