ubuntu下配置android自动化测试环境+Jenkins持续构建
2014-10-30 17:09
260 查看
菜鸟一枚,详细记录各种步骤。
一、安装Jenkinshttp://jenkins-ci.org/。(由于服务器已装好,略过)
二、安装android sdk、platforms、simulator images
1.下载android sdk到Ubuntu服务器。本机是mac操作系统,需远程连接到服务器,所以基本靠靠终端命令来进行。
a.连接到服务器,可用命令如:ssh root@10.0.90.61 或者是 ssh -l root 10.0.90.61 表明是用root身份登陆。回车输入pwd
b.进入相关目录下,准备下载文件, 如 cd /opt/android_test/
c.利用命令下载:wget http://dl.google.com/android/android-sdk_r23.0.2-linux.tgz
d.解压文件夹:tar zxvf android-sdk_r23.0.2-linux.tgz,解压后的文件夹名:android-sdk-linux
e.将解压后的文件夹放到 /usr/local/下:sudo mv android-sdk-linux /usr/local/
2.安装各种东西
a.进入相关目录下: cd /usr/local/android-sdk-linux/tools
b.运行android sdk: ./android (前提是tools 文件夹里面有android这个可执行文件),我执行完这个文件后有报错,报错信息如下
问题原因:该命令试图弹出一个图形界面,但是由于是ssh连接没有办法弹出,所以报错。
解决方式:相当于没解决,直接跑到机房,在服务器上重复步骤2(a), 2(b)
c.安装platforms 和 相应packages,下面的这些东西都要安装上
如果遇到报错如“Stopping ADB server failed (code -1).”,先不用管它。
如果在下载的时候一个劲地连不上,报错如下
Failed to fetch URL https://dl-ssl.google.com/android/repository/sys-img/android-tv/sys-img.xml, reason:
SSLPeerUnverified peer not authenticated
或者:Download
interrupted: Connection to http://dl-ssl.google.com refused Download
interrupted: Read timed out
各种解决方式,比如说
(1)挂代理
(2)强制转换https 到 http(tools->opinion中可以看到),
(3)添加地址到hosts. vi /etc/hosts->添加
# for android
74.125.237.1 dl-ssl.google.com
然后保存。
貌似前两个效果都不是很好,但是别别扭扭用了我好两三天的时间终于下下来了
d.添加环境变量
(1) vi
environment
(2) 在PATH= “”里面添加:/usr/local/android-sdk-linux
三、安装Jenkins插件:android simulator plugin
1.访问页面 服务器地址:8080 如10.0.90.61:8080 打开Jenkins
2.系统管理->管理插件->搜索android simulator plugin,勾选,然后点击直接安装,进入安装界面,等待安装完成
红色的报错,我没有理它,安装完成就好了。
四、Jenkins设置,新建job
1.Jenkins系统设置
a.系统管理->系统设置->Android 设置sdk root,但是这里我遇到一个问题,如图
问题原因:据广大网友说 是因为Jenkins用户没有访问root的权限,所以有这个报错
解决方式:更改文件属主为Jenkins用户:
2.新建job(前提,安装git,ant,jdk)
a.新建一个自由风格的job
b.源码管理->git->贴入代码下载地址。保存,并立即构建。这一步的作用是讲android project抓下来,代码地址:~/jobs/android_build/workspace
c.执行ant clean debug,报错如下:
问题原因:没有生成build.xml在/usr/local/android-sdk/tools/ant/build.xml
解决方法:cd到/usr/local/android-sdk/tools下面,build一个文件
(2)执行 ./android
update project -p ~/jobs/android_build/workspace,报错如下:
问题原因:没有指定target
解决方法:执行 ./android update project -p ~/jobs/android_build/workspace -t 1 -s(-p后面是project的路径,-t后面的1指的是target id,查看机器的target
id,利用命令 android list targets;-s的意思是下面的子文件也要更新。如果还不明白,直接执行 android update project 然后看看提示,就知道那句是什么意思了)
(3)重新执行ant clean debug, 继续报错
问题原因:据网友说是因为由于是64bit的系统,而Android sdk只有32bit的程序,需要安装ia32-libs。
(4)安装ia32-libs
root@hf61:~# sudo apt-get install ia32-libs
sudo: unable to resolve host hf61.sumilux.com
标红的表示报错略有不同
(6) 安装libstdc++,执行
sudo apt-get install lib32stdc++6
截止到目前,大概build环境是准备好了,开始着手测试
3.新建一个测试job,
(1)配置好git 地址
(2)构建->execute shell,输入 “cd ${WORKSPACE}/JabzeTestTest && ant clean emma debug install test”
(3)保存,并运行,控制台报错如下:
解决方式:
执行命令行
(4)继续运行,继续报错,报错解决后,运行test成功
问题原因:一开始一直以为是权限的问题,弄了一天多,各种网上查,都没有解决。后来偶然注意到那个crash
解决方式:把导致crash的代码注释掉,ok
(5)生成报告,Jenkins配置->构建后操作->Publish JUnit test result report
Jenkins 控制台报错
解决方式:修改build.xml,附上test片段,以供参考
报错及解决方式集锦:
(一)签名问题
原因:曾经在别的机器上装过
解放方法:adb uninstall com.jabze.android.tests
一、安装Jenkinshttp://jenkins-ci.org/。(由于服务器已装好,略过)
二、安装android sdk、platforms、simulator images
1.下载android sdk到Ubuntu服务器。本机是mac操作系统,需远程连接到服务器,所以基本靠靠终端命令来进行。
a.连接到服务器,可用命令如:ssh root@10.0.90.61 或者是 ssh -l root 10.0.90.61 表明是用root身份登陆。回车输入pwd
b.进入相关目录下,准备下载文件, 如 cd /opt/android_test/
c.利用命令下载:wget http://dl.google.com/android/android-sdk_r23.0.2-linux.tgz
d.解压文件夹:tar zxvf android-sdk_r23.0.2-linux.tgz,解压后的文件夹名:android-sdk-linux
e.将解压后的文件夹放到 /usr/local/下:sudo mv android-sdk-linux /usr/local/
2.安装各种东西
a.进入相关目录下: cd /usr/local/android-sdk-linux/tools
b.运行android sdk: ./android (前提是tools 文件夹里面有android这个可执行文件),我执行完这个文件后有报错,报错信息如下
<span style="font-size:12px;">Exception in thread "main" org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed] at org.eclipse.swt.SWT.error(Unknown Source) at org.eclipse.swt.widgets.Display.createDisplay(Unknown Source) at org.eclipse.swt.widgets.Display.create(Unknown Source) at org.eclipse.swt.graphics.Device.<init>(Unknown Source) at org.eclipse.swt.widgets.Display.<init>(Unknown Source) at org.eclipse.swt.widgets.Display.<init>(Unknown Source) at org.eclipse.swt.widgets.Display.getDefault(Unknown Source) at org.eclipse.swt.widgets.Shell.<init>(Unknown Source) at org.eclipse.swt.widgets.Shell.<init>(Unknown Source) at com.android.sdkuilib.internal.repository.ui.SdkUpdaterWindowImpl2.createShell(SdkUpdaterWindowImpl2.java:168) at com.android.sdkuilib.internal.repository.ui.SdkUpdaterWindowImpl2.open(SdkUpdaterWindowImpl2.java:137) at com.android.sdkuilib.repository.SdkUpdaterWindow.open(SdkUpdaterWindow.java:111) at com.android.sdkmanager.Main.showSdkManagerWindow(Main.java:412) at com.android.sdkmanager.Main.doAction(Main.java:390) at com.android.sdkmanager.Main.run(Main.java:150) at com.android.sdkmanager.Main.main(Main.java:116)</span>
问题原因:该命令试图弹出一个图形界面,但是由于是ssh连接没有办法弹出,所以报错。
解决方式:相当于没解决,直接跑到机房,在服务器上重复步骤2(a), 2(b)
c.安装platforms 和 相应packages,下面的这些东西都要安装上
如果遇到报错如“Stopping ADB server failed (code -1).”,先不用管它。
如果在下载的时候一个劲地连不上,报错如下
Failed to fetch URL https://dl-ssl.google.com/android/repository/sys-img/android-tv/sys-img.xml, reason:
SSLPeerUnverified peer not authenticated
或者:Download
interrupted: Connection to http://dl-ssl.google.com refused Download
interrupted: Read timed out
各种解决方式,比如说
(1)挂代理
(2)强制转换https 到 http(tools->opinion中可以看到),
(3)添加地址到hosts. vi /etc/hosts->添加
# for android
74.125.237.1 dl-ssl.google.com
然后保存。
貌似前两个效果都不是很好,但是别别扭扭用了我好两三天的时间终于下下来了
d.添加环境变量
(1) vi
environment
(2) 在PATH= “”里面添加:/usr/local/android-sdk-linux
三、安装Jenkins插件:android simulator plugin
1.访问页面 服务器地址:8080 如10.0.90.61:8080 打开Jenkins
2.系统管理->管理插件->搜索android simulator plugin,勾选,然后点击直接安装,进入安装界面,等待安装完成
红色的报错,我没有理它,安装完成就好了。
四、Jenkins设置,新建job
1.Jenkins系统设置
a.系统管理->系统设置->Android 设置sdk root,但是这里我遇到一个问题,如图
问题原因:据广大网友说 是因为Jenkins用户没有访问root的权限,所以有这个报错
解决方式:更改文件属主为Jenkins用户:
<span style="font-size:12px;">chown -R jenkins:jenkins /usr/local/android-sdk-linux</span>
2.新建job(前提,安装git,ant,jdk)
a.新建一个自由风格的job
b.源码管理->git->贴入代码下载地址。保存,并立即构建。这一步的作用是讲android project抓下来,代码地址:~/jobs/android_build/workspace
c.执行ant clean debug,报错如下:
(1)
Buildfile: /var/lib/jenkins/jobs/android_build/workspace/build.xml BUILD FAILED /var/lib/jenkins/jobs/android_build/workspace/build.xml:90: Cannot find /usr/local/android-sdk/tools/ant/build.xml imported from /var/lib/jenkins/jobs/android_build/workspace/build.xml
问题原因:没有生成build.xml在/usr/local/android-sdk/tools/ant/build.xml
解决方法:cd到/usr/local/android-sdk/tools下面,build一个文件
(2)执行 ./android
update project -p ~/jobs/android_build/workspace,报错如下:
Error: The project either has no target set or the target is invalid. Please provide a --target to the 'android update' command. It seems that there are sub-projects. If you want to update them please use the --subprojects parameter.
问题原因:没有指定target
解决方法:执行 ./android update project -p ~/jobs/android_build/workspace -t 1 -s(-p后面是project的路径,-t后面的1指的是target id,查看机器的target
id,利用命令 android list targets;-s的意思是下面的子文件也要更新。如果还不明白,直接执行 android update project 然后看看提示,就知道那句是什么意思了)
(3)重新执行ant clean debug, 继续报错
BUILD FAILED /usr/local/android-sdk-linux/tools/ant/build.xml:601: The following error occurred while executing this line: /usr/local/android-sdk-linux/tools/ant/build.xml:653: The following error occurred while executing this line: /usr/local/android-sdk-linux/tools/ant/build.xml:698: Execute failed: java.io.IOException: Cannot run program "/usr/local/android-sdk-linux/build-tools/20.0.0/aapt" (in directory "/var/lib/jenkins/jobs/android_build/workspace/google-play-services_lib"): error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047) at java.lang.Runtime.exec(Runtime.java:617) at org.apache.tools.ant.taskdefs.launcher.Java13CommandLauncher.exec(Java13CommandLauncher.java:41) at org.apache.tools.ant.taskdefs.Execute.launch(Execute.java:428) at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:442) at org.apache.tools.ant.taskdefs.ExecTask.runExecute(ExecTask.java:628) at org.apache.tools.ant.taskdefs.ExecTask.runExec(ExecTask.java:669) at org.apache.tools.ant.taskdefs.ExecTask.execute(ExecTask.java:495) at com.android.ant.AaptExecTask.execute(AaptExecTask.java:699) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68) at com.android.ant.IfElseTask.execute(IfElseTask.java:120) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:396) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.Target.execute(Target.java:435) at org.apache.tools.ant.Target.performTasks(Target.java:456) at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38) at org.apache.tools.ant.Project.executeTargets(Project.java:1248) at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:440) at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:306) at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:221) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68) at com.android.ant.IfElseTask.execute(IfElseTask.java:120) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.Target.execute(Target.java:435) at org.apache.tools.ant.Target.performTasks(Target.java:456) at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) at org.apache.tools.ant.Project.executeTarget(Project.java:1364) at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) at org.apache.tools.ant.Project.executeTargets(Project.java:1248) at org.apache.tools.ant.Main.runBuild(Main.java:851) at org.apache.tools.ant.Main.startAnt(Main.java:235) at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) Caused by: java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:186) at java.lang.ProcessImpl.start(ProcessImpl.java:130) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028) ... 68 more Total time: 1 second
问题原因:据网友说是因为由于是64bit的系统,而Android sdk只有32bit的程序,需要安装ia32-libs。
(4)安装ia32-libs
root@hf61:~# sudo apt-get install ia32-libs
sudo: unable to resolve host hf61.sumilux.com
Reading package lists... Done Building dependency tree Reading state information... Done <strong>Package ia32-libs is not available, but is referred to by another package.</strong> This may mean that the package is missing, has been obsoleted, or is only available from another source However the following packages replace it: lib32z1 lib32ncurses5 lib32bz2-1.0 E: Package 'ia32-libs' has no installation candidate root@hf61:~# <strong>sudo apt-get install lib32z1</strong>
<strong> </strong>(5)执行ant clean debug,还是报错
<p class="p1">usr/local/android-sdk-linux/build-tools/20.0.0/aapt: <span style="color:#ff6666;">error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory</span></p>
BUILD FAILED /usr/local/android-sdk-linux/tools/ant/build.xml:601: The following error occurred while executing this line: /usr/local/android-sdk-linux/tools/ant/build.xml:653: The following error occurred while executing this line: <span style="color:#ff6666;">/usr/local/android-sdk-linux/tools/ant/build.xml:698: null returned: 127</span>
标红的表示报错略有不同
(6) 安装libstdc++,执行
sudo apt-get install lib32stdc++6
截止到目前,大概build环境是准备好了,开始着手测试
3.新建一个测试job,
(1)配置好git 地址
(2)构建->execute shell,输入 “cd ${WORKSPACE}/JabzeTestTest && ant clean emma debug install test”
(3)保存,并运行,控制台报错如下:
install: [echo] Installing /var/lib/jenkins/jobs/android_test/workspace/JabzeTestTest/bin/JabzeTest-debug.apk onto default emulator or device... [exec] 4623 KB/s (103777 bytes in 0.021s) [exec] pkg: /data/local/tmp/JabzeTest-debug.apk [exec] Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
[getlibpath] Ordered libraries: [echo] Running tests... [echo] Running tests ... [exec] INSTRUMENTATION_STATUS: id=ActivityManagerService [exec] INSTRUMENTATION_STATUS: Error=Permission Denial: starting instrumentation ComponentInfo{com.jabze.android.tests/com.zutubi.android.junitreport.JUnitReportTestRunner} from pid=10776, uid=10776 not allowed because package com.jabze.android.tests does not have a signature matching the target com.jabze.android [exec] INSTRUMENTATION_STATUS_CODE: -1 [exec] java.lang.SecurityException: Permission Denial: starting instrumentation ComponentInfo{com.jabze.android.tests/com.zutubi.android.junitreport.JUnitReportTestRunner} from pid=10776, uid=10776 not allowed because package com.jabze.android.tests does not have a signature matching the target com.jabze.android
解决方式:
执行命令行
cd /usr/local/android-sdk-linux/platform-tools adb uninstall com.jabze.android.tests adb reinstall com.jabze.android.tests
(4)继续运行,继续报错,报错解决后,运行test成功
com.jabze.android.test.DummyTest:... [exec] com.jabze.android.test.LoginTest:INSTRUMENTATION_RESULT: shortMsg=Process <strong>crashed</strong>. [exec] INSTRUMENTATION_CODE: 0 [echo] Setting permission to download the coverage file... [exec] Unable to chmod /data/data/com.jabze.android/coverage.ec: No such file or directory [echo] Downloading coverage file into project directory... [exec] remote object '/data/data/com.jabze.android/coverage.ec' does not exist
问题原因:一开始一直以为是权限的问题,弄了一天多,各种网上查,都没有解决。后来偶然注意到那个crash
解决方式:把导致crash的代码注释掉,ok
(5)生成报告,Jenkins配置->构建后操作->Publish JUnit test result report
Jenkins 控制台报错
Recording test results None of the test reports contained any result Build step 'Publish JUnit test result report' changed build result to FAILURE原因:build.xml 里面的test target 不正确
解决方式:修改build.xml,附上test片段,以供参考
<pre name="code" class="java"><target name="test" depends="-test-project-check" 1226 description="Runs tests from the package defined in test.package property"> 1227 <property name="test.runner" value="com.zutubi.android.junitreport.JUnitReportTestRunner" /> 1228 1229 <if condition="${project.is.test}"> 1230 <then> 1231 <property name="tested.project.absolute.dir" location="${tested.project.dir}" /> 1232 1233 <!-- Application package of the tested project extracted from its manifest file --> 1234 <xpath input="${tested.project.absolute.dir}/AndroidManifest.xml" 1235 expression="/manifest/@package" output="tested.project.app.package" /> 1236 1237 <if condition="${emma.enabled}"> 1238 <then> 1239 <getprojectpaths projectPath="${tested.project.absolute.dir}" 1240 binOut="tested.project.out.absolute.dir" 1241 srcOut="tested.project.source.absolute.dir" /> 1242 1243 <getlibpath projectPath="${tested.project.absolute.dir}" 1244 libraryFolderPathOut="tested.project.lib.source.path" 1245 leaf="@{source.dir}" /> 1246 1247 </then> 1248 </if> 1249 1250 </then> 1251 <else> 1252 <!-- this is a test app, the tested package is the app's own package --> 1253 <property name="tested.project.app.package" value="${project.app.package}" /> 1254 1255 <if condition="${emma.enabled}"> 1256 <then> 1257 <property name="tested.project.out.absolute.dir" value="${out.absolute.dir}" /> 1258 <property name="tested.project.source.absolute.dir" value="${source.absolute.dir}" /> 1259 1260 <getlibpath 1261 libraryFolderPathOut="tested.project.lib.source.path" 1262 leaf="@{source.dir}" /> 1263 1264 </then> 1265 </if> 1266 1267 </else> 1268 </if> 1269 1270 <property name="emma.dump.file" 1271 value="/data/data/${tested.project.app.package}/coverage.ec" /> 1272 1273 <if condition="${emma.enabled}"> 1274 <then> 1275 <echo>Running tests...</echo> 1276 <run-tests-helper emma.enabled="true"> 1277 <extra-instrument-args> 1278 <arg value="-e" /> 1279 <arg value="coverageFile" /> 1280 <arg value="${emma.dump.file}" /> 1281 </extra-instrument-args> 1282 </run-tests-helper> 1283 1284 <echo level="info">Setting permission to download the coverage file...</echo> 1285 <exec executable="${adb}" failonerror="true"> 1286 <arg line="${adb.device.arg}" /> 1287 <arg value="shell" /> 1288 <arg value="run-as" /> 1289 <arg value="${tested.project.app.package}" /> 1290 <arg value="chmod" /> 1291 <arg value="644" /> 1292 <arg value="${emma.dump.file}" /> 1293 </exec> 1294 <echo level="info">Downloading coverage file into project directory...</echo> 1295 <exec executable="${adb}" failonerror="true"> 1296 <arg line="${adb.device.arg}" /> 1297 <arg value="pull" /> 1298 <arg value="${emma.dump.file}" /> 1299 <arg path="${out.absolute.dir}/coverage.ec" /> 1300 </exec> 1301 1302 <pathconvert property="tested.project.lib.source.path.value" refid="tested.project.lib.source.path"> 1303 <firstmatchmapper> 1304 <regexpmapper from='^([^ ]*)( .*)$$' to='"\1\2"'/> 1305 <identitymapper/> 1306 </firstmatchmapper> 1307 </pathconvert> 1308 1309 <echo level="info">Extracting coverage report...</echo> 1310 <emma> 1311 <property name="report.html.out.encoding" value="UTF-8" /> 1312 <report sourcepath="${tested.project.source.absolute.dir}:${tested.project.lib.source.path.value}" 1313 verbosity="${verbosity}"> 1314 <!-- TODO: report.dir or something like should be introduced if necessary --> 1315 <infileset file="${out.absolute.dir}/coverage.ec" /> 1316 <infileset file="${tested.project.out.absolute.dir}/coverage.em" /> 1317 <!-- TODO: reports in other, indicated by user formats --> 1318 <html outfile="${out.absolute.dir}/coverage.html" /> 1319 <txt outfile="${out.absolute.dir}/coverage.txt" /> 1320 <xml outfile="${out.absolute.dir}/coverage.xml" /> 1321 </report> 1322 </emma> 1323 <echo level="info">Cleaning up temporary files...</echo> 1324 <delete file="${out.absolute.dir}/coverage.ec" /> 1325 <delete file="${tested.project.out.absolute.dir}/coverage.em" /> 1326 <exec executable="${adb}" failonerror="true"> 1327 <arg line="${adb.device.arg}" /> 1328 <arg value="shell" /> 1329 <arg value="run-as" /> 1330 <arg value="${tested.project.app.package}" /> 1331 <arg value="rm" /> 1332 <arg value="${emma.dump.file}" /> 1333 </exec> 1334 <echo level="info">Saving the coverage reports in ${out.absolute.dir}</echo> 1335 </then> 1336 <else> 1337 <run-tests-helper /> 1338 </else> 1339 </if> 1340 1341 <echo>Downloading XML test report…</echo> 1342 <mkdir dir="junitreports" /> 1343 <exec executable="${adb}" failonerror="true"> 1344 <arg line="${adb.device.arg}"/> 1345 <arg value="pull" /> 1346 <arg value="${emma.dump.file}/files/junit-report.xml" /> 1347 <arg value="junitreports/junit-report.xml" /> 1348 </exec> 1349 </target>
</pre><pre code_snippet_id="502201" snippet_file_name="blog_20141030_16_7839643" name="code" class="java"><img src="http://img.blog.csdn.net/20141030171330074?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVvYmEx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="http://img.blog.csdn.net/20141030171351087?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVvYmEx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
报错及解决方式集锦:
(一)签名问题
[echo] Running tests... [echo] Running tests ... [exec] INSTRUMENTATION_STATUS: id=ActivityManagerService [exec] INSTRUMENTATION_STATUS: Error=Permission Denial: starting instrumentation ComponentInfo{com.jabze.android.tests/com.zutubi.android.junitreport.JUnitReportTestRunner} from pid=14774, uid=14774 not allowed because package com.jabze.android.tests does not have a signature matching the target com.jabze.android [exec] INSTRUMENTATION_STATUS_CODE: -1 [exec] java.lang.SecurityException: Permission Denial: starting instrumentation ComponentInfo{com.jabze.android.tests/com.zutubi.android.junitreport.JUnitReportTestRunner} from pid=14774, uid=14774 not allowed because package com.jabze.android.tests does not have a signature matching the target com.jabze.android [exec] at android.os.Parcel.readException(Parcel.java:1425) [exec] at android.os.Parcel.readException(Parcel.java:1379) [exec] at android.app.ActivityManagerProxy.startInstrumentation(ActivityManagerNative.java:2896) [exec] at com.android.commands.am.Am.runInstrument(Am.java:675) [exec] at com.android.commands.am.Am.run(Am.java:119) [exec] at com.android.commands.am.Am.main(Am.java:82) [exec] at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method) [exec] at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:309) [exec] at dalvik.system.NativeStart.main(Native Method) [echo] Setting permission to download the coverage file... [exec] Unable to chmod /data/data/com.jabze.android/coverage.ec: No such file or directory [echo] Downloading coverage file into project directory... [exec] remote object '/data/data/com.jabze.android/coverage.ec' does not exist
原因:曾经在别的机器上装过
解放方法:adb uninstall com.jabze.android.tests
相关文章推荐
- Jenkins+Gradle+APPIUM android持续构建+自动化测试环境(一)
- 在ubuntu上通过jenkins+Gradle搭建android自动化构建环境
- Windows下Android项目搭建Jenkins持续构建+自动化测试
- Mac 环境下 Jenkins+Gradle 配制android 持续构建总结
- Windows环境下jenkins +svn+android studio自动化构建(持续集成,打包)
- 使用Gradle构建构建一个Java Web工程及持续集成环境Jenkins配置
- Linux下配置Jenkins+Android自动化构建环境(二)
- Docker+Jenkins持续集成环境(5): android构建与apk发布
- Windows环境下jenkins +svn+android studio自动化构建(持续集成,打包)
- Linux下配置Jenkins+Android+Ant自动化构建环境(一)
- [Jenkins] Jenkins配置IOS持续环境,构建出现IDEArchivePathOverride问题!
- Windows下Android项目搭建Jenkins持续构建+自动化测试
- 使用Gradle构建构建一个Java Web工程及持续集成环境Jenkins配置
- ubuntu 编译android2.2源码配置环境及jdk5(5)
- 构建MINI2440开发板Ubuntu开发环境-串口配置及使用
- 在 Ubuntu 下配置 Android 开发环境
- 如何在Netbeans下配置Android开发环境-Ubuntu平台
- 在ubuntu下配置Android开发环境
- ubuntu下android源码环境的配置