android - 应用程序启动何时涉及仪器?

标签 android xamarin android-instrumentation

我有一个正在生产中的 Xamarin Android 应用,我在 Google Play 开发者控制台的报告中看到了很多以下崩溃:

java.lang.UnsatisfiedLinkError: Native method not found:
mono.android.Runtime.register:(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;)V
at mono.android.Runtime.register(Native Method)
at speedcamapp.SpeedcamApplication.onCreate(SpeedcamApplication.java:18)
at
android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1008)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4506)
at android.app.ActivityThread.access$1500(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1306)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5196)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
at dalvik.system.NativeStart.main(Native Method)

由于这看起来像 Xamarin 错误,I asked them and I was told问题是这一行:

at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1008)

应用程序通过检测启动是不正常的,这意味着有人正在“修改”我的应用程序。

但是我可以从许多不同的设备上看到许多这样的错误,一些用户甚至在崩溃报告中留下了“它停止工作”的消息......

我尝试用谷歌搜索“android.app.Instrumentation.callApplicationOnCreate”,发现许多应用程序日志中都包含此行。

所以我的问题是,“android.app.Instrumentation.callApplicationOnCreate”真的是什么意思? 普通用户什么时候会发生这种情况?

最佳答案

实际上,这是 Application.onCreate() 方法的正常堆栈跟踪。每次调用 ApplicationActivity 的任何生命周期方法时都会使用 Instrumetnation。

看看这个堆栈跟踪。我在正常(不是 Xamarin)应用程序中完成了它。当然,我启动它时没有提及任何仪器:

java.lang.UnsatisfiedLinkError
    at com.example.asdf.MyApplication.onCreate(MyApplication.java:11)
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1011)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4518)
    at android.app.ActivityThread.access$1500(ActivityThread.java:144)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1339)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5221)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

对我来说,很明显每次调用 onCreate() 时都会涉及 Instrumentation。但我们每次都可以检查是否真的如此。它位于 source code 。正如您所看到的 onCreate() 从几个地方调用:

  1. android.app.Instrumentation.callApplicationOnCreate()
  2. android.app.ActivityThread.attach(boolean)
  3. android.test.ApplicationTestCase.createApplication()

(其他调用是 super.onCreate() 而不是我们的例子)

ApplicationTestCase 显然不是我们的情况。 ActivityThread.attach() 是类似的东西。但它仅针对系统应用程序调用 Application.onCreate()。如果你查看上面的源代码,你就可以看到它。所以剩下的就是 Instrumentation.callApplicationOnCreate()

我们可以说您有正常的堆栈跟踪,Instrumentation.callApplicationOnCreate() 中没有什么特别的。因此,您的 UnsatisfiedLinkError 问题出在其他地方。不幸的是我没有使用 Xamarin,我无法帮助你

关于android - 应用程序启动何时涉及仪器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29140889/

相关文章:

android - 错误 :Execution failed for task 'ndkBuild' . > 进程 'command ' Android\sdk\ndk-bundle/ndk-build.cmd'' 以非零退出值 2 完成

android - 监听器映射标记外的触摸

Honeycomb 的 Android ActionBar 选项卡样式

java - 来自外部存储的 Android 文件选择器不适用于 API 级别 > 24

xcode - Xamarin/XCode 注册配置文件错误

android - 如何使用 TLSharp 在 Telegram channel 中添加用户?

c# - 在 Xamarin.forms 中 Label 的 Text 属性部分应用斜体效果

android - 无法找到可选库 : android. test.runner

android - AndroidJUnitRunner 和 AndroidJunit4 有什么区别?

android - 在 Android 测试中创建和使用 gradle 或系统属性