Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ Feature Request ] : Android Auto Support #897

Closed
geeky-neo opened this issue Jul 20, 2019 · 352 comments
Closed

[ Feature Request ] : Android Auto Support #897

geeky-neo opened this issue Jul 20, 2019 · 352 comments

Comments

@geeky-neo
Copy link

geeky-neo commented Jul 20, 2019

Installed : Google App / Google Maps / Android Auto

Launched Android Auto

Stuck at Android Auto launcher.

Below are the logs :

07-21 00:12:25.191 16269 16305 I MicroDetectionWorker: #startMicroDetector [speakerMode: 0]
07-21 00:12:25.202 16269 16305 W ErrorReporter: reportError [type: 211, code: 393244, bug: 0]: errorCode: 393244, engine: 0
07-21 00:12:25.208 16269 16305 I MicroDetector: Keeping mic open: false
07-21 00:12:25.208 16269 16305 I MicroDetectionWorker: #onError(false)
07-21 00:12:25.320 285 4872 D audio_hw_primary: start_output_stream: enter: stream(0xb0858000)usecase(4: audio-ull-playback) devices(0x2)
07-21 00:12:25.320 285 4872 D audio_hw_primary: start_output_stream: enter: usecase(4: audio-ull-playback) devices(0x2)
07-21 00:12:25.320 285 4872 D audio_hw_primary: select_devices: out_snd_device(2: speaker) in_snd_device(0: )
07-21 00:12:25.320 285 4872 W msm8974_platform: Codec backend bitwidth 16, samplerate 48000
07-21 00:12:25.321 285 4872 D hardware_info: hw_info_append_hw_type : device_name = speaker
07-21 00:12:25.321 285 4872 I msm8974_platform: platform_send_audio_calibration: sending audio calibration for snd_device(2) acdb_id(15)
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> send_audio_cal, acdb_id = 15, path = 0
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> send_adm_topology
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> ACDB_CMD_GET_AUDPROC_COMMON_TOPOLOGY_ID
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> send_asm_topology
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> ACDB_CMD_GET_AUDPROC_STREAM_TOPOLOGY_ID
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> send_audtable
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> ACDB_CMD_GET_AUDPROC_COMMON_TABLE
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> AUDIO_SET_AUDPROC_CAL
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> send_audvoltable
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> ACDB_CMD_GET_AUDPROC_GAIN_DEP_STEP_TABLE
07-21 00:12:25.321 285 4872 D : Failed to fetch the lookup information of the device 0000000F
07-21 00:12:25.321 285 4872 E ACDB-LOADER: Error: ACDB AudProc vol returned = -19
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> AUDIO_SET_AUDPROC_VOL_CAL
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> send_afe_cal
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> ACDB_CMD_GET_AFE_COMMON_TABLE
07-21 00:12:25.321 285 4872 D : Failed to fetch the lookup information of the device 0000000F
07-21 00:12:25.321 285 4872 E ACDB-LOADER: Error: ACDB AFE returned = -19
07-21 00:12:25.321 285 4872 D ACDB-LOADER: ACDB -> AUDIO_SET_AFE_CAL
07-21 00:12:25.321 285 4872 D audio_route: Apply path: speaker
07-21 00:12:17.671 672 672 V SettingsProvider: Notifying for 0: content://settings/system/screen_brightness
07-21 00:12:25.322 672 3303 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.google.android.projection.gearhead/com.google.android.gearhead.vanagon.VnLaunchPadActivity bnds=[35,258][287,554]} from uid 10037
07-21 00:12:25.330 285 4872 D audio_route: Apply path: audio-ull-playback
07-21 00:12:25.331 285 4872 D audio_hw_primary: select_devices: done
07-21 00:12:25.376 672 1375 I ActivityManager: Start proc 18062:com.google.android.projection.gearhead:vanagon/u0a93 for activity com.google.android.projection.gearhead/com.google.android.gearhead.vanagon.VnLaunchPadActivity
07-21 00:12:25.411 672 15876 W ActivityManager: Request to remove task ignored for non-existent task 31
07-21 00:12:25.465 18062 18062 I MultiDex: VM with version 2.1.0 has multidex support
07-21 00:12:25.466 18062 18062 I MultiDex: install
07-21 00:12:25.466 18062 18062 I MultiDex: VM has multidex support, MultiDex support library is disabled.
07-21 00:12:25.467 18062 18062 W Primes : Primes not initialized, returning default (no-op) Primes instance which will ignore all calls. Please call Primes.initialize(...) before using any Primes API.
07-21 00:12:25.469 18062 18062 I CAR.GH : onCreate
07-21 00:12:25.478 16269 16313 I PBSessionCacheImpl: Deleted sessionId[71553382334609986] from persistence.
07-21 00:12:25.510 12264 12264 D GmsDummySvc: onBind: Intent { act=com.google.android.gms.phenotype.service.START pkg=com.google.android.gms }
07-21 00:12:25.540 18062 18062 I CAR.GH : Process: VANAGON
07-21 00:12:25.547 16269 16305 W SearchServiceCore: Abort, client detached.
07-21 00:12:25.570 12264 12277 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:message_change_filter_blacklist value=null
07-21 00:12:25.573 12264 13363 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:frx_gearhead_package value=com.google.android.projection.gearhead:39585000
07-21 00:12:25.576 12264 12277 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:frx_maps_package value=com.google.android.apps.maps:952000000
07-21 00:12:25.578 12264 12276 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:frx_gsa_package value=com.google.android.googlequicksearchbox:300758200
07-21 00:12:25.581 12264 12292 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:frx_music_package value=
07-21 00:12:25.585 12264 13363 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:frx_tts_package value=com.google.android.tts:210307100
07-21 00:12:25.609 18062 18062 I GH.CallAdapterFactory: creating call adapter instance
07-21 00:12:25.609 18062 18062 I GH.CallAdapterFactory: useCompat().
07-21 00:12:25.610 12264 12277 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:telecom_stack value=null
07-21 00:12:25.610 18062 18062 I GH.CallAdapterFactory: useCompat=false, Device running M or later, assuming a healthy telecom stack.
07-21 00:12:25.631 3239 3239 W StaticLayout: maxLineHeight should not be -1. maxLines:1 lineCount:1
07-21 00:12:25.636 17430 17430 I GH.SharedService: Shared Service created
07-21 00:12:25.642 12264 12264 D GmsCarSvc: onBind: Intent { act=com.google.android.gms.car.service.START pkg=com.google.android.gms }
07-21 00:12:25.645 12264 12292 D SafeParcel: Unknown field num 10 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:25.646 12264 12292 D SafeParcel: Unknown field num 11 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:25.646 12264 12292 D SafeParcel: Unknown field num 12 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:25.646 12264 12292 D SafeParcel: Unknown field num 13 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:25.646 12264 12292 D GmsCarSvc: bound by: GetServiceRequest{serviceId=CAR, gmsVersion=18003000, packageName='com.google.android.projection.gearhead', extras=Bundle[{client_name=car-1-0}]}
07-21 00:12:25.648 18062 18062 I GH.CarClientManager: Gearhead Car Service not enabled. Skipping initialization.
07-21 00:12:25.693 18062 18062 I GH.CONFIG: groups:
07-21 00:12:25.694 12264 12276 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:group_everyone value=true
07-21 00:12:25.696 18062 18062 I GH.CONFIG: everyone
07-21 00:12:25.697 12264 12292 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:group_googler value=null
07-21 00:12:25.698 12264 12276 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:group_dogfood value=null
07-21 00:12:25.700 12264 12277 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:group_partner value=null
07-21 00:12:25.701 12264 13363 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:group_engineer value=null
07-21 00:12:25.702 12264 12292 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:group_demo value=null
07-21 00:12:25.702 12264 12276 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:group_oem value=null
07-21 00:12:25.703 12264 12277 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:group_developer value=null
07-21 00:12:25.704 12264 13363 D GmsServicesProvider: query caller=com.google.android.projection.gearhead name=gearhead:group_partner_qa value=null
07-21 00:12:25.751 18062 18062 D OpenGLRenderer: Skia GL Pipeline
07-21 00:12:25.768 12264 12292 D SafeParcel: Unknown field num 10 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:25.769 12264 12292 D SafeParcel: Unknown field num 11 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:25.769 12264 12292 D SafeParcel: Unknown field num 12 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:25.769 12264 12292 D SafeParcel: Unknown field num 13 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:25.769 12264 12292 D GmsDummySvc: bound by: GetServiceRequest{serviceId=PHENOTYPE, gmsVersion=18003000, packageName='com.google.android.projection.gearhead', extras=Bundle[{}]}
07-21 00:12:25.779 3239 3239 D StatusBar: disable disable2
07-21 00:12:25.788 18062 18097 I Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: EGL 1.4 QUALCOMM build: Nondeterministic_AU_msm8974_LA.BF.1.1.3_RB1__release_AU (I741a3d36ca)
07-21 00:12:25.788 18062 18097 I Adreno-EGL: OpenGL ES Shader Compiler Version: E031.29.00.00
07-21 00:12:25.788 18062 18097 I Adreno-EGL: Build Date: 04/04/16 Mon
07-21 00:12:25.788 18062 18097 I Adreno-EGL: Local Branch: mybranch19053788
07-21 00:12:25.788 18062 18097 I Adreno-EGL: Remote Branch: quic/LA.BF.1.1.3_rb1.12
07-21 00:12:25.788 18062 18097 I Adreno-EGL: Local Patches: NONE
07-21 00:12:25.788 18062 18097 I Adreno-EGL: Reconstruct Branch: NOTHING
07-21 00:12:25.794 18062 18097 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
07-21 00:12:25.795 18062 18097 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
07-21 00:12:25.795 18062 18097 I OpenGLRenderer: Initialized EGL, version 1.4
07-21 00:12:25.795 18062 18097 D OpenGLRenderer: Swap behavior 1
07-21 00:12:25.802 18062 18097 W Adreno-EGL: <qeglDrvAPI_eglGetConfigAttrib:607>: EGL_BAD_ATTRIBUTE
07-21 00:12:25.806 297 297 E WifiHAL : wifi_get_logger_supported_feature_set: Error -3 happened.
07-21 00:12:25.807 297 297 E WifiHAL : wifi_get_logger_supported_feature_set: Error -3 happened.
07-21 00:12:25.811 18062 18097 W Adreno-EGL: <qeglDrvAPI_eglGetConfigAttrib:607>: EGL_BAD_ATTRIBUTE
07-21 00:12:25.813 18062 18097 D vndksupport: Loading /vendor/lib/hw/gralloc.msm8974.so from current namespace instead of sphal namespace.
07-21 00:12:25.833 18062 18097 D vndksupport: Loading /vendor/lib/hw/android.hardware.graphics.mapper@2.0-impl.so from current namespace instead of sphal namespace.
07-21 00:12:25.834 18062 18097 D vndksupport: Loading /vendor/lib/hw/gralloc.msm8974.so from current namespace instead of sphal namespace.
07-21 00:12:25.850 672 1372 I ActivityManager: Displayed com.google.android.projection.gearhead/com.google.android.gearhead.vanagon.VnLaunchPadActivity: +518ms
07-21 00:12:25.926 306 437 W SurfaceFlinger: Attempting to set client state on removed layer: Surface(name=AppWindowToken{40d00aa token=Token{c0ef795 ActivityRecord{c521b4c u0 com.google.android.projection.gearhead/com.google.android.gearhead.vanagon.VnLaunchPadActivity t32}}})/@0xf20fb02 - animation-leash#0
07-21 00:12:25.926 306 437 W SurfaceFlinger: Attempting to set client state on removed layer: Surface(name=AppWindowToken{dc5f633 token=Token{96d99a2 ActivityRecord{2cef96d u0 com.android.launcher3/.lineage.LineageLauncher t6}}})/@0x4e6b376 - animation-leash#0
07-21 00:12:25.926 306 437 W SurfaceFlinger: Attempting to destroy on removed layer: Surface(name=AppWindowToken{40d00aa token=Token{c0ef795 ActivityRecord{c521b4c u0 com.google.android.projection.gearhead/com.google.android.gearhead.vanagon.VnLaunchPadActivity t32}}})/@0xf20fb02 - animation-leash#0
07-21 00:12:25.926 306 437 W SurfaceFlinger: Attempting to destroy on removed layer: Surface(name=AppWindowToken{dc5f633 token=Token{96d99a2 ActivityRecord{2cef96d u0 com.android.launcher3/.lineage.LineageLauncher t6}}})/@0x4e6b376 - animation-leash#0
07-21 00:12:26.003 18062 18062 I GH.LifetimeManager: connectToCarService
07-21 00:12:26.011 12264 12276 D SafeParcel: Unknown field num 10 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:26.011 12264 12276 D SafeParcel: Unknown field num 11 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:26.011 12264 12276 D SafeParcel: Unknown field num 12 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:26.011 12264 12276 D SafeParcel: Unknown field num 13 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:26.012 12264 12276 D GmsCarSvc: bound by: GetServiceRequest{serviceId=CAR, gmsVersion=18003000, packageName='com.google.android.projection.gearhead', extras=Bundle[{client_name=car-1-0}]}
07-21 00:12:26.018 3239 3239 D StatusBar: disable disable2
07-21 00:12:26.022 306 2084 W SurfaceFlinger: Attempting to set client state on removed layer: Splash Screen com.google.android.projection.gearhead#0
07-21 00:12:26.022 306 2084 W SurfaceFlinger: Attempting to destroy on removed layer: Splash Screen com.google.android.projection.gearhead#0
07-21 00:12:27.548 344 344 W wificond: Copy constructor is only used for unit tests
07-21 00:12:27.554 344 344 W wificond: Failed to get NL80211_ATTR_EXT_FEATURES
07-21 00:12:27.558 344 344 W wificond: Copy constructor is only used for unit tests
07-21 00:12:27.560 344 344 W wificond: Failed to get NL80211_ATTR_EXT_FEATURES
07-21 00:12:27.562 344 344 W wificond: Copy constructor is only used for unit tests
07-21 00:12:27.565 344 344 W wificond: Failed to get NL80211_ATTR_EXT_FEATURES
07-21 00:12:28.471 285 461 D audio_hw_primary: out_standby: enter: stream (0xb0858000) usecase(4: audio-ull-playback)
07-21 00:12:28.539 285 461 D hardware_info: hw_info_append_hw_type : device_name = speaker
07-21 00:12:28.826 672 4040 D WificondControl: Scan result ready event
07-21 00:12:28.831 672 1379 I EthernetTracker: interfaceLinkStateChanged, iface: wlan0, up: true
07-21 00:12:35.743 16269 16305 I WorkerManager: dispose()
07-21 00:12:35.752 16269 16305 W ThreadPoolDumper: Queue length for executor EventBus is now 11. Perhaps some tasks are too long, or the pool is too small.
07-21 00:12:35.783 12264 12264 D GmsDummySvc: onBind: Intent { act=com.google.android.contextmanager.service.ContextManagerService.START pkg=com.google.android.gms }
07-21 00:12:35.795 12264 12292 D SafeParcel: Unknown field num 10 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:35.795 12264 12292 D SafeParcel: Unknown field num 11 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:35.795 12264 12292 D SafeParcel: Unknown field num 12 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:35.795 12264 12292 D SafeParcel: Unknown field num 13 in com.google.android.gms.common.internal.GetServiceRequest, skipping.
07-21 00:12:35.795 12264 12292 D GmsDummySvc: bound by: GetServiceRequest{serviceId=CONTEXT_MANAGER, gmsVersion=18591000, packageName='com.google.android.googlequicksearchbox', extras=Bundle[{com.google.android.contextmanager.service.args=[B@3f17e3b}]}
07-21 00:13:07.549 344 344 W wificond: Copy constructor is only used for unit tests
07-21 00:13:07.550 344 344 W wificond: Failed to get NL80211_ATTR_EXT_FEATURES
07-21 00:13:07.552 344 344 W wificond: Copy constructor is only used for unit tests
07-21 00:13:07.557 344 344 W wificond: Failed to get NL80211_ATTR_EXT_FEATURES
07-21 00:13:07.558 344 344 W wificond: Copy constructor is only used for unit tests
07-21 00:13:07.560 344 344 W wificond: Failed to get NL80211_ATTR_EXT_FEATURES
07-21 00:13:08.787 672 4040 D WificondControl: Scan result ready event
07-21 00:13:08.793 672 1379 I EthernetTracker: interfaceLinkStateChanged, iface: wlan0, up: true
07-21 00:13:29.199 672 1372 I UsageStatsService: User[0] Flushing usage stats to disk
07-21 00:13:51.296 672 1375 I ActivityManager: Start proc 18162:com.android.dialer/u0a38 for service com.android.dialer/com.android.voicemail.impl.StatusCheckJobService
07-21 00:13:51.320 16269 16269 I BgTaskExecutorImpl: Starting PERIODIC background task UPLOAD_AUDIO_LOGS.
07-21 00:13:51.327 16269 16269 I BgTaskExecutorImpl: Starting PERIODIC background task MDH_WIPEOUT.
07-21 00:13:51.330 16269 16269 I BgTaskExecutorImpl: Starting PERIODIC background task UPDATE_GSERVICES_CONFIG.
07-21 00:13:51.337 13571 18180 D NetworkSecurityConfig: No Network Security Config specified, using platform default
07-21 00:13:51.372 672 4040 W ActivityManager: Background start not allowed: service Intent { cmp=com.google.android.googlequicksearchbox/com.google.android.apps.gsa.shared.util.keepalive.StandaloneKeepAlive$KeepAliveService } to com.google.android.googlequicksearchbox/com.google.android.apps.gsa.shared.util.keepalive.StandaloneKeepAlive$KeepAliveService from pid=16269 uid=10092 pkg=com.google.android.googlequicksearchbox startFg?=false
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: Attempting to start service when the app is in background is not allowed on Android O+. Intent: Intent { cmp=com.google.android.googlequicksearchbox/com.google.android.apps.gsa.shared.util.keepalive.StandaloneKeepAlive$KeepAliveService }
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.google.android.googlequicksearchbox/com.google.android.apps.gsa.shared.util.keepalive.StandaloneKeepAlive$KeepAliveService }: app is in background uid UidRecord{7c5a9c5 u0a92 TRNB bg:+1m25s426ms idle change:uncached procs:1 seq(0,0,0)}
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1577)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at android.app.ContextImpl.startService(ContextImpl.java:1532)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at android.content.ContextWrapper.startService(ContextWrapper.java:664)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at com.google.android.apps.gsa.shared.util.keepalive.StandaloneKeepAlive.a(SourceFile:62)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at com.google.android.apps.gsa.shared.util.keepalive.StandaloneKeepAlive.a(SourceFile:9)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at com.google.android.apps.gsa.search.core.service.bp.a(SourceFile:18)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at com.google.android.apps.gsa.search.core.service.am.run(Unknown Source:8)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at com.google.android.libraries.gsa.m.a.j.run(Unknown Source:2)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at com.google.android.apps.gsa.shared.util.c.b.ci.a(SourceFile:2)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at com.google.android.apps.gsa.shared.util.c.b.cf.run(SourceFile:5)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at com.google.android.apps.gsa.shared.util.c.b.ap.a(SourceFile:7)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at com.google.android.apps.gsa.shared.util.c.b.as.run(Unknown Source:2)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at com.google.android.apps.gsa.shared.util.c.b.i.run(Unknown Source:3)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at java.lang.Thread.run(Thread.java:764)
07-21 00:13:51.373 16269 16305 E StandaloneKeepAlive: at com.google.android.apps.gsa.shared.util.c.b.l.run(SourceFile:6)
07-21 00:13:51.376 16269 16295 W RlzHelperImpl: RlzAppProvider unavailable
07-21 00:13:51.404 16269 16335 I GservicesUpdateTask: Updating Gservices keys
07-21 00:13:51.411 12264 12276 D GmsServicesProvider: query caller=com.google.android.googlequicksearchbox prefix=qsb: name=qsb:action_discovery_data_uri value=https://www.gstatic.com/android/voicesearch/help/help_action_1377256643_%s
07-21 00:13:51.418 12264 13363 D GmsServicesProvider: query caller=com.google.android.googlequicksearchbox name=device_country value=de
07-21 00:13:51.426 12264 12292 D GmsServicesProvider: query caller=com.google.android.googlequicksearchbox name=gms_disable:com.google.android.ears value=null
07-21 00:13:51.430 12264 13363 D GmsServicesProvider: query caller=com.google.android.googlequicksearchbox name=gms.udc.ctx_mgr_enabled value=null
07-21 00:13:51.437 16269 16297 I S3UtteranceSender: send account: %s, modelType: %d[null, 1]
07-21 00:13:51.443 18162 18162 I Dialer : DialerExecutorModule.newThread - creating low priority thread
07-21 00:13:51.447 16269 16305 W SearchServiceCore: Abort, client detached.
07-21 00:13:51.447 16269 16305 W SearchServiceCore: Abort, client detached.
07-21 00:13:51.452 18162 18162 I Dialer : CallLogFramework.registerContentObservers - enter
07-21 00:13:51.454 18162 18162 I Dialer : CallLogFramework.registerContentObservers - not registering content observers
07-21 00:13:51.457 18162 18162 I Dialer : DialerExecutorModule.newThread - creating low priority thread
07-21 00:13:51.471 16269 16305 W SearchServiceCore: Abort, client detached.
07-21 00:13:51.500 16269 18199 V MDH : Opening MDH wipeout table.
07-21 00:13:51.848 13571 18180 I cr_VariationsSeedFetch: Fetched first run seed in 518 ms

Willing to help by testing.

@chaptergy
Copy link

I would also definitely love android auto support!
@geeky-neo You should probably quote your logs as code to make them more readable.

@ilikenwf
Copy link

ilikenwf commented Jan 10, 2020

There are other issues on this: #458 #778

From reading around, Android Auto's app is only a partial implementation of what is required as the play framework provides some libraries it uses to function. The most important one has to do with SSL, and in fact, newer versions of this SSL lib break crankshaft, an open source Android Auto headunit software.

Because crankshaft exists I wonder if a non-root, non-google framework emulation could be done in a standalone APK to use the Android Auto protocol? It would be neat to get it working, and find a way to disable the bottom bar and have fullscreen support without all the limitations.

I bet that other than the bluetooth buttons, and audio stuff, that Android Auto is pretty much chromecast.

@ilikenwf
Copy link

ilikenwf commented Jan 10, 2020

OpenHU goes into more detail (note it's a probably dead bounty). If we find a way to include libsslwrapper.so and set it up such that we can vet any cert we want as valid, that could be fun anyway, but:

http://wiki.console.com.co/w/Fixing_OpenHU

GMS has a file called libsslwrapper.so that vets security certificates. When GMS 9.2 is updated on a device, that is when OpenHU breaks. We can confirm this by swapping in the libsslwrapper.so from GMS 9.0, and suddenly OpenHU works again.


Unfortunately, from there, Android Auto services (part of Google Play Services) fail to establish a connection.

We have isolated this to being a client-side issue, 
the presence of Play Services 9.2 on the host/OpenHU device does not cause an issue. 
And the latest versions of both the Android Auto app, and Google Play Store are not an issue. 
When we manually overwrite Play Services 9.2 with Play Services 9.0 on the client, everything 
works again. ```

@dylangerdaly
Copy link
Contributor

dylangerdaly commented Feb 3, 2021

Is there anything else required? I'm going to start looking at this.

I'd be happy with standard Android Auto working, just seems to be a few GMS APIs that are missing

Also correct me if I'm wrong but isn't OpenHU sort of the opposite of what we're trying to accomplish? OpenHU is a tablet that you plug your phone into?

Whereas we're trying to plug our devices (microG + Android Auto APK) into an existing car and have that work?

Looking at the above error log, it looks like it just doesn't have com.google.android.googlequicksearchbox installed?

07-21 00:13:51.372 672 4040 W ActivityManager: Background start not allowed: service Intent { cmp=com.google.android.googlequicksearchbox/com.google.android.apps.gsa.shared.util.keepalive.StandaloneKeepAlive$KeepAliveService }

Also if anyone has any documentation on how the Android Auto protocol works please share it, from what I understand most if not all of the protocol is located within the Android Auto APK.

@dylangerdaly
Copy link
Contributor

Quick update

It looks like Android Auto immedately crashes when you try to launch it

It complains about UseageReporting.API being unavailable

02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: com.google.android.gms.common.api.ApiException: 17: API: UsageReporting.API is not available on this device. Connection failed with: ConnectionResult{statusCode=CANCELED, resolution=null, message=null}
02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: 	at com.google.android.gms.common.internal.ApiExceptionUtil.a(SourceFile:1)
02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: 	at com.google.android.gms.common.api.internal.ApiCallRunner$TaskRunner.c(SourceFile:1)
02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: 	at com.google.android.gms.common.api.internal.GoogleApiManager$ClientConnection.s(SourceFile:7)
02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: 	at com.google.android.gms.common.api.internal.GoogleApiManager$ClientConnection.k(SourceFile:2)
02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: 	at com.google.android.gms.common.api.internal.GoogleApiManager$ClientConnection.f(SourceFile:21)
02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: 	at com.google.android.gms.common.api.internal.GoogleApiManager$ClientConnection.b(SourceFile:1)
02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: 	at mtq.a(SourceFile:1)
02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: 	at com.google.android.gms.common.internal.BaseGmsClient$PostInitCallback.b(SourceFile:1)
02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: 	at mtk.d(Unknown Source:24)
02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: 	at mtl.handleMessage(SourceFile:37)
02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: 	at android.os.Handler.dispatchMessage(Handler.java:106)
02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: 	at android.os.Looper.loop(Looper.java:223)
02-04 12:39:55.787 28836 28836 E CAR.ANALYTICS: 	at android.os.HandlerThread.run(HandlerThread.java:67)

It does this about 4-5 times

Then the actual crash is here

02-04 12:39:55.863 28766 28766 I GH.CarClientManager: CarClientToken connected.
02-04 12:39:55.874 28836 28866 I com.google.android.projection.gearhead:car: The ClassLoaderContext is a special shared library.
02-04 12:39:55.905 28836 28866 W DynamiteModule: IDynamite loader version < 2, falling back to getModuleVersion2
02-04 12:39:55.911 28836 28866 I DynamiteModule: Considering local module com.google.android.gms.googlecertificates:0 and remote module com.google.android.gms.googlecertificates:1
02-04 12:39:55.911 28836 28866 I DynamiteModule: Selected remote version of com.google.android.gms.googlecertificates, version >= 1
02-04 12:39:55.911 28836 28866 W DynamiteModule: Dynamite loader version < 2, falling back to createModuleContext
02-04 12:39:55.912 28836 28866 D GmsDynamiteLoaderImpl: createModuleContext for com.google.android.gms.googlecertificates at version 1
02-04 12:39:55.935 28836 28866 D SafeParcel: Unknown field id 4 in com.google.android.gms.common.internal.GoogleCertificatesQuery, skipping.
02-04 12:39:55.935 28836 28868 D SafeParcel: Unknown field id 4 in com.google.android.gms.common.internal.GoogleCertificatesQuery, skipping.
02-04 12:39:55.947 28766 28766 D AndroidRuntime: Shutting down VM
02-04 12:39:55.947 28797 28797 D AndroidRuntime: Shutting down VM
02-04 12:39:55.949 28766 28873 E BpDisplayEventConnection: Failed to transact (-9)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: FATAL EXCEPTION: main
02-04 12:39:55.949 28766 28766 E AndroidRuntime: Process: com.google.android.projection.gearhead:vanagon, PID: 28766
02-04 12:39:55.949 28766 28766 E AndroidRuntime: java.lang.SecurityException: Wrong signature - go/gearhead-retail-device
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at android.os.Parcel.createExceptionOrNull(Parcel.java:2373)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at android.os.Parcel.createException(Parcel.java:2357)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at android.os.Parcel.readException(Parcel.java:2340)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at android.os.Parcel.readException(Parcel.java:2282)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at bvp.transactAndReadException(SourceFile:3)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at com.google.android.gms.car.ICar$Stub$Proxy.bp(SourceFile:4)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at loc.call(Unknown Source:1)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at com.google.android.gms.car.internal.exception.CarServiceExceptionHandler.f(SourceFile:1)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at com.google.android.gms.car.api.impl.CarClientBase.ag(SourceFile:1)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at lcb.L(SourceFile:1)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at pjq.a(SourceFile:19)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at pkg.d(SourceFile:1)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at dgo.a(SourceFile:12)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at com.google.android.gms.car.api.impl.GearheadCarClientToken.h(SourceFile:4)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at lrx.run(Unknown Source:1)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:938)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:99)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:223)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:7660)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at com.android.internal.os.ExecInit.main(ExecInit.java:48)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
02-04 12:39:55.949 28766 28766 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:399)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: FATAL EXCEPTION: main
02-04 12:39:55.949 28797 28797 E AndroidRuntime: Process: com.google.android.projection.gearhead:shared, PID: 28797
02-04 12:39:55.949 28797 28797 E AndroidRuntime: java.lang.SecurityException: Wrong signature - go/gearhead-retail-device
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at android.os.Parcel.createExceptionOrNull(Parcel.java:2373)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at android.os.Parcel.createException(Parcel.java:2357)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at android.os.Parcel.readException(Parcel.java:2340)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at android.os.Parcel.readException(Parcel.java:2282)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at bvp.transactAndReadExceptionReturnVoid(SourceFile:3)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at com.google.android.gms.car.ICar$Stub$Proxy.bq(SourceFile:4)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at lod.a(Unknown Source:1)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at com.google.android.gms.car.internal.exception.CarServiceExceptionHandler.g(SourceFile:1)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at com.google.android.gms.car.api.impl.CarClientBase.h(SourceFile:1)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at lcb.j(SourceFile:1)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at gfd.f(SourceFile:3)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at gfa.d(SourceFile:3)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at dgo.a(SourceFile:12)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at com.google.android.gms.car.api.impl.GearheadCarClientToken.h(SourceFile:4)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at lrx.run(Unknown Source:1)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:938)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:99)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:223)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:7660)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at com.android.internal.os.ExecInit.main(ExecInit.java:48)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
02-04 12:39:55.949 28797 28797 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:399)
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: Failed to get process stats.
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: java.lang.RuntimeException: Bad file descriptor
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: 	at android.os.BinderProxy.transactNative(Native Method)
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: 	at android.os.BinderProxy.transact(BinderProxy.java:550)
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: 	at android.app.IActivityManager$Stub$Proxy.getRunningAppProcesses(IActivityManager.java:7076)
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: 	at android.app.ActivityManager.getRunningAppProcesses(ActivityManager.java:3671)
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: 	at ojl.b(SourceFile:2)
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: 	at szu.g(SourceFile:5)
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: 	at szu.f(SourceFile:1)
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: 	at olq.uncaughtException(SourceFile:15)
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: 	at dhh.uncaughtException(SourceFile:9)
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: 	at pkj.uncaughtException(SourceFile:1)
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
02-04 12:39:55.951 28766 28766 W CrashMetricServiceImpl: 	at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: Failed to get process stats.
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: java.lang.RuntimeException: Bad file descriptor
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: 	at android.os.BinderProxy.transactNative(Native Method)
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: 	at android.os.BinderProxy.transact(BinderProxy.java:550)
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: 	at android.app.IActivityManager$Stub$Proxy.getRunningAppProcesses(IActivityManager.java:7076)
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: 	at android.app.ActivityManager.getRunningAppProcesses(ActivityManager.java:3671)
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: 	at ojl.b(SourceFile:2)
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: 	at szu.g(SourceFile:5)
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: 	at szu.f(SourceFile:1)
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: 	at olq.uncaughtException(SourceFile:15)
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: 	at dhh.uncaughtException(SourceFile:9)
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: 	at pkj.uncaughtException(SourceFile:1)
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
02-04 12:39:55.952 28797 28797 W CrashMetricServiceImpl: 	at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: Background task failed
02-04 12:39:55.961 28766 28766 W PrimesExecutors: java.lang.RuntimeException: Bad file descriptor
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.os.BinderProxy.transactNative(Native Method)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.os.BinderProxy.transact(BinderProxy.java:550)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.IPackageManager$Stub$Proxy.getPackageInfo(IPackageManager.java:4692)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager.getPackageInfoAsUserUncached(PackageManager.java:8179)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager.access$100(PackageManager.java:96)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager$2.recompute(PackageManager.java:8191)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager$2.recompute(PackageManager.java:8188)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.app.PropertyInvalidatedCache.query(PropertyInvalidatedCache.java:438)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager.getPackageInfoAsUserCached(PackageManager.java:8206)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:201)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:178)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at olb.a(Unknown Source:17)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at uug.a(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at okz.a(Unknown Source:18)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at uug.a(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at oks.run(Unknown Source:2)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at sfn.c(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at seu.run(SourceFile:4)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at sfo.run(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at sdz.execute(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at sfc.h(SourceFile:2)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at okt.c(SourceFile:2)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at olr.f(SourceFile:18)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at olq.uncaughtException(SourceFile:72)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at dhh.uncaughtException(SourceFile:9)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at pkj.uncaughtException(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: Background task failed
02-04 12:39:55.961 28797 28797 W PrimesExecutors: java.lang.RuntimeException: Bad file descriptor
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.os.BinderProxy.transactNative(Native Method)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.os.BinderProxy.transact(BinderProxy.java:550)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.IPackageManager$Stub$Proxy.getPackageInfo(IPackageManager.java:4692)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager.getPackageInfoAsUserUncached(PackageManager.java:8179)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager.access$100(PackageManager.java:96)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager$2.recompute(PackageManager.java:8191)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager$2.recompute(PackageManager.java:8188)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.app.PropertyInvalidatedCache.query(PropertyInvalidatedCache.java:438)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager.getPackageInfoAsUserCached(PackageManager.java:8206)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:201)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:178)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at olb.a(Unknown Source:17)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at uug.a(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at okz.a(Unknown Source:18)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at uug.a(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at oks.run(Unknown Source:2)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at sfn.c(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at seu.run(SourceFile:4)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at sfo.run(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at sdz.execute(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at sfc.h(SourceFile:2)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at okt.c(SourceFile:2)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at olr.f(SourceFile:18)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at olq.uncaughtException(SourceFile:72)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at dhh.uncaughtException(SourceFile:9)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at pkj.uncaughtException(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: Background task failed
02-04 12:39:55.961 28766 28766 W PrimesExecutors: java.lang.RuntimeException: Bad file descriptor
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.os.BinderProxy.transactNative(Native Method)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.os.BinderProxy.transact(BinderProxy.java:550)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.IPackageManager$Stub$Proxy.getPackageInfo(IPackageManager.java:4692)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager.getPackageInfoAsUserUncached(PackageManager.java:8179)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager.access$100(PackageManager.java:96)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager$2.recompute(PackageManager.java:8191)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager$2.recompute(PackageManager.java:8188)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.app.PropertyInvalidatedCache.query(PropertyInvalidatedCache.java:438)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager.getPackageInfoAsUserCached(PackageManager.java:8206)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:201)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:178)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at olb.a(Unknown Source:17)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at uug.a(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at okz.a(Unknown Source:18)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at uug.a(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at oks.run(Unknown Source:2)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at sfn.c(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at seu.run(SourceFile:4)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at sfo.run(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at sdz.execute(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at sfc.h(SourceFile:2)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at okt.c(SourceFile:2)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at olr.f(SourceFile:18)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at olq.uncaughtException(SourceFile:75)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at dhh.uncaughtException(SourceFile:9)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at pkj.uncaughtException(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: Background task failed
02-04 12:39:55.961 28797 28797 W PrimesExecutors: java.lang.RuntimeException: Bad file descriptor
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.os.BinderProxy.transactNative(Native Method)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.os.BinderProxy.transact(BinderProxy.java:550)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.IPackageManager$Stub$Proxy.getPackageInfo(IPackageManager.java:4692)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager.getPackageInfoAsUserUncached(PackageManager.java:8179)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager.access$100(PackageManager.java:96)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager$2.recompute(PackageManager.java:8191)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager$2.recompute(PackageManager.java:8188)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.app.PropertyInvalidatedCache.query(PropertyInvalidatedCache.java:438)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager.getPackageInfoAsUserCached(PackageManager.java:8206)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:201)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:178)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at olb.a(Unknown Source:17)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at uug.a(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at okz.a(Unknown Source:18)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at uug.a(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at oks.run(Unknown Source:2)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at sfn.c(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at seu.run(SourceFile:4)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at sfo.run(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at sdz.execute(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at sfc.h(SourceFile:2)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at okt.c(SourceFile:2)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at olr.f(SourceFile:18)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at olq.uncaughtException(SourceFile:78)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at dhh.uncaughtException(SourceFile:9)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at pkj.uncaughtException(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: Background task failed
02-04 12:39:55.961 28766 28766 W PrimesExecutors: java.lang.RuntimeException: Bad file descriptor
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.os.BinderProxy.transactNative(Native Method)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.os.BinderProxy.transact(BinderProxy.java:550)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.IPackageManager$Stub$Proxy.getPackageInfo(IPackageManager.java:4692)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager.getPackageInfoAsUserUncached(PackageManager.java:8179)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager.access$100(PackageManager.java:96)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager$2.recompute(PackageManager.java:8191)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager$2.recompute(PackageManager.java:8188)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.app.PropertyInvalidatedCache.query(PropertyInvalidatedCache.java:438)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.content.pm.PackageManager.getPackageInfoAsUserCached(PackageManager.java:8206)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:201)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:178)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at olb.a(Unknown Source:17)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at uug.a(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at okz.a(Unknown Source:18)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at uug.a(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at oks.run(Unknown Source:2)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at sfn.c(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at seu.run(SourceFile:4)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at sfo.run(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at sdz.execute(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at sfc.h(SourceFile:2)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at okt.c(SourceFile:2)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at olq.uncaughtException(SourceFile:85)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at dhh.uncaughtException(SourceFile:9)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at pkj.uncaughtException(SourceFile:1)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
02-04 12:39:55.961 28766 28766 W PrimesExecutors: 	at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: Background task failed
02-04 12:39:55.961 28797 28797 W PrimesExecutors: java.lang.RuntimeException: Bad file descriptor
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.os.BinderProxy.transactNative(Native Method)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.os.BinderProxy.transact(BinderProxy.java:550)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.IPackageManager$Stub$Proxy.getPackageInfo(IPackageManager.java:4692)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager.getPackageInfoAsUserUncached(PackageManager.java:8179)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager.access$100(PackageManager.java:96)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager$2.recompute(PackageManager.java:8191)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager$2.recompute(PackageManager.java:8188)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.app.PropertyInvalidatedCache.query(PropertyInvalidatedCache.java:438)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.content.pm.PackageManager.getPackageInfoAsUserCached(PackageManager.java:8206)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:201)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:178)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at olb.a(Unknown Source:17)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at uug.a(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at okz.a(Unknown Source:18)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at uug.a(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at oks.run(Unknown Source:2)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at sfn.c(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at seu.run(SourceFile:4)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at sfo.run(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at sdz.execute(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at sfc.h(SourceFile:2)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at okt.c(SourceFile:2)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at olq.uncaughtException(SourceFile:85)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at dhh.uncaughtException(SourceFile:9)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at pkj.uncaughtException(SourceFile:1)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
02-04 12:39:55.961 28797 28797 W PrimesExecutors: 	at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: Version code: 60615334
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: Version code: 60615334
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: GH FATAL EXCEPTION: main
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: Process: com.google.android.projection.gearhead:vanagon
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: PID: 28766
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: java.lang.SecurityException: Wrong signature - go/gearhead-retail-device
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at android.os.Parcel.createExceptionOrNull(Parcel.java:2373)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at android.os.Parcel.createException(Parcel.java:2357)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at android.os.Parcel.readException(Parcel.java:2340)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at android.os.Parcel.readException(Parcel.java:2282)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at bvp.transactAndReadException(SourceFile:3)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at com.google.android.gms.car.ICar$Stub$Proxy.bp(SourceFile:4)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at loc.call(Unknown Source:1)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at com.google.android.gms.car.internal.exception.CarServiceExceptionHandler.f(SourceFile:1)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at com.google.android.gms.car.api.impl.CarClientBase.ag(SourceFile:1)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at lcb.L(SourceFile:1)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at pjq.a(SourceFile:19)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at pkg.d(SourceFile:1)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at dgo.a(SourceFile:12)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at com.google.android.gms.car.api.impl.GearheadCarClientToken.h(SourceFile:4)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at lrx.run(Unknown Source:1)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at android.os.Handler.handleCallback(Handler.java:938)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at android.os.Handler.dispatchMessage(Handler.java:99)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at android.os.Looper.loop(Looper.java:223)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at android.app.ActivityThread.main(ActivityThread.java:7660)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at java.lang.reflect.Method.invoke(Native Method)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at com.android.internal.os.ExecInit.main(ExecInit.java:48)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
02-04 12:39:55.964 28766 28766 E GH.CrashHandler: 	at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:399)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: GH FATAL EXCEPTION: main
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: Process: com.google.android.projection.gearhead:shared
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: PID: 28797
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: java.lang.SecurityException: Wrong signature - go/gearhead-retail-device
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at android.os.Parcel.createExceptionOrNull(Parcel.java:2373)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at android.os.Parcel.createException(Parcel.java:2357)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at android.os.Parcel.readException(Parcel.java:2340)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at android.os.Parcel.readException(Parcel.java:2282)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at bvp.transactAndReadExceptionReturnVoid(SourceFile:3)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at com.google.android.gms.car.ICar$Stub$Proxy.bq(SourceFile:4)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at lod.a(Unknown Source:1)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at com.google.android.gms.car.internal.exception.CarServiceExceptionHandler.g(SourceFile:1)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at com.google.android.gms.car.api.impl.CarClientBase.h(SourceFile:1)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at lcb.j(SourceFile:1)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at gfd.f(SourceFile:3)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at gfa.d(SourceFile:3)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at dgo.a(SourceFile:12)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at com.google.android.gms.car.api.impl.GearheadCarClientToken.h(SourceFile:4)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at lrx.run(Unknown Source:1)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at android.os.Handler.handleCallback(Handler.java:938)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at android.os.Handler.dispatchMessage(Handler.java:99)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at android.os.Looper.loop(Looper.java:223)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at android.app.ActivityThread.main(ActivityThread.java:7660)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at java.lang.reflect.Method.invoke(Native Method)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at com.android.internal.os.ExecInit.main(ExecInit.java:48)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
02-04 12:39:55.964 28797 28797 E GH.CrashHandler: 	at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:399)
02-04 12:39:55.964 28797 28797 W GH.CrashHandler: [DEFAULT] Dumping the last 25 logs.
02-04 12:39:55.965 28766 28766 W GH.CrashHandler: [DEFAULT] Dumping the last 36 logs.
02-04 12:39:55.991 28766 28766 W GH.CrashHandler: 02-04 12:39:55.155 D GH.PermissionChecker : checking permission for package: com.google.android.projection.gearhead
02-04 12:39:55.991 28797 28797 W GH.CrashHandler: 02-04 12:39:55.159 D GH.PermissionChecker : checking permission for package: com.google.android.projection.gearhead
02-04 12:39:55.991 28797 28797 W GH.CrashHandler: 02-04 12:39:55.159 D GH.PermissionChecker : initAppPermissions: 30
02-04 12:39:55.991 28766 28766 W GH.CrashHandler: 02-04 12:39:55.155 D GH.PermissionChecker : initAppPermissions: 30
02-04 12:39:55.991 28797 28797 W GH.CrashHandler: 02-04 12:39:55.162 D GH.AppInstallerUtil : Package com.google.android.projection.gearhead: installed ver=60615334 minimum required ver=53501600
02-04 12:39:55.991 28766 28766 W GH.CrashHandler: 02-04 12:39:55.160 D GH.AppInstallerUtil : Package com.google.android.projection.gearhead: installed ver=60615334 minimum required ver=53501600
02-04 12:39:55.991 28797 28797 W GH.CrashHandler: 02-04 12:39:55.162 D GH.AppInstallerUtil : Package com.google.android.googlequicksearchbox not found.
02-04 12:39:55.991 28766 28766 W GH.CrashHandler: 02-04 12:39:55.160 D GH.AppInstallerUtil : Package com.google.android.googlequicksearchbox not found.
02-04 12:39:55.991 28797 28797 W GH.CrashHandler: 02-04 12:39:55.163 D GH.AppInstallerUtil : Package com.google.android.apps.maps: installed ver=1059102040 minimum required ver=1031000000
02-04 12:39:55.991 28766 28766 W GH.CrashHandler: 02-04 12:39:55.161 D GH.AppInstallerUtil : Package com.google.android.apps.maps: installed ver=1059102040 minimum required ver=1031000000
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.163 D GH.AppInstallerUtil : Package com.google.android.tts not found.
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.161 D GH.AppInstallerUtil : Package com.google.android.tts not found.
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.163 D GH.CommonServiceLocator : Injecting real cloud card manager
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.169 D GH.CarClientManager : registered listener dgx@1fc5211
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.204 I GH.CallAdapterFactory : creating call adapter instance
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.172 D GH.CarClientManager : registered listener gfa@3964f76
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.210 D GH.SharedServiceConnect : Shared service started. [oomAdjSimplification:false, foregroundBound:true, bound:true]
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.189 D GH.CarClientManager : registered listener pkg@e79f977
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.210 I GH.CallAdapterFactory : useCompat().
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.210 D GH.CarClientManager : registered listener klm@cfba9e4
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.210 I GH.CallAdapterFactory : useCompat=false, Device running M or later, assuming a healthy telecom stack.
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.210 D GH.CarClientManager : start
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.222 I GH.UserSettings : Setting Bluetooth receiver state: 2
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.232 I CAR.TOKEN : Connecting com.google.android.gms.car.api.impl.GearheadCarClientToken@d9e57d8 using class com.google.android.gms.car.api.impl.CarClientImpl@22416918/class com.google.android.gms.car.api.impl.GearheadCarClientConnector@71264049 (cx attempt 1)
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.228 D GH.CarClientManager : registered listener dgx@91d3ade
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.232 I GH.SharedService : Shared Service created
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.300 D GH.CarClientManager : registered listener pkg@f15e4bf
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.236 E CAR.ANALYTICS : CarTelemetryCheckboxFeature exception
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.336 D GH.Morris : Error querying M status
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.377 D GH.SharedNotifications : Current notification listener: com.google.android.gearhead.notifications.SharedNotificationListenerManager$ListenerService
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.363 D GH.VnLaunchPadActivity : Turning screen on.
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.801 I GH.GhCarClientCtor : Bound to startup service, got Car Service: com.google.android.gms.car.ICar$Stub$Proxy@57c151c
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.376 D GH.SharedServiceConnect : onServiceConnected(ComponentName:ComponentInfo{com.google.android.projection.gearhead/com.google.android.gearhead.service.SharedService}, service:android.os.BinderProxy@2bec78c)
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.801 I GH.GhCarClientCtor : Bound to startup service, got Car Service: com.google.android.gms.car.ICar$Stub$Proxy@3ebb525
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.377 D GH.Telemetry : Logged 1 events.
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.802 I CAR.TOKEN : Successfully connected lry@5eba4ab using class com.google.android.gms.car.api.impl.CarClientImpl@22416918/class com.google.android.gms.car.api.impl.GearheadCarClientConnector@71264049 (cx attempt 1)
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.504 E CAR.ANALYTICS : CarTelemetryCheckboxFeature exception
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.802 D CAR.TOKEN : Fell back to GH due to: NO_FALLBACK_GH_CAR_USED
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.614 D GH.VnLaunchPadActivity : Ensuring preflight checks pass.
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.804 W CAR.TOKEN : Not allowing logging client connection event
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.615 D GH.VnLaunchPadActivity : Not connected to car service yet.
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.804 I GH.CarClientManager : CarClientToken connected.
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.615 D GH.VnLaunchPadActivity : Trying to connect
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.804 D GH.CarClientManager : notifyListenersOnConnected entered
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.616 I GH.LifetimeManager : connectToCarService
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.804 D GH.CarClientManager : calling onConnected on dgx@1fc5211
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.616 D GH.CarClientManager : registered listener eir@e4fced5
02-04 12:39:55.992 28797 28797 W GH.CrashHandler: 02-04 12:39:55.804 D GH.CarClientManager : calling onConnected on gfa@3964f76
02-04 12:39:55.992 28766 28766 W GH.CrashHandler: 02-04 12:39:55.616 D GH.CarClientManager : start
02-04 12:39:55.993 28797 28797 W GH.CrashHandler: 02-04 12:39:55.964 E GH.CrashHandler : Version code: 60615334
02-04 12:39:55.993 28766 28766 W GH.CrashHandler: 02-04 12:39:55.623 I CAR.TOKEN : Connecting com.google.android.gms.car.api.impl.GearheadCarClientToken@2ecf871 using class com.google.android.gms.car.api.impl.CarClientImpl@235140823/class com.google.android.gms.car.api.impl.GearheadCarClientConnector@184444502 (cx attempt 1)
02-04 12:39:55.993 28766 28766 W GH.CrashHandler: 02-04 12:39:55.860 I GH.GhCarClientCtor : Bound to startup service, got Car Service: com.google.android.gms.car.ICar$Stub$Proxy@2a144a9
02-04 12:39:55.993 28797 28797 W GH.CrashHandler: [ASSISTANT] Dumping the last 0 logs.
02-04 12:39:55.993 28766 28766 W GH.CrashHandler: 02-04 12:39:55.860 I GH.GhCarClientCtor : Bound to startup service, got Car Service: com.google.android.gms.car.ICar$Stub$Proxy@54bea2e
02-04 12:39:55.993 28766 28766 W GH.CrashHandler: 02-04 12:39:55.861 I CAR.TOKEN : Successfully connected lry@7facf5c using class com.google.android.gms.car.api.impl.CarClientImpl@235140823/class com.google.android.gms.car.api.impl.GearheadCarClientConnector@184444502 (cx attempt 1)
02-04 12:39:55.993 28766 28766 W GH.CrashHandler: 02-04 12:39:55.861 D CAR.TOKEN : Fell back to GH due to: NO_FALLBACK_GH_CAR_USED
02-04 12:39:55.993 28766 28766 W GH.CrashHandler: 02-04 12:39:55.863 W CAR.TOKEN : Not allowing logging client connection event
02-04 12:39:55.993 28766 28766 W GH.CrashHandler: 02-04 12:39:55.863 I GH.CarClientManager : CarClientToken connected.
02-04 12:39:55.993 28766 28766 W GH.CrashHandler: 02-04 12:39:55.863 D GH.CarClientManager : notifyListenersOnConnected entered
02-04 12:39:55.993 28766 28766 W GH.CrashHandler: 02-04 12:39:55.863 D GH.CarClientManager : calling onConnected on dgx@91d3ade
02-04 12:39:55.993 28766 28766 W GH.CrashHandler: 02-04 12:39:55.863 D GH.CarClientManager : calling onConnected on pkg@f15e4bf
02-04 12:39:55.993 28766 28766 W GH.CrashHandler: 02-04 12:39:55.964 E GH.CrashHandler : Version code: 60615334
02-04 12:39:55.993 28766 28766 W GH.CrashHandler: [ASSISTANT] Dumping the last 0 logs.
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: Restore failed and we are bailing out. Ignore crashes here
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: java.lang.RuntimeException: Bad file descriptor
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at android.os.BinderProxy.transactNative(Native Method)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at android.os.BinderProxy.transact(BinderProxy.java:550)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at android.app.IActivityManager$Stub$Proxy.refContentProvider(IActivityManager.java:5772)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at android.app.ActivityThread.incProviderRefLocked(ActivityThread.java:6879)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at android.app.ActivityThread.acquireExistingProvider(ActivityThread.java:6943)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at android.app.ActivityThread.acquireProvider(ActivityThread.java:6802)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at android.app.ContextImpl$ApplicationContentResolver.acquireProvider(ContextImpl.java:2916)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at android.content.ContentResolver.acquireProvider(ContentResolver.java:2465)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at android.content.ContentResolver.call(ContentResolver.java:2400)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at android.content.ContentResolver.call(ContentResolver.java:2385)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at dmb.contains(SourceFile:4)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at com.google.android.projection.gearhead.GhCrashHandler.d(SourceFile:4)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at com.google.android.projection.gearhead.GhCrashHandler.uncaughtException(SourceFile:22)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at olq.uncaughtException(SourceFile:87)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at dhh.uncaughtException(SourceFile:9)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at pkj.uncaughtException(SourceFile:1)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
02-04 12:39:55.994 28766 28766 E GH.CrashHandler: 	at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)
02-04 12:39:55.994 28797 28797 E GH.CarModeSettings: Crash before we setup. Silently quit
02-04 12:39:56.004 28766 28766 I GH.CrashReporter: Reporting crash a217baaf-4d3b-47e3-993c-61ef30896921
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: Creating a crash report failed
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: java.lang.RuntimeException: Bad file descriptor
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: 	at android.os.BinderProxy.transactNative(Native Method)
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: 	at android.os.BinderProxy.transact(BinderProxy.java:550)
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: 	at android.app.IActivityManager$Stub$Proxy.broadcastIntentWithFeature(IActivityManager.java:5553)
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: 	at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1115)
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: 	at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:468)
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: 	at dzb.a(SourceFile:15)
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: 	at com.google.android.projection.gearhead.GhCrashHandler.uncaughtException(SourceFile:29)
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: 	at olq.uncaughtException(SourceFile:87)
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: 	at dhh.uncaughtException(SourceFile:9)
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: 	at pkj.uncaughtException(SourceFile:1)
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
02-04 12:39:56.004 28766 28766 E GH.CrashHandler: 	at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)
02-04 12:39:56.008 28766 28766 I GH.CrashHandler: Finished processing crash for com.google.android.projection.gearhead:vanagon
02-04 12:39:56.008 28766 28766 I Process : Sending signal. PID: 28766 SIG: 9
02-04 12:39:56.010 28797 28797 D CompatibilityChangeReporter: Compat change id reported: 119147584; UID 10160; state: ENABLED
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: Restore failed and we are bailing out. Ignore crashes here
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: java.lang.RuntimeException: Bad file descriptor
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.os.BinderProxy.transactNative(Native Method)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.os.BinderProxy.transact(BinderProxy.java:550)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.content.IContentService$Stub$Proxy.notifyChange(IContentService.java:1256)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.content.ContentResolver.notifyChange(ContentResolver.java:2828)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.content.ContentResolver.notifyChange(ContentResolver.java:2817)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.content.ContentResolver.notifyChange(ContentResolver.java:2736)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.content.ContentResolver.notifyChange(ContentResolver.java:2706)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.content.ContentResolver.notifyChange(ContentResolver.java:2672)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at com.google.android.apps.auto.components.config.preferences.contentprovider.SharedPreferencesProvider.onSharedPreferenceChanged(SourceFile:5)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.app.SharedPreferencesImpl$EditorImpl.notifyListeners(SharedPreferencesImpl.java:629)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.app.SharedPreferencesImpl$EditorImpl.commit(SharedPreferencesImpl.java:617)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at com.google.android.apps.auto.components.config.preferences.contentprovider.SharedPreferencesProvider.call(SourceFile:42)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.content.ContentProvider.call(ContentProvider.java:2448)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.content.ContentProvider$Transport.call(ContentProvider.java:517)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.content.ContentResolver.call(ContentResolver.java:2405)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at android.content.ContentResolver.call(ContentResolver.java:2385)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at dly.commit(SourceFile:2)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at com.google.android.projection.gearhead.GhCrashHandler.d(SourceFile:7)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at com.google.android.projection.gearhead.GhCrashHandler.uncaughtException(SourceFile:22)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at olq.uncaughtException(SourceFile:87)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at dhh.uncaughtException(SourceFile:9)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at pkj.uncaughtException(SourceFile:1)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
02-04 12:39:56.010 28797 28797 E GH.CrashHandler: 	at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)
02-04 12:39:56.015 28797 28797 I GH.CrashReporter: Reporting crash 9a528fd8-451e-40f9-86d8-01a69da2062d
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: Creating a crash report failed
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: java.lang.RuntimeException: Bad file descriptor
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: 	at android.os.BinderProxy.transactNative(Native Method)
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: 	at android.os.BinderProxy.transact(BinderProxy.java:550)
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: 	at android.app.IActivityManager$Stub$Proxy.broadcastIntentWithFeature(IActivityManager.java:5553)
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: 	at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1115)
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: 	at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:468)
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: 	at dzb.a(SourceFile:15)
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: 	at com.google.android.projection.gearhead.GhCrashHandler.uncaughtException(SourceFile:29)
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: 	at olq.uncaughtException(SourceFile:87)
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: 	at dhh.uncaughtException(SourceFile:9)
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: 	at pkj.uncaughtException(SourceFile:1)
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: 	at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
02-04 12:39:56.016 28797 28797 E GH.CrashHandler: 	at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)
02-04 12:39:56.023 28797 28797 I GH.CrashHandler: Finished processing crash for com.google.android.projection.gearhead:shared
02-04 12:39:56.023 28797 28797 I Process : Sending signal. PID: 28797 SIG: 9
02-04 12:39:56.043  1483  1884 W InputDispatcher: channel '23de282 com.google.android.projection.gearhead/com.google.android.gearhead.vanagon.VnLaunchPadActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
02-04 12:39:56.043  1483  1884 E InputDispatcher: channel '23de282 com.google.android.projection.gearhead/com.google.android.gearhead.vanagon.VnLaunchPadActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
02-04 12:39:56.045  1483 14166 I ActivityManager: Process com.google.android.projection.gearhead:vanagon (pid 28766) has died: fg  TOP 
02-04 12:39:56.046  1483 16490 I WindowManager: WIN DEATH: Window{23de282 u0 com.google.android.projection.gearhead/com.google.android.gearhead.vanagon.VnLaunchPadActivity}
02-04 12:39:56.046  1483 16490 W InputDispatcher: Attempted to unregister already unregistered input channel '23de282 com.google.android.projection.gearhead/com.google.android.gearhead.vanagon.VnLaunchPadActivity (server)'
02-04 12:39:56.052   898   898 I Zygote  : Process 28797 exited due to signal 9 (Killed)
02-04 12:39:56.052   898 28837 I Zygote  : Process 28766 exited due to signal 9 (Killed)
02-04 12:39:56.053  1483 14166 W ActivityManager: Exception when unbinding service com.google.android.projection.gearhead/com.google.android.gearhead.service.SharedService
02-04 12:39:56.053  1483 14166 W ActivityManager: android.os.DeadObjectException
02-04 12:39:56.053  1483 14166 W ActivityManager: 	at android.os.BinderProxy.transactNative(Native Method)
02-04 12:39:56.053  1483 14166 W ActivityManager: 	at android.os.BinderProxy.transact(BinderProxy.java:550)
02-04 12:39:56.053  1483 14166 W ActivityManager: 	at android.app.IApplicationThread$Stub$Proxy.scheduleUnbindService(IApplicationThread.java:1646)
02-04 12:39:56.053  1483 14166 W ActivityManager: 	at com.android.server.am.ActiveServices.removeConnectionLocked(ActiveServices.java:3505)
02-04 12:39:56.053  1483 14166 W ActivityManager: 	at com.android.server.am.ActiveServices.killServicesLocked(ActiveServices.java:3907)
02-04 12:39:56.053  1483 14166 W ActivityManager: 	at com.android.server.am.ActivityManagerService.cleanUpApplicationRecordLocked(ActivityManagerService.java:14751)
02-04 12:39:56.053  1483 14166 W ActivityManager: 	at com.android.server.am.ActivityManagerService.handleAppDiedLocked(ActivityManagerService.java:3756)
02-04 12:39:56.053  1483 14166 W ActivityManager: 	at com.android.server.am.ActivityManagerService.appDiedLocked(ActivityManagerService.java:3910)
02-04 12:39:56.053  1483 14166 W ActivityManager: 	at com.android.server.am.ActivityManagerService$AppDeathRecipient.binderDied(ActivityManagerService.java:1601)
02-04 12:39:56.053  1483 14166 W ActivityManager: 	at android.os.IBinder$DeathRecipient.binderDied(IBinder.java:305)
02-04 12:39:56.053  1483 14166 W ActivityManager: 	at android.os.BinderProxy.sendDeathNotice(BinderProxy.java:664)
02-04 12:39:56.054   630   630 W lowmemorykiller: Failed to open /proc/28797/oom_score_adj; errno=2: process 28797 might have been killed
02-04 12:39:56.056  1483 14166 W ActivityTaskManager: Force removing ActivityRecord{7e9d757 u0 com.google.android.projection.gearhead/com.google.android.gearhead.vanagon.VnLaunchPadActivity t5295}: app died, no saved state
02-04 12:39:56.064  2394  5591 D KeyguardViewMediator: setOccluded false
02-04 12:39:56.065  2394  2394 D KeyguardViewMediator: adjustStatusBarLocked: mShowing=false mOccluded=false isSecure=true force=false --> flags=0x0
02-04 12:39:56.077  4108  4108 D Launcher.Utilities: onLauncherStart: 0
02-04 12:39:56.080   630   630 W lowmemorykiller: Failed to open /proc/28797/oom_score_adj; errno=2: process 28797 might have been killed
02-04 12:39:56.084  1483  6327 I ActivityManager: Process com.google.android.projection.gearhead:shared (pid 28797) has died: cch CACC
02-04 12:39:56.085 28836 28836 I GH.CAR  : onDestroy
02-04 12:39:56.085 28836 28836 I GH.CAR  : tearDown()
02-04 12:39:56.089  1483  1534 W ActivityManager: setHasOverlayUi called on unknown pid: 28766
02-04 12:39:56.090  1483  1542 I libprocessgroup: Successfully killed process cgroup uid 10160 pid 28766 in 44ms
02-04 12:39:56.091  1483  1542 I libprocessgroup: Successfully killed process cgroup uid 10160 pid 28797 in 0ms
02-04 12:39:56.092  1483 14193 W ActivityManager: Unable to start service Intent { act=com.android.launcher3.WINDOW_OVERLAY dat=app://ch.deletescape.lawnchair.plah:10125?v=7&cv=9 pkg=com.google.android.googlequicksearchbox } U=0: not found
02-04 12:39:56.095 28836 28836 I GH.CarService: tearDown()
02-04 12:39:56.095 28836 28836 I GH.DelegateMngCarSvc: tearDown()
02-04 12:39:56.097 28836 28836 E ActivityThread: Service com.google.android.apps.auto.carservice.service.impl.GearheadCarStartupService has leaked ServiceConnection coi@b1daeee that was originally bound here
02-04 12:39:56.097 28836 28836 E ActivityThread: android.app.ServiceConnectionLeaked: Service com.google.android.apps.auto.carservice.service.impl.GearheadCarStartupService has leaked ServiceConnection coi@b1daeee that was originally bound here
02-04 12:39:56.097 28836 28836 E ActivityThread: 	at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:1835)
02-04 12:39:56.097 28836 28836 E ActivityThread: 	at android.app.LoadedApk.getServiceDispatcherCommon(LoadedApk.java:1707)
02-04 12:39:56.097 28836 28836 E ActivityThread: 	at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:1686)
02-04 12:39:56.097 28836 28836 E ActivityThread: 	at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1819)
02-04 12:39:56.097 28836 28836 E ActivityThread: 	at android.app.ContextImpl.bindService(ContextImpl.java:1749)
02-04 12:39:56.097 28836 28836 E ActivityThread: 	at android.content.ContextWrapper.bindService(ContextWrapper.java:756)
02-04 12:39:56.097 28836 28836 E ActivityThread: 	at coj.run(SourceFile:1)
02-04 12:39:56.097 28836 28836 E ActivityThread: 	at android.os.Handler.handleCallback(Handler.java:938)
02-04 12:39:56.097 28836 28836 E ActivityThread: 	at android.os.Handler.dispatchMessage(Handler.java:99)
02-04 12:39:56.097 28836 28836 E ActivityThread: 	at android.os.Looper.loop(Looper.java:223)
02-04 12:39:56.097 28836 28836 E ActivityThread: 	at android.os.HandlerThread.run(HandlerThread.java:67)
02-04 12:39:56.104 28836 28836 I CAR.SERVICE: Skip, no clients bound.
02-04 12:39:56.114 28836 28881 I GH.DelegateICarSupplier: Calling release callback on delegate com.google.android.gms.car.DelegatingCarServiceBinder@3b62a4c
02-04 12:39:56.114 28836 28881 I GH.DelegateICarSupplier: Releasing delegate ICar.
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: Exception unbinding service connection.
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: java.lang.IllegalArgumentException: Service not registered: coi@b1daeee
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1781)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at android.app.ContextImpl.unbindService(ContextImpl.java:1874)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at android.content.ContextWrapper.unbindService(ContextWrapper.java:792)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at cok.a(SourceFile:1)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at cof.a(Unknown Source:1)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at sdg.e(Unknown Source:2)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at sdh.run(SourceFile:9)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at sdz.execute(SourceFile:1)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at sdd.r(SourceFile:1)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at sdd.a(SourceFile:6)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at sei.a(SourceFile:1)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at sdh.g(SourceFile:3)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at coe.a(Unknown Source:4)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at cow.b(SourceFile:2)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at cov.a(Unknown Source:1)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at qye.a(SourceFile:1)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at cor.d(Unknown Source:104)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at com.a(Unknown Source:4)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at qye.a(SourceFile:1)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at cop.b(Unknown Source:36)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at sen.run(SourceFile:7)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
02-04 12:39:56.157 28836 28881 E GH.CarChiSvcCtor: 	at java.lang.Thread.run(Thread.java:923)
02-04 12:39:56.157 28836 28881 W GH.DelegateICarSupplier: ICar release task succeeded but did not release ICar.

Looking at these errors it looks like

  1. java.lang.SecurityException: Wrong signature - go/gearhead-retail-device a certificate check is failing somewhere
  2. Bound to startup service, got Car Service: com.google.android.gms.car.ICar$Stub$Proxy@2a144a9 a service is missing from "GMS" (microG)

@dylangerdaly
Copy link
Contributor

dylangerdaly commented Feb 4, 2021

Patching the GoogleSignatureVerifier.a(arg5).b(v3) function results in Android Auto starting up without crashing
aa

Next up is to get away with not having to have these apps

After install the requested apps, it works

aa2

I will have to wait til my car arrives to test plugging it into an Android Auto car.

FYI this device is running GrapheneOS, installing the Google app defeats the purpose of such OS, as a work around I've denied the Google app access to the internet.

@dylangerdaly
Copy link
Contributor

dylangerdaly commented Feb 4, 2021

It should be possible to fix this without patching the apk

66 W DynamiteModule: IDynamite loader version < 2, falling back to getModuleVersion2
02-04 12:39:55.911 28836 28866 I DynamiteModule: Considering local module com.google.android.gms.googlecertificates:0 and remote module com.google.android.gms.googlecertificates:1
02-04 12:39:55.911 28836 28866 I DynamiteModule: Selected remote version of com.google.android.gms.googlecertificates, version >= 1
02-04 12:39:55.911 28836 28866 W DynamiteModule: Dynamite loader version < 2, falling back to createModuleContext
02-04 12:39:55.912 28836 28866 D GmsDynamiteLoaderImpl: createModuleContext for com.google.android.gms.googlecertificates at version 1
02-04 12:39:55.935 28836 28866 D SafeParcel: Unknown field id 4 in com.google.android.gms.common.internal.GoogleCertificatesQuery, skipping.
02-04 12:39:55.935 28836 28868 D SafeParcel: Unknown field id 4 in com.google.android.gms.common.internal.GoogleCertificatesQuery, skipping.

It seems it's just not implemented into GmsCore yet, if you patch the app it'll cause other apps (like Spotify etc) to not trust it because the signature changed.

If anyone has any pointers on how to fix the above issue any guidance would be appreciated

It's only failing due to a certificate check, no other APIs within GMS are required from what I can tell

@woolmonkey
Copy link

Patching the GoogleSignatureVerifier.a(arg5).b(v3) function results in Android Auto starting up without crashing
aa

Next up is to get away with not having to have these apps

After install the requested apps, it works

aa2

I will have to wait til my car arrives to test plugging it into an Android Auto car.

FYI this device is running GrapheneOS, installing the Google app defeats the purpose of such OS, as a work around I've denied the Google app access to the internet.

So did this work with a head unit?

@dylangerdaly
Copy link
Contributor

It did not, the logic that handles dealing with USB is (I think) located within GMS, so this is what needs to be implemented into microG.

https://github.com/tomasz-grobelny/AACS

I'll start doing some PoCs next week

@ilikenwf
Copy link

@dylangerdaly I use the official builds of GrapheneOS, have built myself in the past with the sig spoof patch and used MicroG, but it has been a while.

It would be great if we could find a way to build an open source application that just uses the android auto protocol to mirror the device fully to the head unit...

For USB, you may have some luck looking at OpenAuto - it handles the emulation of a head unit (or a real one if you build it with a Pi)... It could give us some info on implementing our own mirroring, or at least the protocol - I think they have technical info somewhere. https://github.com/f1xpl/openauto

@dylangerdaly
Copy link
Contributor

Oh awesome, yeah I'm doing the same with GrapheneOS + microG, usually kick off a build each month, I like being able to add my own patches on top of the OS.

Yeah I think OpenAuto will be the way to go, as I don't have my own car that support AA, yet

I agree I think people would find just mirroring the screen more useful than trying to integrate it with the Android Auto app.

@ilikenwf
Copy link

Apparently "extras for AA" here lets you hide the navbar, and then there's AA mirror...

https://github.com/shmykelsa/extrasforaa-release

I tried using an HDMI mirroring system for my vehicle but that didn't end up working, so AA is my only choice - I may end up building it and putting it on a Pi or other SBC instead so it is private...I've already disabled the cell modem on the headunit itself.

This is all a combo of privacy concerns and the fact the headunit can't handle my FLAC collection.

@ilikenwf
Copy link

Someone also has written an interesting app to proxy android auto from one device to another, to facilitate adding wireless functionality to unsupported vehicles:

https://github.com/borconi/AAGateWay

@ilikenwf
Copy link

@dylangerdaly
Copy link
Contributor

dylangerdaly commented Feb 16, 2021

Quick little update

I've managed to get Android Auto working on a GrapheneOS device with microG
PXL_20210216_002412925
PXL_20210216_002513872

It appears Google have moved the AACS logic from Google Services into the standalone Android Auto apk, there currently is an issue with a possible certificate missing from microG(?) causing it to crash immediately, to get around this I patched the check and added a sig spoof patch similar to the microG sig spoof patch, making it look to other apps Android Auto is signed with the correct Google cert.

After that the app needs to be a privapp with a long list of permissions

Thanks to the people in the microG element room for pointing me in the right direction with the permissions.

It could be possible to patch the Activity that gets launched when you plug a device in 👀

@domhaas
Copy link

domhaas commented Feb 16, 2021

Quick little update

I've managed to get Android Auto working on a GrapheneOS device with microG

It appears Google have moved the AACS logic from Google Services into the standalone Android Auto apk, there currently is an issue with a possible certificate missing from microG(?) causing it to crash immediately, to get around this I patched the check and added a sig spoof patch similar to the microG sig spoof patch, making it look to other apps Android Auto is signed with the correct Google cert.

After that the app needs to be a privapp with a long list of permissions

Thanks to the people in the microG element room for pointing me in the right direction with the permissions.

It could be possible to patch the Activity that gets launched when you plug a device in eyes

Great job!
Is everything working so far?

@dylangerdaly
Copy link
Contributor

dylangerdaly commented Feb 16, 2021

I think so, only had 30 or so seconds to test, still waiting on my car to arrive lol, I should be able to test further tomorrow.

Maps works well with Apple's Nlp Backend from my initial testing

Another fun little factoid if you patch this to always return true

    private final boolean y(String arg7, ApplicationType arg8) throws PackageManager.NameNotFoundException {
        if(arg8 == ApplicationType.a) {
            cgw.a.k().aa(0x402).t("Skip meta-data checks; OEM application type [%s]", arg7);
            return true;
        }

It'll show apps that don't typically support AA, like SoundCloud etc

@woolmonkey
Copy link

This is awesome the one reason I still used GAPPS. Looking forward to when it gets released.

@ArchangeGabriel
Copy link
Contributor

@dylangerdaly Awesome work. Being a recent owner of an Android Auto car, I’m looking forward to being able to use it on my car with microG.

Were you able to run it without installing the “Google App” and such? Or is that still with those apps installed?

@dylangerdaly
Copy link
Contributor

I've opened a PR --> #1396

This fixes Auto from crashing immediately on startup, just needed to add it to the Google Packages list.

Were you able to run it without installing the “Google App” and such? Or is that still with those apps installed?

I haven't tested this yet, I think the next hurdle will be getting it working without it needing to be a privapp, Graphene and other OSs give you the ability to disallow internet access to specific apps, as a workaround for having the Google App installed, I just disallowed internet access to the app, it's possible just having the Google App installed as a sub could work, this needs to be tested further.

@woolmonkey
Copy link

woolmonkey commented Feb 19, 2021

With pico gapps I have run it with Google, text to speech and maps without being in privapp. Now just have to figure out how to run with this. Managed to compile it but getting it on the phone is another challenge.

@woolmonkey
Copy link

woolmonkey commented Feb 23, 2021

So I have it running everything in data ezcpect android auto. The one thing I noticed and looks the same.in your screen shot is no messaging. I tried to put signal in and nothing also no default SMS. It well read an SMS and I can reply but doesn't show on screen.

@joshaspinall
Copy link

joshaspinall commented Feb 24, 2021

Having this working would be fantastic. Having recently switched over to the MicroG + Lineage build, this is one of the very few things missing. The plus point if you include it for the extra apps would be great for services like Jellyfin.

Thanks, and keep up the good work!

Edited to add:
If you need testing, please let me know!

@Wieczorkiewicz
Copy link

If this becomes true, it would be a resounding triumph for the true public interest towards privacy protection, especially with graphene packed on a pixel. Some of us still need to keep the bootloader unlocked for safetynet, but that would be the last step towards perfection if someone could get the magisk integration signed and bootloader lockable, which may not be far away.

I am really looking forward to the publication of this patch as well as many who have to stay behind wheels. Rest assured, donations will come like giving the money tree a kick. Imagine.

PS: I am also interested in getting a beta version for testing. Yet I see only a master branch, where can I find the beta channel?

@ilikenwf
Copy link

ilikenwf commented Mar 2, 2021

There are some root only apps that do a lot towards enabling all apps in AA, I suspect combining AAMirror or whatever it's called with the one that disables the always on menu bar would be excellent together, giving you a direct mirror of the phone...

@woolmonkey
Copy link

woolmonkey commented Mar 10, 2021

So in case anyone is interested Maps and Google just have to be installed. You can disable them and android auto well still run. If you disable Google there is no voice control and maps is obvious. I would assume text to speech is the same.

@ilikenwf
Copy link

Does that mean we could patch MicroG further to allow spoofing for maps and the google app with fake apks?

@ilikenwf
Copy link

...for that matter, I suppose because we do that kind of thing anyway, we could theoretically strip down the AA apk down to just a basic app with no deps, no connections, no google bits if we're spoofing?

@woolmonkey
Copy link

woolmonkey commented Mar 11, 2021

I imagine it’s beyond me. Fake apps like the play store would probably be the easiest option. The apps do have to be installed once removed it asks for them but if they are disabled it works fine. Disabled Google you get voice search not available when trying to search something. Disabled maps no navigation. But install Waze and that works fine. There is only one other navigation app for Android Auto but it’s in beta and I haven’t tried it yet.
Also it has worked with 2 head unit this way fine.

@ghost
Copy link

ghost commented Aug 2, 2023

Hey, i made simple patch in connection to your info. Compilation ROM for Pixel 6a works without problems but i can't test my changes yet because i don't have any Pixel... My main goal is to compile GrapheneOS as GSI with android auto support to use it without root. It's my first compilation of ROM so i wanted to make it easy for learning compilation process.

Is there a good guide somewhere to get this into a working build on 13? Been doing the standard GrapheneOS builds but I'm missing Auto.

@sn-00-x
Copy link

sn-00-x commented Aug 30, 2023

I finally had time to finish the integration. With the help of this patch it is possible to run Android Auto as user app under GrapheneOS (and probably other Android 13 roms, cause it doesn't rely on GrapheneOS itself).

It also provides a layer for Screen2Auto that only grants invasive permissions (draw over other apps, accessibility service) while connected to a head unit or screen sharing. That means you can watch Netflix on your head unit and even use it as a touch screen while not granting any of those permissions to Screen2Auto when they are not needed.

Follow these basic instructions to build

@catwithbanana
Copy link

I finally had time to finish the integration. With the help of this patch it is possible to run Android Auto as user app under GrapheneOS (and probably other Android 13 roms, cause it doesn't rely on GrapheneOS itself).

It also provides a layer for Screen2Auto that only grants invasive permissions (draw over other apps, accessibility service) while connected to a head unit or screen sharing. That means you can watch Netflix on your head unit and even use it as a touch screen while not granting any of those permissions to Screen2Auto when they are not needed.

Follow these basic instructions to build

Thank you so much for your work on this. I hope some day the GrapheneOS devs come to their senses and see the value in officially integrating this as an option for those who want it.

@thestinger
Copy link

Giving invasive privileged permissions is not the sandboxed Google Play approach. The whole point of it is that it runs Google Play as a regular app with zero additional access than the Google Play SDK and libraries have within apps. Taking this shortcut is not a valid approach for it. The approach we do in GrapheneOS is not taking very problematic shortcuts instead of doing things properly. The only proper approach to this would be using a combination of the same approach we already use with sandboxed Google Play and if necessary developing new permissions for access it requires but so far we haven't added any way of granting additional access and we don't really want to do that. Better to develop a full alternative.

@catwithbanana
Copy link

The only proper approach to this would be using a combination of the same approach we already use with sandboxed Google Play and if necessary developing new permissions for access it requires but so far we haven't added any way of granting additional access and we don't really want to do that. Better to develop a full alternative.

I gotcha, and I don't disagree. I'm in a position where the lack of Android Auto is quite literally the only reason I'm not using GrapheneOS; I drive a lot and can't safely navigate maps, calls, and music on my phone screen while doing so. I'm sure I'm not the only one that really needs head unit support in their cars. It's important enough to me that I personally would be willing to sacrifice some privileged permission access to get it, but a more privacy-conscious approach would obviously be better.

Hopefully Android Auto is added to Graphene sooner rather than later. Fingers crossed.

@starsoccer
Copy link

+1 to the above. Ive spent most of today doing research into what my options are if android auto, or something like it are a requirement for me. So far it seems like my options are quite limited.

While I dont think android auto itself is a requirement in graphene OS or any other not stock OS, I think it is super important there is some option that can make us of cars screens for navigation. Especially as more and more cars are not offering GPS as an option

@zachvlat
Copy link

zachvlat commented Sep 21, 2023

+1 to the above. Ive spent most of today doing research into what my options are if android auto, or something like it are a requirement for me. So far it seems like my options are quite limited.

While I dont think android auto itself is a requirement in graphene OS or any other not stock OS, I think it is super important there is some option that can make us of cars screens for navigation. Especially as more and more cars are not offering GPS as an option

One option (I think) is to make a "non-free-android-auto" fork version of grapheneOS similar on what debian was doing with their iso's (a Foss and a proprietary). Or just like the google play services could be made a similar sandboxed module for android auto. To be installed and uninstalled just like a normal app.

@hbchai
Copy link

hbchai commented Nov 5, 2023

Relatively new CalyxOS user here. What can be done to move forward with this feature request?

Is it viable to add a new permission to MicroG specifically to allow Android Auto to work? E.g. a permission that is disabled by default, and that the user can opt into?

The only proper approach to this would be using a combination of the same approach we already use with sandboxed Google Play and if necessary developing new permissions for access it requires but so far we haven't added any way of granting additional access and we don't really want to do that.

@thestinger, could you explain the thinking behind your comment "we don't really want to do that". Is that because the permissions are too specific, or they are too "permissive", or something else?

Better to develop a full alternative.

By this, do you mean forget about using Android Auto and develop a new e.g. open source replacement? If so, is anyone working on such a project?

@sn-00-x, thanks for the work to demonstrate that AA can be made to work!

@bblacher
Copy link

bblacher commented Nov 5, 2023

@hbchai The devs of CalyxOS have 2 implementations that would result in Android Auto working. See https://review.calyxos.org/c/CalyxOS/vendor_calyx/+/18108 and https://review.calyxos.org/c/CalyxOS/platform_frameworks_base/+/15365. However, they are currently finishing their port to 14 and will be busy for a while after that porting to the Pixel 8 series, the Fairphone 5 and some Motorola devices.

If you're savvy enough you could build CalyxOS yourself with either one of the implementations merged.

@rtsisyk
Copy link

rtsisyk commented Dec 2, 2023

Does Auto work in Calyx 5.1.x already?

@spokendotcpp
Copy link

Does Auto work in Calyx 5.1.x already?

From @bblacher answer; if you read both Gerrit reviews changelogs:

What you can do is download the patch from their GitLab repository ("Options" dropdown in right-corner)
https://gitlab.com/CalyxOS/platform_frameworks_base/-/commit/f5e84444a62603b1407e8714c2b66bff2401856c

and apply it to your local and -home-made- build.
(https://calyxos.org/docs/development/build/)

Watchout: since your installed version of CalyxOS will not be -official-,
bootloader could not be re-locked as the OOTB-version does.

@sn-00-x
Copy link

sn-00-x commented Dec 2, 2023

The mentioned implementation https://review.calyxos.org/c/CalyxOS/platform_frameworks_base/+/15365 will not work. It is missing a lot stuff required for newer Android versions.

To make Android Auto work as user app under Android 14 you need this and this.

For more info and for media app support see https://github.com/sn-00-x/android-auto which describes how to use my small GrapheneOS fork.

@thestinger
Copy link

@sn-00-x GrapheneOS is about to ship an extension of the sandboxed Google Play compatibility layer to Android Auto which avoids needing to give it a whole bunch of privileged access. The access which needs to be granted it actually a reasonable scope with the compatibility layer extended to it. Our existing approach largely works for it, but not entirely so we do need to add another toggle for granting the privileges it does need. We could have added a privileged Android Auto toggle ages ago but it's not our approach. We care about doing this well. We certainly wouldn't simply automatically grant privileged access to it to get it working.

@sn-00-x
Copy link

sn-00-x commented Dec 3, 2023

@thestinger Great to see Android Auto support will finally make it into GrapheneOS! Exactly what I was waiting for since I bought a Pixel and realized the OS I intended to use is missing a key feature (for me).

Actually I'm glad you took so long, because it was great fun to work on the integration and will be so when adding Screen2Auto support on top of your compat layer extension. I learned many things while working on this. :)

If I could make a wish for another feature, it would be a local network toggle. Android Auto uses wifi for wireless connections to a head unit. With the current network permission, it requires granting full internet access to Android Auto or fall back to a wired connection. Having a separate toggle for local network access only, would make it possible to connect Android Auto wirelessly while still blocking it's connections to the outside.

@ghost
Copy link

ghost commented Dec 13, 2023

@sn-00-x GrapheneOS is about to ship an extension of the sandboxed Google Play compatibility layer to Android Auto which avoids needing to give it a whole bunch of privileged access. The access which needs to be granted it actually a reasonable scope with the compatibility layer extended to it. Our existing approach largely works for it, but not entirely so we do need to add another toggle for granting the privileges it does need. We could have added a privileged Android Auto toggle ages ago but it's not our approach. We care about doing this well. We certainly wouldn't simply automatically grant privileged access to it to get it working.

This is very exciting. Can't wait for its release.

@Charlyo
Copy link

Charlyo commented Dec 19, 2023

Just wanted to ask if anyone got CalyxOS (Android 14) working with a minimal amount of permissions given to android auto.

@rtsisyk
Copy link

rtsisyk commented Dec 19, 2023

Just wanted to ask if anyone got CalyxOS (Android 14) working with a minimal amount of permissions given to android auto.

Nope.

@sn-00-x
Copy link

sn-00-x commented Dec 19, 2023

Just wanted to ask if anyone got CalyxOS (Android 14) working with a minimal amount of permissions given to android auto.

Well, my patches should also work on CalyxOS. You basically only need Support Android Auto as user app (part one and part two), if you only want standard Android Auto.

@Charlyo
Copy link

Charlyo commented Dec 19, 2023

Thank you, @sn-00-x. I would also be interested in the minimal ammount of permissions. Have you played with them in order to see if AA still works?

@sn-00-x
Copy link

sn-00-x commented Dec 19, 2023

Yes, that was exactly my intention. That's why I've implemented support for Android Auto as user app and not as a system app.
Those are the minimal permissions needed: sn-00-x/grapheneos-platform_frameworks_base@5a6e0f9#diff-b7390a62899a6ac4376e8210851bdf0517c608bebdfd242db92aec292f99aadcR52-R63 (Well not entirely true, cause it also works without CONTROL_INCALL_EXPERIENCE, MODIFY_AUDIO_ROUTING, START_ACTIVITIES_FROM_BACKGROUND. But then you can't accept and/or end incoming phone calls, Voice messages on WhatsApp won't use the car speakers and you need to open Android Auto settings when plugging in the cable).
Furthermore the role android.app.role.SYSTEM_AUTOMOTIVE_PROJECTION will grant those permissions: sn-00-x/grapheneos-platform_packages_modules_Permission@7eb8ea6#diff-fd35f1787b0f0c45191ee830aaa91b85e34546ac8d356e3fb1f5ec453c5dc533L565-L581 but you can revoke most of these in the settings. Because AA will be a user app, you can grant or revoke all those standard permissions in the permission settings for the app.

@geeky-neo
Copy link
Author

Thanks for all the efforts 🙏 @sn-00-x .

When are the changes going to be published to the devices?

@thestinger
Copy link

It goes against the approach followed by GrapheneOS to give privileged permissions to an application like Android Auto. Sandboxed Google Play avoids giving absolutely any special access or privileges to the Google Play apps. We're aware that's how others handle it including operating systems using privileged microG and granting special privileges to other Google apps, but it's not what we do ourselves. It has to be minimized via the same compatibility layer approach to the extent possible, and a toggle provided for whatever can't be eliminated via a compatibility layer. Long term, it will ideally trend away from granting special privileges via a toggle as better approaches are developed. Longer term, we would ideally have our own implementation of the protocol not tied to Google services, so this would be a stopgap just like the eSIM activation app toggle we currently provide.

@hbchai
Copy link

hbchai commented Dec 22, 2023

The comment from @bblacher on Nov 5 was useful. Do we have any news on progress towards adding Android Auto support properly?

Is this the issue ticket to follow, or should we be referencing some other tracker?

What is the best way to get this support prioritized? If there is a tip jar / bug bounty mechanism, I would happily make a donation if it might accelerate work here.

Is it possible to get a design specification of the approach acceptable per multiple comments from @thestinger? @sn-00-x has done valuable work, and given the right guidance, might (I hope?) be willing to contribute a mergeable fix, a win-win for everyone.

@sn-00-x
Copy link

sn-00-x commented Dec 26, 2023

The comment from Nov 5 mentions two approaches at CalyxOS.
The first one is actually the default way of adding the apk, so it requires Android Auto beeing a system app and granting every single permission it requests.
The second approach is a solution from this thread, that a) wasn't for A14 and b) was incomplete (i.e. does not work if Android Auto isn't already associated to the head unit).
My patches are a progression of the latter. Android Auto will only get the permissions it really needs to run. It's robust and I'm using it daily.
However GrapheneOS will never merge it. But this is because I'm granting some permission that normal apps do not get. For me, it's a just a trade off, and I'm ok with e.g. google seeing my IMEI in return for beeing able to use Android Auto. For Daniel it is not, because it's against the principles of GrapheneOS. And that's understandable.
Be that as it may, that doesn't mean it's against the principles of other OSs. I guess using my approach would be totally fine for CalyxOS devs - at least they were okay with the early version of the solution and I'm still granting the least possible permissions.
This is just about principles. The same way as GrapheneOS would never ship with microG (but has Sandboxed Play Services) and CalyxOS does use microG. Daniel just always mentions my patches are against their principles, because I built them on top of GrapheneOS. They should be easily usable by CalyxOS though, because I explicitly did NOT rely on any GrapheneOS functionality.
When GrapheneOS releases their Android Auto solution, I guess it will be tied to their Sandboxed Play / compatibility layer and thus won't be easily mergable by CalyxOS anyway.
So feel free to push my patches to CalyxOS and ask for a merge.

@thestinger
Copy link

We've implemented a compatibility layer for Android Auto which deals with as much as possible via the compatibility layer. Only a single USB privileged permission is currently required for Android Auto via USB. The current implementation has 4 toggles for enabling different functionality. In theory, it might be possible to avoid even more, but it's a good starting point. Simply giving Google apps privileged permissions when installed like other operating systems do goes against our approach. They also give microG privileged access and microG downloads/runs Google binaries (droidguard, snet) within that privileged context when that functionality is being used. Our approach must not give any special access or permissions to Google apps by default. There can be toggles for opting into certain special access but it needs to be minimized and we're going to try to explain exactly what access is granted in a way people can understand. We still need to do that for the Google eSIM activation but we're going to be adding an open source alternative once we have time to write or rewrite one (the existing open source app doesn't meet our standards).

The same way as GrapheneOS would never ship with microG (but has Sandboxed Play Services)

GrapheneOS doesn't ship with sandboxed Google Play. There's the option to install them as regular sandboxed apps. You can install microG as a regular sandboxed app too, but it's not designed to work that way. microG could have been built differently to avoid the privileged access it expects as we did for our FCM compatibility layer and other sandboxed Google Play features. There's also signature spoofing which even for just the Google Play apps is also a special privilege. The reason signature spoofing is not acceptable is because microG does not uphold the same privacy/security checks for APIs and security checks for connections to Google services. It also doesn't meet our robustness and security standards for any code included as a trusted part of the OS, and signature spoofing makes it a trusted part of the OS. Signature spoofing is currently not fully required for all Google Play functionality but it likely will be in the future so we don't document the fact that people can use microG as a regular sandboxed app on GrapheneOS since we don't expect it to continue working, and it already largely doesn't work properly mainly because it doesn't try. DivestOS integrates support for microG as being a regular sandboxed app other than signature spoofing but it has a toggle so people have a choice.

We expect signature spoofing will become more required than it is now so there's no point of us telling people they can use sandboxed microG on GrapheneOS with partial functionality when we expect it's not going to keep working. We also don't see much point in the approach when each app using it has the Google Play libraries, many of which work without Google Play. The point of sandboxed Google Play is to run the rest of Google Play in the same app sandbox as the Google Play, Firebase, etc. libraries which run as part of the app using it. Unlike the apps using it, there's no need to grant permissions for Google Play for the vast majority of functionality, our Sensors permission can be disabled and all the standard ones can be left disabled other than Unrestricted battery mode for reliable push. It works fine with our Network toggle disabled but that's somewhat pointless when most of the functionality is about using Google services like FCM.

It's entirely possible we'll reimplement essentially everything microG provides with our own approach. We already have our own much better implementation of the Google Play location APIs which properly attributes permission and power usage without any privileged access since it redirects the requests from inside the apps. We're likely going to do more this, we're just able to focus on doing parts of it that are more useful. Should always bear in mind that the client side used by apps are the proprietary Google Play, Firebase and other Google libraries. They can fundamentally do everything that sandboxed Google Play can do and more because they have all the access and capabilities of sandboxed Google Play along with access within the app's sandbox and the permissions users grant to it. Our reimplementation of the Google Play location APIs only means you can make the Google location libraries used by apps use the OS location APIs instead of the Google Play location APIs. You're still running the Google Play location libraries within those apps you've granted access to Location. If you want to avoid Google Play code entirely, that requires using apps not including it as part of themselves. This isn't regarded as any kind of significant issue by us since we're just making Google apps, libraries and services work like any other apps, libraries and services: no special access or privileges, and in rare cases like Android Auto properly explained toggles for granting very limited special access not giving access to things like the data of other apps, cross-profile communication, hardware identifiers, etc. Wireless Android Auto currently needs access to Bluetooth MAC but this doesn't necessarily need to leak a hardware identifier and the Android Auto hardware in the car can see nearby Bluetooth MACs anyway.

@microg microg locked and limited conversation to collaborators Dec 26, 2023
@mar-v-in
Copy link
Member

I locked this conversation as it turned more into a discussion of CalyxOS and GrapheneOS principles.

microG is somewhat compatible with the proprietary Android Auto app. To get it running on custom OS though, Android Auto needs to be granted privileges. This is out of scope of microG. If I ever were to do something about Android Auto as part of microG, it would be a new implementation of Android Auto that does not require the proprietary Android Auto app.

If you want to further discuss which patches are best suited for which OS and for what reason, I ask you to use another suitable venue for that.


microG downloads/runs Google binaries (droidguard, snet)

For the sake of accuracy, SafetyNet (snet) has its own implementation in microG and does not require downloading or running proprietary binaries except for using DroidGuard. microG's implementation of DroidGuard, if enabled, usually downloads Google binaries. microG also allows remote DroidGuard execution (which can be configured in the settings), allowing to instruct a remote server to download and execute the proprietary binary from Google. DroidGuard requires to download and execute proprietary code from Google, as this code is designed to be hard to reverse-engineer and regularly updates and changes itself.

This is how I personally use microG: As unprivileged app on a custom OS that spoofs signature for the two microG packages and uses full verified boot on a Pixel 3, with microG configured to use remote DroidGuard execution, which I run on an old Nexus 7 I keep running at home as a server.

Signature spoofing is currently not fully required for all Google Play functionality but it likely will be in the future

Signature spoofing is essentially required for all features where Google's client library does a signature check before connecting to the com.google.android.gms package. Back when Play Services was first introduced, the com.google.android.gms package was not part of the OS and thus Google needed to introduce this signature check to ensure that the com.google.android.gms package is indeed authorized.

Push notifications predate Play Services (back then under the name C2DM) and the corresponding service is provided under the package name com.google.android.gsf. This package has always been part of the OS and thus can't be replaced with a version not authorized by the OS vendor. As such, when connecting to the C2DM service for push notifications, there is no signature check in Google's libraries.

Future features in Play Services would technically not require these signature checks, as Play Services only targets Android versions that bundle the com.google.android.gms package as part of the OS. However, the code to check the signature is already in there and new features would probably be built on top of existing code to connect to com.google.android.gms, which does include the signature check.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests