我正在制作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”真的意味着什么? 那时普通用户何时会发生这种情况?
答案 0 :(得分:2)
实际上这是Application.onCreate()
方法的正常堆栈跟踪。每当调用Application
或Activity
的任何生命周期方法时,都会使用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()
来自几个地方:
android.app.Instrumentation.callApplicationOnCreate()
android.app.ActivityThread.attach(boolean)
android.test.ApplicationTestCase.createApplication()
(其他来电是super.onCreate()
而不是我们的情况)
ApplicationTestCase
显然不是我们的情况。 ActivityThread.attach()
是类似的。但它只为系统应用程序调用{{1}}。如果你在源代码上面,你可以看到它。剩下的就是Application.onCreate()
。
我们可以说你有正常的堆栈跟踪,Instrumentation.callApplicationOnCreate()
没什么特别的。所以Instrumentation.callApplicationOnCreate()
的问题就在其他地方。不幸的是我没有使用Xamarin,我无法帮助你