You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Split the app into `mobile` and `tv` product flavors on one codebase rather
than forking it: every defect found in the last round of device reports lived
in shared logic and would have had to be fixed twice. TV drops Google Cast
entirely (a TV is where a cast ends up, and Fire TV's Play Services cannot
serve the Cast module at all), which removes 163 GMS + 107 mediarouter + 14
media3-cast classes and ~1.1 MB. applicationId is unchanged across flavors so
every existing install updates in place.
Crashes, each traced to a specific device report:
- Declare PlatformScheduler$PlatformSchedulerService. Media3's download
scheduler targets this JobService and an undeclared component is rejected
by JobScheduler, killing the app on the main thread whenever the download
manager reconsidered its queue.
- Serialise MP4 exports behind a process-wide slot and defer them while
playback is running. The export observer enqueues one worker per episode, so
finishing a batch download ran several Media3 Transformers at once, each
buffering encoded samples in an unbounded queue; six OOMs traced there, one
session recording 31 CRASH and 26 LOW_MEMORY exits.
- Dedupe the series chain. Two cached ids can resolve to one entry, and the
detail rows key by media id: "Key ... was already used" took the app down.
- Turn off text-selection action mode on the TV editor. Its async smart-select
task dereferenced a null Layout inside android.widget after a re-layout.
- Add largeHeap, prune the WorkManager DB, and keep secp256k1 from being
shrunk away (which silently disabled the Nostr update channel entirely).
TV responsiveness. Typing in search ANR'd and the app was force-finished:
the editor re-set inputType on every recomposition, and setInputType restarts
the IME's input connection, which asks Compose for a focus search, which
forced the whole results grid through a beyond-bounds layout pass — per
keystroke. Reproduced on an emulator and confirmed on a real Android TV device
blocking the main thread past six seconds, repeatedly, for a 10.7s frame.
Playback correctness. Progress reports now carry the stream that produced
them; a stale tick from the previous episode was being attributed to the newly
selected one, marking it watched instantly. That is why picking episode 2
jumped Continue Watching to 3 and why re-opening an episode resumed at 0:00.
Watched episodes are recorded rather than inferred from the episode number, so
a skipped episode is now visibly skipped.
Kiwi plays its embed again. Preferring its direct CDN renditions was measured
on a Galaxy S25 against a live episode: 1080p, 720p and 360p all failed in
turn and only the embed played, costing ~84 seconds of dead air.
Also: next-episode sources are preheated on mobile (never on TV, where the
resolver WebView has been seen taking the hardware decoder from the playing
video); AniList pacing no longer throttles a cold start that has observed no
budget, which was timing out the home screen; a configurable skip button
(85s default); and per-server resolve telemetry rolled up by the diagnostics
worker into /api/admin/source-health.
Copy file name to clipboardExpand all lines: README.md
+48-17Lines changed: 48 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -120,14 +120,30 @@ sources. Availability can vary by title, language, region, and provider uptime.
120
120
</a>
121
121
</p>
122
122
123
-
For a TV or Fire TV device, download the APK with a TV browser/Downloader app or transfer it
124
-
from another device, then open it with the system package installer.
123
+
On a TV or Fire TV device, download the **TV build** with a TV browser/Downloader app or transfer
124
+
it from another device, then open it with the system package installer.
125
+
126
+
### Phones and tablets
127
+
128
+
| APK | Best for |
129
+
| --- | --- |
130
+
|[Anilili.apk](https://github.com/kompoti121/Anilili/releases/latest/download/Anilili.apk)|**Recommended.** Universal build, runs on every phone and tablet. |
131
+
|[Anilili_arm64-v8a.apk](https://github.com/kompoti121/Anilili/releases/latest/download/Anilili_arm64-v8a.apk)| Smaller download for modern 64-bit devices. |
|[Anilili.apk](https://github.com/kompoti121/Anilili/releases/latest/download/Anilili.apk)|**Recommended.** Universal build for phones, tablets, Android TV, and Fire TV. |
129
-
|[Anilili_arm64-v8a.apk](https://github.com/kompoti121/Anilili/releases/latest/download/Anilili_arm64-v8a.apk)| Most modern 64-bit phones and TV devices. |
130
-
|[Anilili_armeabi-v7a.apk](https://github.com/kompoti121/Anilili/releases/latest/download/Anilili_armeabi-v7a.apk)| Older 32-bit Android and Fire OS devices. |
138
+
|[Anilili_tv.apk](https://github.com/kompoti121/Anilili/releases/latest/download/Anilili_tv.apk)|**Recommended.** Universal TV build. |
139
+
|[Anilili_tv_arm64-v8a.apk](https://github.com/kompoti121/Anilili/releases/latest/download/Anilili_tv_arm64-v8a.apk)| 64-bit TV boxes and newer Fire TV sticks. |
140
+
|[Anilili_tv_armeabi-v7a.apk](https://github.com/kompoti121/Anilili/releases/latest/download/Anilili_tv_armeabi-v7a.apk)| 32-bit Fire OS sticks. |
141
+
142
+
The TV build is the same app tuned for the living room: it drops Google Cast (a TV is where a cast
143
+
*ends up*, and Fire TV's Play Services cannot serve the Cast module at all), which makes it about
144
+
1 MB smaller and removes a class of start-up failure. Both builds share an application id, so an
145
+
existing install updates in place either way — and the in-app updater keeps each device on its own
146
+
build.
131
147
132
148
**Compatibility:** Android 5.1 / Fire OS 5 (API 22) or newer.
133
149
@@ -169,15 +185,24 @@ On Windows:
169
185
gradlew.bat assembleDebug
170
186
```
171
187
172
-
Debug and release builds produce a universal APK plus `arm64-v8a` and `armeabi-v7a` variants.
173
-
The in-app updater depends on these release asset names:
188
+
The app builds in two product flavors on one codebase — `mobile` and `tv` — and each produces a
189
+
universal APK plus `arm64-v8a` and `armeabi-v7a` variants:
174
190
175
-
-`Anilili.apk`
176
-
-`Anilili_arm64-v8a.apk`
177
-
-`Anilili_armeabi-v7a.apk`
191
+
```bash
192
+
./gradlew assembleMobileRelease assembleTvRelease
193
+
```
194
+
195
+
The in-app updater depends on these six release asset names:
178
196
179
-
The underscore before the ABI is intentional. It keeps the universal APK first in GitHub's asset
180
-
ordering so older app versions do not accidentally download an incompatible architecture build.
197
+
-`Anilili.apk`, `Anilili_arm64-v8a.apk`, `Anilili_armeabi-v7a.apk` (phones and tablets)
0 commit comments