2

我有一个 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 错误,所以我问了他们,​​我被告知问题出在这一行:

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

使用仪器启动应用程序是不正常的,这意味着有人正在“修补”我的应用程序。

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

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

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

4

1 回答 1

3

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

看看这个堆栈跟踪。我在我的普通(不是 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)

对我来说,很明显 Instrumentation 每次onCreate()被调用时都会被卷入。但是我们可以检查是否真的每次都如此。它在源代码中。如您所见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,我无法为您提供帮助

于 2015-03-19T10:53:16.907 回答