Android 9 and Netflix for X96(W)
Adam Mateusz Brożyński
Posted on April 25, 2021
This applies to Smart TV X96 (X96W) devices based on Amlogic S905W. In my case it was branded as Emmerson STV200HD distributed in Poland.
I take no responsibility if you brick or break your device.
Problem:
- Annoying notifications about crashed apps
- Cannot install some apps from Google Play like Netflix
- Android 7 is obsolete and no online updates are available
Solution:
- Prepare 2GB empty microSD card
- Download atvXv4 rom based on AndroidTV 9.0
- Extract files from
atvX_s905w_4.3.zip
archive - Create
aml-upgrade-package-extract.c
file in extracted files directory with following contents (Windows users should use Amlogic USB Burning Tool to create microSD withaml_upgrade_package.img
file and skip toBoot from microSD
):
#include <errno.h>
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
uint32_t convert(uint8_t * test, uint64_t loc) {
return ntohl((test[loc] << 24) | (test[loc + 1] << 16) | (test[loc + 2] << 8) | test[loc + 3]);
}
void main(int argc, char ** argv) {
FILE * fileptr;
uint8_t * buffer;
long filelen;
FILE * f;
char * filename;
uint64_t record;
uint64_t record_loc;
uint64_t file_loc;
uint64_t file_size;
if (argc <= 1) {
printf("Usage: %s [firmware-file-name]\n", argv[0]);
exit(0);
}
fileptr = fopen(argv[1], "rb");
fseek(fileptr, 0, SEEK_END);
filelen = ftell(fileptr);
rewind(fileptr);
buffer = (uint8_t * ) malloc((filelen + 1) * sizeof(uint8_t));
fread(buffer, filelen, 1, fileptr);
fclose(fileptr);
for (record = 0; record < (uint8_t) buffer[0x18]; record = record + 1) {
record_loc = 0x40 + (record * 0x240);
filename = (malloc(32));
sprintf(filename, "%s.%s", (char * ) & buffer[record_loc + 0x120], (char * ) & buffer[record_loc + 0x20]);
file_loc = convert(buffer, record_loc + 0x10);
file_size = convert(buffer, record_loc + 0x18);
f = fopen(filename, "wb");
if (f == NULL) {
printf("ERROR: could not open output\n");
printf("the error was: %s\n", strerror(errno));
free(filename);
continue;
}
fwrite( & (buffer[file_loc]), sizeof(uint8_t), (size_t) file_size, f);
fclose(f);
free(filename);
}
free(buffer);
}
- Compile script:
$ gcc aml-upgrade-package-extract.c -o aml-upgrade-package-extract
- Use script to extract img file contents:
$ ./aml-upgrade-package-extract aml_upgrade_package.img
- Make sure you have FAT32 partition on your microSD card and execute following commands on unmounted device:
### !!! WARNING: Replace /dev/sdc with path to your card. Do not use partition path like /dev/sdc1 !!! ###
$ sudo dd if=aml_sdc_burn.UBOOT of=/dev/sdX bs=1 count=442
$ sudo dd if=aml_sdc_burn.UBOOT of=/dev/sdX seek=1 skip=1 bs=512
$ sync
- Mount FAT32 partition of you microSD card and copy following files:
aml_sdc_burn.ini
aml_sdc_burn.UBOOT
aml_upgrade_package.img
- Umount microSD card and plug it into X96
-
Boot from microSD:
- Take out power cable from X96
- Insert a match (or any kind of object that will fit) to AV port and hold the switch that is inside
- Plug in power cable to X96 while holding the switch
- Do not worry if there's no signal on the screen. If X96 won't reboot after 10-15 minutes, plug out and plug in power cable. Device should boot up with new rom.
- Add you Google account and install/update Google Apps from Google Play
- Install Netflix and other apps you like. Enjoy using your device!
Used sources:
- Jean Luc Aufranc, How to Create a Bootable Recovery SD Card for Amlogic TV Boxes
- N'ayam Amarsh'e, Bringing you the latest release of atvXperience v4 - Pie for S905W!
💖 💪 🙅 🚩
Adam Mateusz Brożyński
Posted on April 25, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
webdev Understanding HTTP, Cookies, Email Protocols, and DNS: A Guide to Key Internet Technologies
November 30, 2024