应用程序在 adb 调试上运行良好,但在将 apk 部署到 phone 后崩溃
App working fine on adb debug, but crash after deploy apk to phone
我是 xamarin 的新手,所以我从教程中获取了 BackgroundlocationDemo 示例并进行了一些更改。基本上是在位置更改时连接到 api。
在我的 phone 上使用 vs usb 调试工作正常,但是当我部署 apk 并在同一个 phone 上安装时它崩溃了(不确定是什么时候获取位置或什么时候post 到 api),没有错误,只有 "Application has stopped" 消息。
不确定如何调试,或查看问题出在哪里,或从 phone 上的崩溃中获取任何信息。
感谢您提前帮助我指明正确的方向。
有人建议我使用 Android 设备日志记录 (logcat),以及 运行 来自 phone 的应用程序,而不是 VS。
这样做我得到了这个输出:
06-01 00:44:40.431 E/AndroidRuntime( 2986): FATAL EXCEPTION: main
06-01 00:44:40.431 E/AndroidRuntime( 2986): Process: Location.Droid, PID: 2986
06-01 00:44:40.431 E/AndroidRuntime( 2986): java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
06-01 00:44:40.431 E/AndroidRuntime( 2986): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
06-01 00:44:40.431 E/AndroidRuntime( 2986): Caused by: java.lang.reflect.InvocationTargetException
06-01 00:44:40.431 E/AndroidRuntime( 2986): at java.lang.reflect.Method.invoke(Native Method)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at java.lang.reflect.Method.invoke(Method.java:372)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
06-01 00:44:40.431 E/AndroidRuntime( 2986): ... 1 more
06-01 00:44:40.431 E/AndroidRuntime( 2986): Caused by: md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable: System.Net.WebException: Error: NameResolutionFailure
06-01 00:44:40.431 E/AndroidRuntime( 2986): at System.Net.WebClient.UploadDataInternal (System.Uri address, System.String method, System.Byte[] data, System.Net.WebRequest& request) [0x000a6] in :0
06-01 00:44:40.431 E/AndroidRuntime( 2986): at System.Net.WebClient.UploadString (System.Uri address, System.String method, System.String data) [0x00054] in :0
06-01 00:44:40.431 E/AndroidRuntime( 2986): at System.Net.WebClient.UploadString (System.String address, System.String data) [0x00019] in :0
06-01 00:44:40.431 E/AndroidRuntime( 2986): at (wrapper remoting-invoke-with-check) System.Net.WebClient:UploadString (string,string)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at Location.Droid.Services.LocationService.OnLocationChanged (Android.Locations.Location location) [0x00157] in :0
06-01 00:44:40.431 E/AndroidRuntime( 2986): at Android.Locations.ILocationListenerInvoker.n_OnLocationChanged_Landroid_location_Location_ (IntPtr jnienv, IntPtr native__this, IntPtr native_location) [0x00011] in :0
06-01 00:44:40.431 E/AndroidRuntime( 2986): at (wrapper dynamic-method) System.Object:cad3edbb-2ed8-4cac-ad94-e74d5e046d4e (intptr,intptr,intptr)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at md5227b9e8295fbee87e0da67869d6e828e.LocationService.n_onLocationChanged(Native Method)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at md5227b9e8295fbee87e0da67869d6e828e.LocationService.onLocationChanged(LocationService.java:68)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:281)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at android.location.LocationManager$ListenerTransport.access[=10=]0(LocationManager.java:210)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at android.location.LocationManager$ListenerTransport.handleMessage(LocationManager.java:226)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at android.os.Handler.dispatchMessage(Handler.java:102)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at android.os.Looper.loop(Looper.java:135)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at android.app.ActivityThread.main(ActivityThread.java:5343)
所以,这似乎是解决 url 的问题。经过一番研究后,我发现我需要授予该应用程序 INTERNET 权限。
我是 xamarin 的新手,所以我从教程中获取了 BackgroundlocationDemo 示例并进行了一些更改。基本上是在位置更改时连接到 api。
在我的 phone 上使用 vs usb 调试工作正常,但是当我部署 apk 并在同一个 phone 上安装时它崩溃了(不确定是什么时候获取位置或什么时候post 到 api),没有错误,只有 "Application has stopped" 消息。
不确定如何调试,或查看问题出在哪里,或从 phone 上的崩溃中获取任何信息。
感谢您提前帮助我指明正确的方向。
有人建议我使用 Android 设备日志记录 (logcat),以及 运行 来自 phone 的应用程序,而不是 VS。
这样做我得到了这个输出:
06-01 00:44:40.431 E/AndroidRuntime( 2986): FATAL EXCEPTION: main
06-01 00:44:40.431 E/AndroidRuntime( 2986): Process: Location.Droid, PID: 2986
06-01 00:44:40.431 E/AndroidRuntime( 2986): java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
06-01 00:44:40.431 E/AndroidRuntime( 2986): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
06-01 00:44:40.431 E/AndroidRuntime( 2986): Caused by: java.lang.reflect.InvocationTargetException
06-01 00:44:40.431 E/AndroidRuntime( 2986): at java.lang.reflect.Method.invoke(Native Method)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at java.lang.reflect.Method.invoke(Method.java:372)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
06-01 00:44:40.431 E/AndroidRuntime( 2986): ... 1 more
06-01 00:44:40.431 E/AndroidRuntime( 2986): Caused by: md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable: System.Net.WebException: Error: NameResolutionFailure
06-01 00:44:40.431 E/AndroidRuntime( 2986): at System.Net.WebClient.UploadDataInternal (System.Uri address, System.String method, System.Byte[] data, System.Net.WebRequest& request) [0x000a6] in :0
06-01 00:44:40.431 E/AndroidRuntime( 2986): at System.Net.WebClient.UploadString (System.Uri address, System.String method, System.String data) [0x00054] in :0
06-01 00:44:40.431 E/AndroidRuntime( 2986): at System.Net.WebClient.UploadString (System.String address, System.String data) [0x00019] in :0
06-01 00:44:40.431 E/AndroidRuntime( 2986): at (wrapper remoting-invoke-with-check) System.Net.WebClient:UploadString (string,string)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at Location.Droid.Services.LocationService.OnLocationChanged (Android.Locations.Location location) [0x00157] in :0
06-01 00:44:40.431 E/AndroidRuntime( 2986): at Android.Locations.ILocationListenerInvoker.n_OnLocationChanged_Landroid_location_Location_ (IntPtr jnienv, IntPtr native__this, IntPtr native_location) [0x00011] in :0
06-01 00:44:40.431 E/AndroidRuntime( 2986): at (wrapper dynamic-method) System.Object:cad3edbb-2ed8-4cac-ad94-e74d5e046d4e (intptr,intptr,intptr)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at md5227b9e8295fbee87e0da67869d6e828e.LocationService.n_onLocationChanged(Native Method)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at md5227b9e8295fbee87e0da67869d6e828e.LocationService.onLocationChanged(LocationService.java:68)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:281)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at android.location.LocationManager$ListenerTransport.access[=10=]0(LocationManager.java:210)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at android.location.LocationManager$ListenerTransport.handleMessage(LocationManager.java:226)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at android.os.Handler.dispatchMessage(Handler.java:102)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at android.os.Looper.loop(Looper.java:135)
06-01 00:44:40.431 E/AndroidRuntime( 2986): at android.app.ActivityThread.main(ActivityThread.java:5343)
所以,这似乎是解决 url 的问题。经过一番研究后,我发现我需要授予该应用程序 INTERNET 权限。