Pre
假定APK所在包为net.clasnake.project
,工程主目录为/folder
。
Step 1 插桩
首先下载EmmaInstrument.rar,解压后包含四个文件:
EmmaInsrumentation.java
FinishListener.java
InstrumentedActivity.java
SMSInstrumentedReceiver.java
将文件夹EmmaInstrument复制到/folder/src
下。 将上述四个java文件的包名修改为net.clasnake.project.EmmaInstrument
,并令InstrumentedActivity
继承自项目的主Activity。 然后修改AndroidManifest.xml
,加入SMSInstrumentedReceiver
、EmmaInstrumentationActivity
:
<receiver android:name="net.clasnake.project.EmmaInstrument.SMSInstrumentedReceiver">
<intent-filter>
<action android:name="edu.gatech.m3.emma.COLLECT_COVERAGE"/>
</intent-filter>
</receiver>
<activity android:label="EmmaInstrumentationActivity" android:name="net.clasnake.project.EmmaInstrument.InstrumentedActivity"/>
加入插桩标签,并允许写SD卡权限:
<instrumentation android:handleProfiling="true" android:label="EmmaInstrumentation" android:name="net.clasnake.project.EmmaInstrument.EmmaInstrumentation" android:targetPackage="net.clasnake.project"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Step 2 重编译、安装
连接设备至adb,首先android update project
更新项目,生成build.xml
,以便使用ant。
然后编译插桩版本:ant instrument
。
安装:ant installi
。
Step 3 测试
启动插桩版本: adb shell am instrument net.clasnake.project/net.clasnake.project.EmmaInstrument.EmmaInstrumentation
进行测试,结束后使用后退键退出应用。
从设备中得到coverage.ec:adb pull /mnt/sdcard/coverage.ec
从/folder/bin中得到coverage.em
,该文件中包含了待测APP的结构信息,将其与coverage.ec
放置同一目录下,然后生成覆盖率报告:
java -cp ~/adt/sdk/tools/lib/emma.jar emma report -r html -in coverage.em,coverage.ec
。
在同目录下的coverage文件夹下生成覆盖率报告: