2015-03-19 45 views
1

我已經在生產中Xamarin的Android應用程序,我看到不少跟隨崩潰在谷歌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) 

這是不正常的應用程序啓動儀器,它意味着有人正在「擺弄」我的應用程序。

但我可以看到許多這樣的錯誤,從許多不同的設備,有的網友甚至留下留言「它停止工作」與他們的崩潰報告...

我試着用搜索引擎「android.app.Instrumentation .callApplicationOnCreate「,我在日誌中發現了這條線的許多應用程序日誌。

所以我的問題是,那「android.app.Instrumentation.callApplicationOnCreate」真的是什麼意思? 這種情況何時會發生在普通用戶身上?

回答

1

其實這是正常的堆棧跟蹤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) 

對我來說,很明顯,儀表是envolved每當onCreate()被調用時。但是我們可以檢查它是否真的每次都是。它在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,我也無法幫到你

+0

你是對的;總是調用Instrumentation.callApplicationOnCreate()。這裏令人困惑的是,afaict,'System.loadLibrary(「monodroid」)'*應該*作爲'installContentProviders()'的一部分被調用,它在*'callApplicationOnCreate()'之前*,但是沒有找到該符號。爲什麼沒有找到符號? – jonp 2015-03-20 21:56:45

相關問題