2013-01-09 23 views
-1

可能重複:
Remove all debug logging calls before publishing: are there tools to do this?發佈的應用程序顯示調試字符串?

也許我誤解的概念,但不調試日誌在未發行的應用程序應該只顯示消息?

我用「File」 - 「Export」編譯了我的應用程序,它應該刪除代碼中「Log.d(..)」所轉儲的所有消息。但是,當我運行Eclipse時運行通過USB連接的這個版本時,我看到各種調試消息在LogCat中公開顯示。

現在我有點驚慌了 - 據我所知,ProGuard應該在創建發佈版本時自動調用,但它似乎將調試註釋留在應用程序中(但除此之外似乎可以像函數名一樣工作混淆,我也可以在Logcat中看到)。

+0

這裏閱讀http://stackoverflow.com/a/2466662/849939它是已知問題 –

回答

0

發佈版本不會自動刪除日誌。並且,你不能(推薦),因爲你需要添加對方而對於下一個版本等發展中國家手動刪除它們,

最推薦的方法是使用Proguard的

它所做的是:將刪除字節碼中的日誌,使它們在源代碼中可用。

實施或使用:

不僅僅是刪除日誌

Remove all debug logging calls before publishing: are there tools to do this?

其他,proguard的幫助優化您的應用程序在許多方面。

http://proguard.sourceforge.net/

+0

但據我記得,在Eclipse下創建發佈版本時,Proguard會自動調用? – richey

+0

但它的殘疾。而且你需要配置它。或者至少知道什麼是基本配置,並且不會 –

0

它不會刪除日誌語句!您可以手動刪除它們,並在發佈應用程序的情況下將其作爲更新提交。

一個更好的方式是,創建一個類,像全局,並把它的標誌,它說isDevelopement

public class Globals 
{ 
    static boolean isDevelopment = 1; 

    public static void log(String tag, String message) 
    { 
     if(isDevelopment==1) 
     Log.d(tag,message); 
    } 
} 

而且在每一個地方,你有日誌聲明的地方,只是這樣稱呼它

Globals.log("TAG", "MESSAGE"); 

這樣,當您發佈時,您只需將isDevelopment更改爲0即可。日誌消失。當你做這個工作,你就必須將其更改爲1

希望這有助於

+0

@nitinreddy不推薦這種方法,因爲在這裏,日誌仍在創建中,但只是不顯示。所以,不會有任何性能提升。它只是爲了避免顯示日誌。雖然問題只是關於展示,但更好地使用最好的解決方案。 –

+0

你錯了。日誌不是寫在第一位。它不是關於展示,而是關於寫作。 – nithinreddy

0

我想我找到了問題的原因 - 我在本地有

-assumenosideeffects class android.util.Log { 
    public static *** d(...); 
    public static *** i(...); 
    public static *** v(...); 
} 

proguard-project.txt,但儘管有行

proguard.config=${sdk.dir}\\tools\\proguard\\proguard-android-optimize.txt:proguard-project.txt 

在我的項目。屬性文件,proguard-project.txt似乎永遠不會因爲任何原因而被使用。 我已經將日誌刪除參數添加到我的proguard-android-optimize.txt中,它現在可以工作,導出應用程序時會刪除日誌。

相關問題