Home Adventures in Replacing the NVidia Shield TV Launcher
Post
Cancel

Adventures in Replacing the NVidia Shield TV Launcher

Background

When Shield Experience Update 8.2.3 rolled out to my Shield TVs, I was dismayed to see Google’s “Recommendations” for content atop the new home screen. Here’s one for Loki — woefully out of place on a premium set-top-box that retails for $150 USD.

The new “Discovery UI” features promoted content atop the home screen. // Image credit: 9to5Google.

It’s fairly easy to suppress these with a custom launcher, though. I like Sideload Channel Launcher 3 (Google Play Store, $3.99 USD) for its blend of simplicity and customization. One enhancement I opted for was a combination clock/weather widget. This one comes from Geometric Weather (FOSS, Aptoide).

Prerequisites

  • An NVidia Shield TV with the latest updates
  • A laptop or PC on the same network
  • PowerShell with Administrator rights (if using the premade script)
  • wget and the Android Debug Bridge: choco install wget adb -y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137

$HasChocolatey = powershell choco -v

if (-not($HasChocolatey)) {
    Write-Output "Chocolatey is not installed yet, I'll go get it..."
    Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    RefreshEnv
} else {
    Write-Output "Chocolatey version $testchoco is already installed"
}

$HasAdb = powershell adb --version
if (-not($HasAdb)) { 
    Write-Host "ADB not found, I'll install it now..."
    choco install adb -y 
}

New-Item -Path './adbtemp/' -Type Directory
Set-Location './adbtemp/'

$AdbIP = '192.168.1.162'
$AdbPort = '5555'

adb shell input keyevent 'KEYCODE_HOME'

adb connect $AdbIP`:$AdbPort

Read-Host -Prompt 'Accept the connection on the target device, then press ENTER'
adb connect $AdbIP`:$AdbPort


# Download SmartTubeNext
wget.exe 'https://github.com/yuliskov/SmartYouTubeTV/releases/download/beta/smarttube_beta.apk'
adb install '.\smarttube_beta.apk'


# Configure YouTube Account
adb shell am start -n 'com.liskovsoft.smarttubetv.beta/com.liskovsoft.smartyoutubetv2.tv.ui.main.SplashActivity'

# Open SETTINGS
adb shell input keyevent 'KEYCODE_DPAD_LEFT'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_CENTER'
adb shell input keyevent 'KEYCODE_DPAD_CENTER'

# Add account
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_CENTER'

Start-Process 'https://youtube.com/activate'

Read-Host -Prompt 'wait for the settings menu to appear again, then press ENTER'
Pause

# Verify account
adb shell am force-stop 'com.liskovsoft.smarttubetv.beta'
adb shell am start -n 'com.liskovsoft.smarttubetv.beta/com.liskovsoft.smartyoutubetv2.tv.ui.main.SplashActivity'

# adb shell pm list packages -f -3
adb shell pm disable-user --user 0 com.google.android.tvlauncher

adb shell am start -a android.intent.action.VIEW -d 'market://details?id=dxidev.sideloadchannel3'
adb shell input keyevent 'KEYCODE_DPAD_CENTER'

Read-Host -Prompt 'wait for the app to install, then press ENTER'

Pause

adb shell input keyevent 'KEYCODE_HOME'
adb shell input keyevent 'KEYCODE_HOME'

adb shell appwidget grantbind --package dxidev.sideloadchannel3 --user 0
adb shell am force-stop 'dxidev.sideloadchannel3'



adb shell rm '/storage/emulated/0/Sideload\ Channel\ 3/*.slc3'
adb push SCL3.slc3 '/storage/emulated/0/Sideload Channel 3/SCL3.slc3'

# Open LAUNCHER SETTINGS
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_RIGHT'
adb shell input keyevent 'KEYCODE_DPAD_CENTER'

# Go to APP SETTINGS
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_CENTER'

# Go to IMPORT
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_CENTER'

# Load from disk
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_CENTER'

# Continue
adb shell input keyevent 'KEYCODE_DPAD_RIGHT'
adb shell input keyevent 'KEYCODE_DPAD_RIGHT'
adb shell input keyevent 'KEYCODE_DPAD_CENTER'

# Select configuration file on device
adb shell input keyevent 'KEYCODE_DPAD_CENTER'

adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'
adb shell input keyevent 'KEYCODE_DPAD_DOWN'

adb shell input keyevent 'KEYCODE_DPAD_CENTER'
adb shell input keyevent 'KEYCODE_DPAD_CENTER'
This post is licensed under CC BY 4.0 by the author.