我有一个正在生产中的 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()
方法的正常堆栈跟踪。每次调用 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() 是类似的东西。但它仅针对系统应用程序调用 Application.onCreate()
。如果你查看上面的源代码,你就可以看到它。所以剩下的就是 Instrumentation.callApplicationOnCreate()
。
我们可以说您有正常的堆栈跟踪,Instrumentation.callApplicationOnCreate()
中没有什么特别的。因此,您的 UnsatisfiedLinkError
问题出在其他地方。不幸的是我没有使用 Xamarin,我无法帮助你
关于android - 应用程序启动何时涉及仪器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29140889/