欢迎访问我的技术博客Bigflower http://www.flowerfat.com
本文主旨:如何将LeakCanary 加入到Eclipse工程中,并成功使用它。搞了一天终于成功了。真是笨。
言归正传,具体什么是LeakCanary我就不多说了。在CSDN中搜它就能看到别人写的介绍 http://blog.csdn.net/ahence/article/details/46008681
因为是小白,github不是很会用,上面的zip下载下来不会导入到工程中,后来在刚刚的链接里的第一篇***小记中找到了别人弄好的Eclipse工程,真心感谢。于是下载之,import到我们的eclipse中。然后新建我们的demo,很简单:
第一步,添加lib:添加后可能会出现v4包重复的问题,这里只需要替换一下就可以了。在报错的地方告诉了你v4包的路径,我是把LeakCanary的v4包替换成了测试demo的v4包,有不明白的可以看这个连接:http://blog.csdn.net/jackrex/article/details/8984033 (我是替换的 不是删除)
第二步,这里面要注意了。我们要配置测试demo的Manifest,如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hehe"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:name="com.example.hehe.myApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<service
android:name="com.squareup.leakcanary.internal.HeapAnalyzerService"
android:enabled="false"
android:process=":leakcanary" />
<service
android:name="com.squareup.leakcanary.DisplayLeakService"
android:enabled="false" />
<activity android:name="com.squareup.leakcanary.internal.DisplayLeakActivity"/>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.hehe.TestActivity" />
</application>
</manifest>
其中 , 除了下面的两个测试demo中的activity。 上面的一个权限,两个service和一个activity都是要自己从LeakCanary工程copy过来的。很重要。
至于测试demo吧,其实这个也是从github上看到的,我就不多说了。下面是两个prj的下载链接 http://download.csdn.net/detail/liudehuaii18/8756841
有一点我不明白的。我下载别人的demo.apk,安装后有两个应用,有一个专门是用来看内存泄漏结果的,不过我的方法最后导出来虽然可以弹出警告通知,不过没有另外生成另一个app。这里也希望朋友们能给予帮助。
更新日志:2015-06-02 找到上面问题的原因了!其实Manifest里应该这么写:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hehe"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:name="com.example.hehe.myApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<service
android:name="com.squareup.leakcanary.internal.HeapAnalyzerService"
android:enabled="false"
android:process=":leakcanary" />
<service
android:name="com.squareup.leakcanary.DisplayLeakService"
android:enabled="false" />
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.hehe.TestActivity" />
<activity
android:name="com.squareup.leakcanary.internal.DisplayLeakActivity"
android:enabled="false"
android:icon="@drawable/__leak_canary_icon"
android:label="@string/__leak_canary_display_activity_label"
android:taskAffinity="com.squareup.leakcanary"
android:theme="@style/__LeakCanary.Base" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
注意把DisplayLeakActivity这个复制到工程里的时候放到我们工程的主activity的下面哈。 其他的位置无所谓。
有啥问题朋友们在评论里指出哈