应用程序启动时涉及的工具是什么时候?

时间:2015-03-19 09:26:38

标签: 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 bug,I asked them and I was told问题就在这一行:

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

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

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

我尝试使用google搜索“android.app.Instrumentation.callApplicationOnCreate”,我在日志中找到了许多包含此行的应用日志。

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

1 个答案:

答案 0 :(得分:2)

实际上这是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()
  4. (其他来电是super.onCreate()而不是我们的情况)

    ApplicationTestCase显然不是我们的情况。 ActivityThread.attach()是类似的。但它只为系统应用程序调用{​​{1}}。如果你在源代码上面,你可以看到它。剩下的就是Application.onCreate()

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