2015-05-13 79 views
7

LeakCanary是Android和Java的內存泄漏檢測庫。 LeakCanary如何使用leakcanary,如何添加leakcanary作爲jar來構建apk文件.mk文件

我的項目是基於android make文件系統,它依賴於一些android內部接口和自定義方法。

如何將LeakCanary作爲lib添加到我的應用程序中以檢測內存泄漏。

我的解決方案: 首先,我必須將LeakCanary構建爲jar文件,但是如何構建。因爲它是一個gradle目錄結構,我以前從未使用過Gradle。

任何提示都是寶貴的。

+0

並非所有Android庫都可以構建到jar中,especiall在其庫(res目錄)中使用Android資源。你可以在你的項目中加入.aar庫嗎? –

+0

您可以使用命令行中的maven構建您的項目。它包含LeakCanary作爲aar併成功構建apk,您可以稍後手動安裝並使用它。但是如果你想從IDE構建,可能並不那麼簡單 - 閱讀下面的答案。 – Deepscorn

回答

1

LeakCanary不僅僅是一個JAR--它不僅包含Java代碼,還包含資源(例如png)。如果您使用的是ANT,那麼您唯一能做的就是將LeakCanary作爲一個圖書館項目。但我強烈建議切換到gradle。因爲Android開發團隊不支持在最近的將來以任何用戶友好的方式導入任何不僅僅是jar的庫(因爲gradle是優先的)。導入爲圖書館項目是一個痛苦的過程,當它有時也將圖書館的依賴也包括在圖書館項目中時,這會變得更加痛苦。我很早以前就已經手動完成了,只是因爲客戶端使用eclipse和ant進行大型項目已經很久了。一般情況下,你必須做到以下幾點:

  1. 獲取來源:源代碼,資產,資源...
  2. 調查LeakCanary的依賴。你可以看看「POM對象模型」here
  3. 對於不僅僅包含java代碼的依賴關係,您需要再次將它們包含爲庫。對於其他人,只需將它們下載爲jar。
  4. 對於資產(例如字體),還有一個額外的步驟:您必須將它們複製到正在處理的項目中,否則會得到資源未找到異常。
  5. 最後一步是啓用清單合併。以下行添加到項目中的project.properties:

    manifestmerger.enabled =真

這是爲了從庫項目合併所有的AndroidManifest.xml成最終的apk。

+0

更多信息:https://commonsware.com/blog/2014/07/03/consuming-aars-eclipse.html。順便說一下,我已經嘗試了maven插件,大約半年前在那裏提到。但它是越野車。Maven使用命令行包含aar來成功構建項目,但是當涉及到Eclipse集成時,事情變得很奇怪 - 我每10次運行只有1次成功構建,而無需更改任何內容。 – Deepscorn

0

你需要的是安裝gradle,然後在庫的漏洞金絲雀目錄中調用「gradle assembleRelease」。如果一切都找到了,你會在build/outputs目錄下得到幾個aars文件。這些是android庫。你應該引用他們作爲任何其他的Android庫。

5

對於Leak Canary,您應該使用Android Studio。 在Android Studio中, 在你的build.gradle,添加此

dependencies { 
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1' 
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1' 
} 

而在你的應用程序類,加入這一行LeakCanary.install(本);中的onCreate()這樣的

public class ExampleApplication extends Application { 

    @Override public void onCreate() { 
    super.onCreate(); 
    LeakCanary.install(this); 
    } 
} 

方法遵循有關詳細信息,該鏈接https://github.com/square/leakcanary

希望這可能會有所幫助。

+0

它像一個魅力工作,謝謝。這應該是公認的答案,因爲它是簡單,整潔和乾淨的答案。 –

6

這需要成爲您的應用程序的一部分,以便leakcanary工作。

public class ExampleApplication extends Application { 

@Override public void onCreate() { 
    super.onCreate(); 
    LeakCanary.install(this); 
} 
} 

但是這是令人困惑,因爲我們大多數人不寫這類類的直接周圍擴展應用程序類,一個工作,而一個簡單的語句將解決這個問題,

public class YourClass extends Activity{//AppCompatActivity, A ctionBarActivity or anything 

@Override public void onCreate() { 
    super.onCreate(); 
    LeakCanary.install(getApplication()); 
} 
} 

希望這幫助!

其更好地調用此方法在

onPostCreate() 
0

這個答案可能是你太晚了,但它可能會幫助別人。可以在常規項目中將更多通過gradle公開的項目添加爲jar文件。

Gradle只是一個構建工具。這些java庫在一天結束時需要一大堆jar文件。所以我做的是以下...

  1. 如果還不是這樣的話,請安裝Android Studio。
  2. 創建一個基於gradle的項目,您可以在其中簡單添加所需的依賴關係。
  3. 同步項目,以便它處理gradle文件並更新外部庫。
  4. 在項目資源管理器中,找到並展開「外部庫」,你會發現你的jar文件。
  5. 將jar文件複製到其他項目所需的任何位置,然後瞧。

我這樣做是爲了導入整個或部分Google Play庫以及其他許多庫。事實上,這對我來說是一種常見的做法。

現在,正如Deepscorn所說的那樣,我注意到LeakCanary有一些明顯包含Android資源的res /文件夾......我現在非常需要在Titanium SDK中包含LeakCanary。所以我將以同樣的方式繼續,但是這一次,我會將這些資源添加到鈦項目的資源文件夾中,看看會發生什麼。

資源最終被包含在整個項目中並可用。我並未脫離android資源範圍。你只需要R ...或... getIdentifier(...)來獲取它們。

您還需要確保AndroidManifest條目被複制到將被編譯的AndroidManifest文件中。

如果我有時間,我會在此發佈我的結果。與此同時,任何人都可以嘗試併發布一些反饋意見。