MTaaS 导致资源泄露
Posted
技术标签:
【中文标题】MTaaS 导致资源泄露【英文标题】:MTaaS causing resource leak 【发布时间】:2019-02-14 06:18:12 【问题描述】:在将二进制文件上传到 Google Play 后,我的应用程序在 android 根据Pre-Launch Report 在其中一个测试设备上启动时被关闭。
问题似乎是资源泄漏,原因如下:
com.google.android.apps.mtaas.crawler.controller.remote.RemotePlatform
我发现 MTaaS 最有可能代表 Mobile Testing as a Service。
测试框架泄漏资源导致测试中止,我是否正确?
如何阻止 MTaaS 泄露?
Strict Mode 中来自 Galaxy S9 的完整设备日志:
注意:这是一个基于 NDK 的应用程序,几乎没有 Java 代码,并且不依赖于 FireBase。
E/StrictMode(14355): A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
E/StrictMode(14355): java.lang.Throwable: Explicit termination method 'close' not called
E/StrictMode(14355): at dalvik.system.CloseGuard.open(CloseGuard.java:223)
E/StrictMode(14355): at android.os.ParcelFileDescriptor.<init>(ParcelFileDescriptor.java:192)
E/StrictMode(14355): at android.os.ParcelFileDescriptor.<init>(ParcelFileDescriptor.java:181)
E/StrictMode(14355): at android.os.ParcelFileDescriptor.createPipe(ParcelFileDescriptor.java:425)
E/StrictMode(14355): at com.google.android.apps.mtaas.crawler.common.base.IOUtils.makeParcelAsync(IOUtils.java:1)
E/StrictMode(14355): at com.google.android.apps.mtaas.crawler.platform.ScreenState.writeScreenElementsToParcel(ScreenState.java:141)
E/StrictMode(14355): at com.google.android.apps.mtaas.crawler.platform.ScreenState.writeToParcel(ScreenState.java:60)
E/StrictMode(14355): at com.google.android.apps.mtaas.crawler.platform.ParcelableScreenState.writeToParcel(ParcelableScreenState.java:6)
E/StrictMode(14355): at android.os.Parcel.writeParcelable(Parcel.java:1746)
E/StrictMode(14355): at android.os.Parcel.writeValue(Parcel.java:1652)
E/StrictMode(14355): at android.os.Parcel.writeArrayMapInternal(Parcel.java:793)
E/StrictMode(14355): at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1506)
E/StrictMode(14355): at android.os.Bundle.writeToParcel(Bundle.java:1181)
E/StrictMode(14355): at android.os.Parcel.writeBundle(Parcel.java:833)
E/StrictMode(14355): at android.os.Message.writeToParcel(Message.java:594)
E/StrictMode(14355): at android.os.IMessenger$Stub$Proxy.send(IMessenger.java:84)
E/StrictMode(14355): at android.os.Messenger.send(Messenger.java:57)
E/StrictMode(14355): at com.google.android.apps.mtaas.crawler.controller.remote.RemotePlatform.sendMessage(RemotePlatform.java:39)
E/StrictMode(14355): at com.google.android.apps.mtaas.crawler.controller.remote.RemotePlatform.sendActionResultsMessage(RemotePlatform.java:64)
E/StrictMode(14355): at com.google.android.apps.mtaas.crawler.controller.remote.RemotePlatform.handlePerformActionMessage(RemotePlatform.java:24)
E/StrictMode(14355): at com.google.android.apps.mtaas.crawler.controller.remote.RemotePlatform.access$300(RemotePlatform.java:88)
E/StrictMode(14355): at com.google.android.apps.mtaas.crawler.controller.remote.RemotePlatform$ControllerMessageHandler.handleMessage(RemotePlatform.java:8)
E/StrictMode(14355): at android.os.Handler.dispatchMessage(Handler.java:105)
E/StrictMode(14355): at android.os.Looper.loop(Looper.java:164)
E/StrictMode(14355): at android.os.HandlerThread.run(HandlerThread.java:65)
W/System.err(14355): StrictMode VmPolicy violation with POLICY_DEATH; shutting down.
【问题讨论】:
【参考方案1】:这看起来可能是 Google Play 发布前报告抓取工具中的错误。我可以通知相应的团队,但一般而言,如果发生这种情况,您可以通过 Play 控制台支持告知他们。您可以通过 Google Play 控制台中的帮助菜单与他们联系。这是问号“?”的后面。图标。
【讨论】:
【参考方案2】:我是 MTaaS 的一员,正在调查此问题。但我没有任何特定于此问题/爬网的详细信息(例如,logcat 或包名称)。
此堆栈跟踪是否显示为 PLR 失败的原因,还是从 logcat 中提取以帮助我们调试?如果是后者,能否分享一下PLR上出现的stacktrace。
【讨论】:
sn-p 来自我从 com.steenriver.armor 的预启动报告中下载的 logcat。完整的 logcat 在这里:stolk.org/tmp/logcat.txt 感谢您发现并报告该问题。它已修复,有望在下周发布。以上是关于MTaaS 导致资源泄露的主要内容,如果未能解决你的问题,请参考以下文章