[Enhancement] Android TV Support #469

Open
opened 2026-04-24 23:24:45 +02:00 by adam · 30 comments
Owner

Originally created by @moozhub on GitHub (Feb 25, 2023).

Love your app, but it crashes immediately on ATV. Any plans for support on ATV?

Steps to reproduce

  1. Install
  2. Open
  3. Observe crash

Expected behaviour

  • Tell us what should happen

At least open

Actual behaviour

  • Tell us what happens

Crashes immediately

Environment data

Rooted Lineageos 19 kernel version 4.9.113

Audiobookshelf Version: 0.9.62-beta

  • [ X] Android App?
  • iOS App?

Android Issue

Android version: ATV 12

Device model: ODroid-n2+

Stock or customized system: Custom rooted Lineageos 19 ATV 12 on ODroid-n2+

Originally created by @moozhub on GitHub (Feb 25, 2023). Love your app, but it crashes immediately on ATV. Any plans for support on ATV? ### Steps to reproduce 1. Install 2. Open 3. Observe crash ### Expected behaviour - Tell us what should happen At least open ### Actual behaviour - Tell us what happens Crashes immediately ### Environment data Rooted Lineageos 19 kernel version 4.9.113 Audiobookshelf Version: 0.9.62-beta - [ X] Android App? - [ ] iOS App? #### Android Issue Android version: ATV 12 Device model: ODroid-n2+ Stock or customized system: Custom rooted Lineageos 19 ATV 12 on ODroid-n2+
adam added the enhancementhelp wanted labels 2026-04-24 23:24:45 +02:00
Author
Owner

@advplyr commented on GitHub (Feb 25, 2023):

I don't have an Android TV so not something I would develop at the moment. Someone else may help though.

Are you able to install the app through the play store on your Android TV?

@advplyr commented on GitHub (Feb 25, 2023): I don't have an Android TV so not something I would develop at the moment. Someone else may help though. Are you able to install the app through the play store on your Android TV?
Author
Owner

@moozhub commented on GitHub (Feb 25, 2023):

I don't have an Android TV so not something I would develop at the moment. Someone else may help though.

Are you able to install the app through the play store on your Android TV?

No, the playstore is pretty limited on ATV, but manually downloading the APK and installing it works fine, as far as I know the repositories for a regular Android device and ATV are separate but as far as that I don't know the details around what makes it into the ATV repo.. I can provide the ROM if you're interested in installing it in a virtual environment, or I can try to provide any details you might want.

Thanks for the quick reply

@moozhub commented on GitHub (Feb 25, 2023): > I don't have an Android TV so not something I would develop at the moment. Someone else may help though. > > Are you able to install the app through the play store on your Android TV? No, the playstore is pretty limited on ATV, but manually downloading the APK and installing it works fine, as far as I know the repositories for a regular Android device and ATV are separate but as far as that I don't know the details around what makes it into the ATV repo.. I can provide the ROM if you're interested in installing it in a virtual environment, or I can try to provide any details you might want. Thanks for the quick reply
Author
Owner

@advplyr commented on GitHub (Feb 25, 2023):

Got it. If the app was being listed on the Android TV play store then this would be a bug, but since it is not supported at the moment this is a feature request.

Similar to Android Auto we have to declare that this is Android TV compatible then the Google team reviews it.

A developer with an Android TV might come along and help with this.

@advplyr commented on GitHub (Feb 25, 2023): Got it. If the app was being listed on the Android TV play store then this would be a bug, but since it is not supported at the moment this is a feature request. Similar to Android Auto we have to declare that this is Android TV compatible then the Google team reviews it. A developer with an Android TV might come along and help with this.
Author
Owner

@moozhub commented on GitHub (Feb 25, 2023):

Got it. If the app was being listed on the Android TV play store then this would be a bug, but since it is not supported at the moment this is a feature request.

Similar to Android Auto we have to declare that this is Android TV compatible then the Google team reviews it.

A developer with an Android TV might come along and help with this.

Here's some info that I gathered that might be of assistance some time in the future..

02-25 15:41:17.419  8711  8711 D AndroidRuntime: Shutting down VM                                                           
02-25 15:41:17.419  8711  8711 E AndroidRuntime: FATAL EXCEPTION: main                                                      
02-25 15:41:17.419  8711  8711 E AndroidRuntime: Process: com.audiobookshelf.app, PID: 8711                                 
02-25 15:41:17.419  8711  8711 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.audiobookshelf.app/com.audiobookshelf.app.MainActivity}: java.lang.RuntimeException: com.google.android.gms.cast.framework.zzat: com.google.android.gms.dynamite.DynamiteModule$LoadingException: No acceptable module com.google.android.gms.cast.framework.dynamite found. Local version is 0 and remote version is 0.  
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3707)                                                     
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3864)                                                      
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)                                          
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)                               
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)                                         
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253)                                                           
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:106)             
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.os.Looper.loopOnce(Looper.java:201)                      
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:288)                          
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:7870)        
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)                   
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)                                              
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)    
02-25 15:41:17.419  8711  8711 E AndroidRuntime: Caused by: java.lang.RuntimeException: com.google.android.gms.cast.framework.zzat: com.google.android.gms.dynamite.DynamiteModule$LoadingException: No acceptable module com.google.android.gms.cast.framework.dynamite found. Local version is 0 and remote version is 0.                                                         
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.google.android.gms.cast.framework.CastContext.getSharedInstance(com.google.android.gms:play-services-cast-framework@@20.1.0:8)                                                           
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.audiobookshelf.app.player.CastManager.getContext(CastManager.kt:309)                                                       
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.audiobookshelf.app.player.CastManager.access$getContext(CastManager.kt:19)                                                 
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.audiobookshelf.app.player.CastManager$startRouteScan$callback$1.onRouteUpdate(CastManager.kt:128)                          
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.audiobookshelf.app.player.CastManager$ScanCallback.onFilteredRouteUpdate(CastManager.kt:246)                               
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.audiobookshelf.app.player.CastManager.startRouteScan(CastManager.kt:152)                                                   
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.audiobookshelf.app.plugins.AbsAudioPlayer.initCastManager(AbsAudioPlayer.kt:169)                                           
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.audiobookshelf.app.plugins.AbsAudioPlayer.load(AbsAudioPlayer.kt:40)                                                       
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.getcapacitor.PluginHandle.loadInstance(PluginHandle.java:115)
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.getcapacitor.PluginHandle.load(PluginHandle.java:105)        
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.getcapacitor.PluginHandle.<init>(PluginHandle.java:65)       
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.getcapacitor.Bridge.registerPlugin(Bridge.java:627)          
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.getcapacitor.Bridge.registerAllPlugins(Bridge.java:583)      
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.getcapacitor.Bridge.<init>(Bridge.java:210)                  
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.getcapacitor.Bridge.<init>(Unknown Source:0)                 
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.getcapacitor.Bridge$Builder.create(Bridge.java:1502)         
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.getcapacitor.BridgeActivity.load(BridgeActivity.java:43)     
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.getcapacitor.BridgeActivity.onCreate(BridgeActivity.java:37) 
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.audiobookshelf.app.MainActivity.onCreate(MainActivity.kt:61) 
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:8057)           
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:8037)           
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1341)                                                    
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3688)                                                     
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        ... 12 more                                                         
02-25 15:41:17.419  8711  8711 E AndroidRuntime: Caused by: com.google.android.gms.cast.framework.zzat: com.google.android.gms.dynamite.DynamiteModule$LoadingException: No acceptable module com.google.android.gms.cast.framework.dynamite found. Local version is 0 and remote version is 0.                       
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.google.android.gms.internal.cast.zzm.zzf(com.google.android.gms:play-services-cast-framework@@20.1.0:7)                    
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.google.android.gms.internal.cast.zzm.zza(com.google.android.gms:play-services-cast-framework@@20.1.0:1)                    
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.google.android.gms.cast.framework.CastContext.<init>(com.google.android.gms:play-services-cast-framework@@20.1.0:4)        
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at 
com.google.android.gms.cast.framework.CastContext.getSharedInstance(com.google.android.gms:play-services-cast-framework@@20.1.0:7)                                                           
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        ... 34 more                                                         
02-25 15:41:17.419  8711  8711 E AndroidRuntime: Caused by: com.google.android.gms.dynamite.DynamiteModule$LoadingException: No acceptable module com.google.android.gms.cast.framework.dynamite found. Local version is 0 and remote version is 0.     
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.google.android.gms.dynamite.DynamiteModule.load(com.google.android.gms:play-services-basement@@18.0.0:65)                  
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        at com.google.android.gms.internal.cast.zzm.zzf(com.google.android.gms:play-services-cast-framework@@20.1.0:2)                    
02-25 15:41:17.419  8711  8711 E AndroidRuntime:        ... 37 more                                                         
02-25 15:41:17.425  3639  3665 W ActivityTaskManager:   Force finishing activity com.audiobookshelf.app/.MainActivity

Some of that might not be relevant, there's a lot of stuff in my log so apologies.

@moozhub commented on GitHub (Feb 25, 2023): > Got it. If the app was being listed on the Android TV play store then this would be a bug, but since it is not supported at the moment this is a feature request. > > Similar to Android Auto we have to declare that this is Android TV compatible then the Google team reviews it. > > A developer with an Android TV might come along and help with this. Here's some info that I gathered that might be of assistance some time in the future.. ``` 02-25 15:41:17.419 8711 8711 D AndroidRuntime: Shutting down VM 02-25 15:41:17.419 8711 8711 E AndroidRuntime: FATAL EXCEPTION: main 02-25 15:41:17.419 8711 8711 E AndroidRuntime: Process: com.audiobookshelf.app, PID: 8711 02-25 15:41:17.419 8711 8711 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.audiobookshelf.app/com.audiobookshelf.app.MainActivity}: java.lang.RuntimeException: com.google.android.gms.cast.framework.zzat: com.google.android.gms.dynamite.DynamiteModule$LoadingException: No acceptable module com.google.android.gms.cast.framework.dynamite found. Local version is 0 and remote version is 0. 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3707) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3864) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7870) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: Caused by: java.lang.RuntimeException: com.google.android.gms.cast.framework.zzat: com.google.android.gms.dynamite.DynamiteModule$LoadingException: No acceptable module com.google.android.gms.cast.framework.dynamite found. Local version is 0 and remote version is 0. 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.google.android.gms.cast.framework.CastContext.getSharedInstance(com.google.android.gms:play-services-cast-framework@@20.1.0:8) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.audiobookshelf.app.player.CastManager.getContext(CastManager.kt:309) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.audiobookshelf.app.player.CastManager.access$getContext(CastManager.kt:19) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.audiobookshelf.app.player.CastManager$startRouteScan$callback$1.onRouteUpdate(CastManager.kt:128) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.audiobookshelf.app.player.CastManager$ScanCallback.onFilteredRouteUpdate(CastManager.kt:246) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.audiobookshelf.app.player.CastManager.startRouteScan(CastManager.kt:152) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.audiobookshelf.app.plugins.AbsAudioPlayer.initCastManager(AbsAudioPlayer.kt:169) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.audiobookshelf.app.plugins.AbsAudioPlayer.load(AbsAudioPlayer.kt:40) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.getcapacitor.PluginHandle.loadInstance(PluginHandle.java:115) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.getcapacitor.PluginHandle.load(PluginHandle.java:105) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.getcapacitor.PluginHandle.<init>(PluginHandle.java:65) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.getcapacitor.Bridge.registerPlugin(Bridge.java:627) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.getcapacitor.Bridge.registerAllPlugins(Bridge.java:583) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.getcapacitor.Bridge.<init>(Bridge.java:210) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.getcapacitor.Bridge.<init>(Unknown Source:0) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.getcapacitor.Bridge$Builder.create(Bridge.java:1502) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.getcapacitor.BridgeActivity.load(BridgeActivity.java:43) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.getcapacitor.BridgeActivity.onCreate(BridgeActivity.java:37) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.audiobookshelf.app.MainActivity.onCreate(MainActivity.kt:61) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:8057) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:8037) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1341) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3688) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: ... 12 more 02-25 15:41:17.419 8711 8711 E AndroidRuntime: Caused by: com.google.android.gms.cast.framework.zzat: com.google.android.gms.dynamite.DynamiteModule$LoadingException: No acceptable module com.google.android.gms.cast.framework.dynamite found. Local version is 0 and remote version is 0. 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.google.android.gms.internal.cast.zzm.zzf(com.google.android.gms:play-services-cast-framework@@20.1.0:7) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.google.android.gms.internal.cast.zzm.zza(com.google.android.gms:play-services-cast-framework@@20.1.0:1) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.google.android.gms.cast.framework.CastContext.<init>(com.google.android.gms:play-services-cast-framework@@20.1.0:4) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.google.android.gms.cast.framework.CastContext.getSharedInstance(com.google.android.gms:play-services-cast-framework@@20.1.0:7) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: ... 34 more 02-25 15:41:17.419 8711 8711 E AndroidRuntime: Caused by: com.google.android.gms.dynamite.DynamiteModule$LoadingException: No acceptable module com.google.android.gms.cast.framework.dynamite found. Local version is 0 and remote version is 0. 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.google.android.gms.dynamite.DynamiteModule.load(com.google.android.gms:play-services-basement@@18.0.0:65) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: at com.google.android.gms.internal.cast.zzm.zzf(com.google.android.gms:play-services-cast-framework@@20.1.0:2) 02-25 15:41:17.419 8711 8711 E AndroidRuntime: ... 37 more 02-25 15:41:17.425 3639 3665 W ActivityTaskManager: Force finishing activity com.audiobookshelf.app/.MainActivity ``` Some of that might not be relevant, there's a lot of stuff in my log so apologies.
Author
Owner

@moozhub commented on GitHub (Feb 25, 2023):

Updated to look prettier

@moozhub commented on GitHub (Feb 25, 2023): Updated to look prettier
Author
Owner

@advplyr commented on GitHub (Feb 25, 2023):

Thanks, the error makes sense since we have not declared a TV activity. https://developer.android.com/training/tv/start/start#tv-activity

@advplyr commented on GitHub (Feb 25, 2023): Thanks, the error makes sense since we have not declared a TV activity. https://developer.android.com/training/tv/start/start#tv-activity
Author
Owner

@moozhub commented on GitHub (Feb 25, 2023):

Thanks, the error makes sense since we have not declared a TV activity. https://developer.android.com/training/tv/start/start#tv-activity

Cool, looks like that is a start. I can test any updates you might want to throw at me. Thanks for the efforts.

@moozhub commented on GitHub (Feb 25, 2023): > Thanks, the error makes sense since we have not declared a TV activity. https://developer.android.com/training/tv/start/start#tv-activity Cool, looks like that is a start. I can test any updates you might want to throw at me. Thanks for the efforts.
Author
Owner

@galaxyfar commented on GitHub (Feb 26, 2023):

FYI, ran into the exact same issue on one of my Android TV last week.

After dumping the log and looking around of answers, I figured instant crash was happening due to outdate Google play services. Sideloaded latest play services apk and everything works like a charm, no more crash.

This issue is not ATV per se but specific to certain ATV devices because same app works right out of the box on Nvidia shield TV.

@galaxyfar commented on GitHub (Feb 26, 2023): FYI, ran into the exact same issue on one of my Android TV last week. After dumping the log and looking around of answers, I figured instant crash was happening due to outdate Google play services. Sideloaded latest play services apk and everything works like a charm, no more crash. This issue is not ATV per se but specific to certain ATV devices because same app works right out of the box on Nvidia shield TV.
Author
Owner

@moozhub commented on GitHub (Feb 28, 2023):

FYI, ran into the exact same issue on one of my Android TV last week.

After dumping the log and looking around of answers, I figured instant crash was happening due to outdate Google play services. Sideloaded latest play services apk and everything works like a charm, no more crash.

This issue is not ATV per se but specific to certain ATV devices because same app works right out of the box on Nvidia shield TV.

Are you using the Google play services for ATV? What version of ATV are you using (what Android version) and what play services version did you sideload? I'll give it a shot.

Thanks

@moozhub commented on GitHub (Feb 28, 2023): > FYI, ran into the exact same issue on one of my Android TV last week. > > After dumping the log and looking around of answers, I figured instant crash was happening due to outdate Google play services. Sideloaded latest play services apk and everything works like a charm, no more crash. > > This issue is not ATV per se but specific to certain ATV devices because same app works right out of the box on Nvidia shield TV. Are you using the Google play services for ATV? What version of ATV are you using (what Android version) and what play services version did you sideload? I'll give it a shot. Thanks
Author
Owner

@galaxyfar commented on GitHub (Mar 1, 2023):

Android TV in question was running Android 11. It's el cheapo Google certified TV box from Mecool, came preinstalled with Google play services/store but for some reason was not getting any apps updates from Play store and ABS app was not even showing up.

So I just sideloaded google-play-services-23-06-16-040400-510240997.apk from apkmirror and voila, it all started working.

@galaxyfar commented on GitHub (Mar 1, 2023): > Android TV in question was running Android 11. It's el cheapo Google certified TV box from Mecool, came preinstalled with Google play services/store but for some reason was not getting any apps updates from Play store and ABS app was not even showing up. So I just sideloaded google-play-services-23-06-16-040400-510240997.apk from apkmirror and voila, it all started working.
Author
Owner

@moozhub commented on GitHub (Mar 1, 2023):

Android TV in question was running Android 11. It's el cheapo Google certified TV box from Mecool, came preinstalled with Google play services/store but for some reason was not getting any apps updates from Play store and ABS app was not even showing up.

So I just sideloaded google-play-services-23-06-16-040400-510240997.apk from apkmirror and voila, it all started working.

I see.

I think what you did was sideloaded the regular Google play services (the one for mobile devices, and not the one for ATV). If that's what you did that would make sense that it shows up in the playstore after you installed it, since the device you installed it on is no longer being registered with the play store as an ATV device, but as a mobile device.

While I'm not sure of all the repercussions of that I do know that the device you installed it on is technically no longer an ATV device (at least from the perspective of the apps you install, and some features potentially may not function the way you would expect).

I still may try it just to play around with it but having the software installed on ATV using ATV play services and ATV playstore would be most ideal.

@moozhub commented on GitHub (Mar 1, 2023): > > > > Android TV in question was running Android 11. It's el cheapo Google certified TV box from Mecool, came preinstalled with Google play services/store but for some reason was not getting any apps updates from Play store and ABS app was not even showing up. > > So I just sideloaded google-play-services-23-06-16-040400-510240997.apk from apkmirror and voila, it all started working. I see. I think what you did was sideloaded the regular Google play services (the one for mobile devices, and not the one for ATV). If that's what you did that would make sense that it shows up in the playstore after you installed it, since the device you installed it on is no longer being registered with the play store as an ATV device, but as a mobile device. While I'm not sure of all the repercussions of that I do know that the device you installed it on is technically no longer an ATV device (at least from the perspective of the apps you install, and some features potentially may not function the way you would expect). I still may try it just to play around with it but having the software installed on ATV using ATV play services and ATV playstore would be most ideal.
Author
Owner

@nathanmilot commented on GitHub (Sep 13, 2023):

I was able to sideload it and open the app, but navigation doesn't work properly. It only selects the main section headings but is missing the ability to actually select audiobooks or navigate to the player. Might try to take a stab at it at some point if I get any time.

https://developer.android.com/training/tv/start/navigation

@nathanmilot commented on GitHub (Sep 13, 2023): I was able to sideload it and open the app, but navigation doesn't work properly. It only selects the main section headings but is missing the ability to actually select audiobooks or navigate to the player. Might try to take a stab at it at some point if I get any time. https://developer.android.com/training/tv/start/navigation
Author
Owner

@advplyr commented on GitHub (Sep 13, 2023):

@nathanmilot I haven't looked into this yet but peeking at those docs I don't see anything about controlling navigation using WebView. The UI of the app is WebView so it can be shared between android and ios. It may be as easy as implementing tabindexes

@advplyr commented on GitHub (Sep 13, 2023): @nathanmilot I haven't looked into this yet but peeking at those docs I don't see anything about controlling navigation using WebView. The UI of the app is WebView so it can be shared between android and ios. It may be as easy as implementing tabindexes
Author
Owner

@nathanmilot commented on GitHub (Sep 13, 2023):

Oh nice. Yeah hadn't looked at the codebase too in depth.

@nathanmilot commented on GitHub (Sep 13, 2023): Oh nice. Yeah hadn't looked at the codebase too in depth.
Author
Owner

@clockwinder commented on GitHub (Nov 28, 2023):

I would love to see support for this as well, unofficial is fine by me as well since it's easy to sideload.

After sideloading the ABS android app (V0.9.68) onto my Chromecast with TV, I had the same navigation issues. The setup is easy to replicate on an android device by just connecting a keyboard and navigating using the arrow keys/enter. It's already seems close to working!

I'm not sure if anyone's made a note of this, but adding this functionality does have some accessibility potential as well by giving an alternative method of navigation.

@clockwinder commented on GitHub (Nov 28, 2023): I would love to see support for this as well, unofficial is fine by me as well since it's easy to sideload. After sideloading the ABS android app (V0.9.68) onto my Chromecast with TV, I had the same navigation issues. The setup is easy to replicate on an android device by just connecting a keyboard and navigating using the arrow keys/enter. It's already seems close to working! I'm not sure if anyone's made a note of this, but adding this functionality does have some accessibility potential as well by giving an alternative method of navigation.
Author
Owner

@steve1123456 commented on GitHub (Feb 19, 2024):

I was able to sideload it and open the app, but navigation doesn't work properly. It only selects the main section headings but is missing the ability to actually select audiobooks or navigate to the player. Might try to take a stab at it at some point if I get any time.

https://developer.android.com/training/tv/start/navigation

This! I'm in the same boat. Can login but can't scroll to books.

A workaround I've found is to install a Mouse app, which actually works and does the job, but it's a bit clunky. Would be ideal to simply click down on the firestick and navigate around the books.

Fantastic app by the way!

@steve1123456 commented on GitHub (Feb 19, 2024): > I was able to sideload it and open the app, but navigation doesn't work properly. It only selects the main section headings but is missing the ability to actually select audiobooks or navigate to the player. Might try to take a stab at it at some point if I get any time. > > https://developer.android.com/training/tv/start/navigation This! I'm in the same boat. Can login but can't scroll to books. A workaround I've found is to install a Mouse app, which actually works and does the job, but it's a bit clunky. Would be ideal to simply click down on the firestick and navigate around the books. Fantastic app by the way!
Author
Owner

@monksy commented on GitHub (Jul 2, 2025):

What do you need help on here with? Testing? Setting up an environment? UI changes? People can help if they know what they can help with.

@monksy commented on GitHub (Jul 2, 2025): What do you need help on here with? Testing? Setting up an environment? UI changes? People can help if they know what they can help with.
Author
Owner

@monksy commented on GitHub (Aug 27, 2025):

I started this up with the emulator, and it looks like the difference between the books and the navbar is that the navbar shows nxut-links and the books are clickable DIVs. I'm not sure how to proceed from here.

@monksy commented on GitHub (Aug 27, 2025): I started this up with the emulator, and it looks like the difference between the books and the navbar is that the navbar shows nxut-links and the books are clickable DIVs. I'm not sure how to proceed from here.
Author
Owner

@monksy commented on GitHub (Aug 27, 2025):

Can someone (@clockwinder @nathanmilot ) try this branches' build out and force it to install on android tv?

@monksy commented on GitHub (Aug 27, 2025): Can someone (@clockwinder @nathanmilot ) try this branches' build out and force it to install on android tv?
Author
Owner

@clockwinder commented on GitHub (Aug 27, 2025):

@monksy This branch? https://github.com/monksy/audiobookshelf-app/tree/fix-selectableregions-androidtv

Happy to install and test the apk if it's pre-built. I don't currently have the ability to build myself.

@clockwinder commented on GitHub (Aug 27, 2025): @monksy This branch? https://github.com/monksy/audiobookshelf-app/tree/fix-selectableregions-androidtv Happy to install and test the apk if it's pre-built. I don't currently have the ability to build myself.
Author
Owner

@monksy commented on GitHub (Aug 28, 2025):

I hate giving a direct build but here it is: -removed-

@monksy commented on GitHub (Aug 28, 2025): I hate giving a direct build but here it is: -removed-
Author
Owner

@clockwinder commented on GitHub (Aug 29, 2025):

@monksy Looking into it now, getting a App not installed as package appears to be invalid., which I'm trying to resolve first.

@clockwinder commented on GitHub (Aug 29, 2025): @monksy Looking into it now, getting a `App not installed as package appears to be invalid.`, which I'm trying to resolve first.
Author
Owner

@monksy commented on GitHub (Aug 29, 2025):

Does it give any other debug logs?

On Fri, Aug 29, 2025, 16:44 clockwinder @.***> wrote:

clockwinder left a comment (advplyr/audiobookshelf-app#606)
https://github.com/advplyr/audiobookshelf-app/issues/606#issuecomment-3238353142

@monksy https://github.com/monksy Looking into it now, getting a App
not installed as package appears to be invalid., which I'm trying to
resolve first.


Reply to this email directly, view it on GitHub
https://github.com/advplyr/audiobookshelf-app/issues/606#issuecomment-3238353142,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAEWHQ57N7EWU5NKGABED7T3QDCURAVCNFSM6AAAAACASV2HWKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTEMZYGM2TGMJUGI
.
You are receiving this because you were mentioned.Message ID:
@.***>

@monksy commented on GitHub (Aug 29, 2025): Does it give any other debug logs? On Fri, Aug 29, 2025, 16:44 clockwinder ***@***.***> wrote: > *clockwinder* left a comment (advplyr/audiobookshelf-app#606) > <https://github.com/advplyr/audiobookshelf-app/issues/606#issuecomment-3238353142> > > @monksy <https://github.com/monksy> Looking into it now, getting a App > not installed as package appears to be invalid., which I'm trying to > resolve first. > > — > Reply to this email directly, view it on GitHub > <https://github.com/advplyr/audiobookshelf-app/issues/606#issuecomment-3238353142>, > or unsubscribe > <https://github.com/notifications/unsubscribe-auth/AAEWHQ57N7EWU5NKGABED7T3QDCURAVCNFSM6AAAAACASV2HWKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTEMZYGM2TGMJUGI> > . > You are receiving this because you were mentioned.Message ID: > ***@***.***> >
Author
Owner

@clockwinder commented on GitHub (Aug 30, 2025):

Chromecast wont let me ADB wirelessly to sideload or look at logs. Looking at other options before I unplug everything and move to usb adb. 🤦

@clockwinder commented on GitHub (Aug 30, 2025): Chromecast wont let me ADB wirelessly to sideload or look at logs. Looking at other options before I unplug everything and move to usb adb. 🤦
Author
Owner

@Eroskuro commented on GitHub (Sep 7, 2025):

doesnt install on shieldtv either. not currently setup to pull logs but figured I would at least let you know @monksy

@Eroskuro commented on GitHub (Sep 7, 2025): doesnt install on shieldtv either. not currently setup to pull logs but figured I would at least let you know @monksy
Author
Owner

@monksy commented on GitHub (Sep 11, 2025):

That's dissappointing.

@monksy commented on GitHub (Sep 11, 2025): That's dissappointing.
Author
Owner

@nathandingx commented on GitHub (Sep 26, 2025):

It's a shame, so now I'm using a NAS to run a Windows virtual machine, then installing an Android emulator inside the virtual machine. After installing this software, I use AudioRelay to stream the sound to an Android TV to play audiobooks.

@nathandingx commented on GitHub (Sep 26, 2025): It's a shame, so now I'm using a NAS to run a Windows virtual machine, then installing an Android emulator inside the virtual machine. After installing this software, I use AudioRelay to stream the sound to an Android TV to play audiobooks.
Author
Owner

@Rat-S commented on GitHub (Mar 28, 2026):

The issue is pretty much still there.

I am willing to help with testing.

@Rat-S commented on GitHub (Mar 28, 2026): The issue is pretty much still there. I am willing to help with testing.
Author
Owner

@bilbospocketses commented on GitHub (Apr 7, 2026):

apk for sideloading is available for Android TV.

It needs to be tested on devices beyond my Google TV Streamer 4K, but on that device it works pretty well, so it should be fine on standard Android and Google TV devices back to Android 8. Not sure how well it will work on Fire TV, but am interested to hear any feedback.

All feedback is appreciated over on my forked repo so I can continue to tune the app while the devs of the main repo work on reviewing and merging the PR.

APK: https://github.com/bilbospocketses/audiobookshelf-app/releases/

Issues page for feedback (bugs, enahncements, etc): https://github.com/bilbospocketses/audiobookshelf-app/issues

Pull Request: https://github.com/advplyr/audiobookshelf-app/pull/1843

User guide for the ATV app: https://github.com/bilbospocketses/audiobookshelf-app/blob/android-tv-dpad-navigation/docs/TV_USER_GUIDE.md

@bilbospocketses commented on GitHub (Apr 7, 2026): apk for sideloading is available for Android TV. It needs to be tested on devices beyond my Google TV Streamer 4K, but on that device it works pretty well, so it should be fine on standard Android and Google TV devices back to Android 8. Not sure how well it will work on Fire TV, but am interested to hear any feedback. All feedback is appreciated over on my forked repo so I can continue to tune the app while the devs of the main repo work on reviewing and merging the PR. APK: https://github.com/bilbospocketses/audiobookshelf-app/releases/ Issues page for feedback (bugs, enahncements, etc): https://github.com/bilbospocketses/audiobookshelf-app/issues Pull Request: https://github.com/advplyr/audiobookshelf-app/pull/1843 User guide for the ATV app: https://github.com/bilbospocketses/audiobookshelf-app/blob/android-tv-dpad-navigation/docs/TV_USER_GUIDE.md
Author
Owner

@clockwinder commented on GitHub (Apr 8, 2026):

I'm testing @bilbospocketses fork's APK now via the aftvdownloader app code 6842201

I've created some issues over there. Thanks for working on this!

@clockwinder commented on GitHub (Apr 8, 2026): I'm testing @bilbospocketses fork's APK now via the [aftvdownloader app](https://www.aftvnews.com/downloader) code ~~6842201~~ I've created some issues over there. Thanks for working on this!
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/audiobookshelf-app#469