小编ris*_*en0的帖子

在同一 Jenkins 项目的后期重用工件

我有一个 Jenkins 管道,它的 Build 步骤有一个archiveArtifacts命令。

在构建步骤之后是单元测试、集成测试和部署。

在部署步骤中,我想使用其中一个工件。我以为我可以在 Build 步骤生成它的同一个地方找到它,但显然archiveArtifacts已经删除了它们。

作为一种解决方法,我可以在存档之前复制工件,但对我来说它看起来并不优雅。有没有更好的办法?

jenkins jenkins-pipeline

12
推荐指数
1
解决办法
7087
查看次数

connectedAndroidTest失败,"没有连接的设备",但仪器工作

我正在为我的Android应用程序设置一个Jenkins节点(在Mac OS X上)运行检测测试.

我的Jenkins项目启动Android模拟器并运行Gradle任务:app:connectedAndroidTest.但是任务一直是不稳定的,有时候能够很好地运行测试,但大多数情况下失败并出现以下错误:

:app:connectedAndroidTest FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:connectedAndroidTest'.
> com.android.builder.testing.api.DeviceException: No connected devices!
Run Code Online (Sandbox Code Playgroud)

经过一番调查,我发现:

  • 该问题仅发生在该机器上; 在我的机器(另一台Mac OS X)上,该任务始终按预期工作,在Android Studio内外;
  • 问题发生在Jenkins之外,即手动启动模拟器并从命令行运行Gradle任务;
  • 即使Jenkins输出警告使用非标准端口,即使使用更常见的5554-5555,也会出现问题.
  • adb devices 显示处于在线状态的模拟器;
  • adb shell am instrument 工作得很好;

因此我可以说问题是:app:connectedAndroidTest没有检测到正在运行的模拟器.

我已经半成了一个安装APK并运行的shell脚本am instrument,但后者不会生成与JUnit兼容的输出.

所以在做额外的工作之前,我想知道如何"修复"Gradle任务以便它检测到模拟器.我也很乐意获得进一步查明问题的建议,例如找出Gradle任务在我的机器上工作的原因.

android android-emulator android-instrumentation

6
推荐指数
1
解决办法
920
查看次数

变量与对象返回的对象的方法引用

我注意到如果我写的东西如下:

View view = getView();
foo(error -> view.showError(error));
Run Code Online (Sandbox Code Playgroud)

Android Studio(也可能是IntelliJ)显示"可以用方法引用替换"的建议.

相反,如果我写

foo(error -> getView().showError(error));
Run Code Online (Sandbox Code Playgroud)

Android Studio没有说什么.

但在这两种情况下我都可以使用方法引用:

foo(view::showError)
Run Code Online (Sandbox Code Playgroud)

foo(getView()::showError)
Run Code Online (Sandbox Code Playgroud)

, 分别.

这两种形式在功能上是不同的吗?他们似乎做了同样的事情,但Android Studio似乎不同意.

java lambda intellij-idea android-studio method-reference

6
推荐指数
1
解决办法
80
查看次数

找出哪个 View 消耗了触摸事件(如果有)

我正在解决一个与视图相关的问题:一个点击监听器在它应该触发的时候没有被触发。经过长时间的反复试验,我发现父视图被禁用,因此将所有事件丢弃给其子视图。

在 Android 中,有没有一种方法可以准确地找到将触摸或点击事件注入应用程序时会发生什么?比如它是如何调度的,它遍历了哪些视图,谁忽略了它(以及为什么),谁丢弃了它(以及为什么),最后是谁消费了它。

理想情况下,它会在应用程序中的每次点击时发出 Logcat 上的某种低级转储。

android android-custom-view android-view motionevent android-touch-event

5
推荐指数
1
解决办法
1196
查看次数

如何故意减慢模拟器的速度?

这个问题与通常关于 Android 模拟器的问题相反。

我的 Android 仪器测试(针对基于 RxJava 的应用程序使用 Espresso)在我的开发机器上运行得很好,但它们偶尔会在构建服务器中失败。

我的构建服务器的硬件比我的机器慢。我认为这导致在后台任务完成之前执行实际的 Espresso 检查。我知道默认情况下,Espresso 不会等待 RxJava 调度程序(io() 和计算())完成,所以这可能是原因。

有几种方法可以让 Espresso 知道 RxJava 调度程序,但在实现它们之前,我想在我的机器上重现这个问题。

我试过禁用硬件加速无济于事。

在配置中,您可以设置网络速度和延迟,但在这种情况下,我对降低 CPU 速度感兴趣。失败的测试不涉及网络。

performance android android-emulator

5
推荐指数
1
解决办法
1941
查看次数

如何获取Binder事务缓冲区的内容以进行故障排除

有没有办法,无论是以编程方式还是通过调试工具,来了解Binder事务缓冲区中保存的当前事务?

有时,通常在运行几小时/几天后,我的应用程序崩溃并出现如下错误跟踪:

08-30 09:49:57.459  1879  1904 E JavaBinder: !!! FAILED BINDER TRANSACTION !!!
08-30 09:49:57.469  1879  1904 W BroadcastQueue: Exception when sending broadcast to ComponentInfo{com.mycompany.myapp/com.mycompany.myapp.receiver.UpdateContentReceiver}
08-30 09:49:57.469  1879  1904 W BroadcastQueue: android.os.TransactionTooLargeException
08-30 09:49:57.469  1879  1904 W BroadcastQueue:    at android.os.BinderProxy.transact(Native Method)
08-30 09:49:57.469  1879  1904 W BroadcastQueue:    at android.app.ApplicationThreadProxy.scheduleReceiver(ApplicationThreadNative.java:771)
08-30 09:49:57.469  1879  1904 W BroadcastQueue:    at com.android.server.am.BroadcastQueue.processCurBroadcastLocked(BroadcastQueue.java:231)
08-30 09:49:57.469  1879  1904 W BroadcastQueue:    at com.android.server.am.BroadcastQueue.processNextBroadcast(BroadcastQueue.java:778)
08-30 09:49:57.469  1879  1904 W BroadcastQueue:    at com.android.server.am.BroadcastQueue$1.handleMessage(BroadcastQueue.java:140)
08-30 09:49:57.469  1879  1904 W BroadcastQueue:    at …
Run Code Online (Sandbox Code Playgroud)

android android-intent

2
推荐指数
1
解决办法
1836
查看次数