add stuff
This commit is contained in:
commit
26cd15d899
65 files changed
+4820
No files matched your search
@@ -0,0 +1,43 @@
|
||||
# Templates — kurz erklärt
|
||||
|
||||
| Datei | Ziel |
|
||||
|---|---|
|
||||
| `developer.sh` | früher Root-Boot-Hook (`/3rd_rw/developer.sh`), Beispiele für Binds/Stubs/Services |
|
||||
| `custom-app.json` | `AppInfo`-Eintrag für eine eigene App-Tile (`Appinfo.json`) |
|
||||
| `hide-preset.json` | `deletedPresetApp.txt`-Beispiel (Tiles ausblenden) |
|
||||
| `custom-ui.html` | minimale Custom-UI-Seite (`/3rd_rw/UI/custom.html`) |
|
||||
| `start-UI-custom.sh` | `start-UI.sh`-Klon, lädt `custom.html` |
|
||||
|
||||
## Nutzung
|
||||
|
||||
```sh
|
||||
# 1) developer.sh (optional, früh)
|
||||
cp developer.sh /3rd_rw/developer.sh
|
||||
chmod 755 /3rd_rw/developer.sh
|
||||
# Beispiele in der Datei einkommentieren; reboot
|
||||
|
||||
# 2) App-Tile
|
||||
# custom-app.json-Inhalt in /3rd_rw/appdata/launcher/Appinfo.json mergen
|
||||
# (bestehende AppInfo-Einträge behalten!)
|
||||
# UI neu starten / reboot
|
||||
|
||||
# 3) Tiles ausblenden
|
||||
cp hide-preset.json /3rd_rw/appdata/launcher/deletedPresetApp.txt
|
||||
# anpassen; UI neu starten / reboot
|
||||
|
||||
# 4) Custom-UI
|
||||
cp custom-ui.html /3rd_rw/UI/custom.html
|
||||
cp start-UI-custom.sh /3rd_rw/patch/start-UI-custom.sh
|
||||
chmod 755 /3rd_rw/patch/start-UI-custom.sh
|
||||
# in /3rd_rw/developer.sh:
|
||||
# mount --bind /3rd_rw/patch/start-UI-custom.sh /3rd/opera4x/hisenseUI/start-UI.sh
|
||||
# reboot
|
||||
```
|
||||
|
||||
## Wichtig
|
||||
|
||||
- **Backup** vor jeder Änderung: `/3rd_rw/backup/`.
|
||||
- **SSH/Root-Loop** als Rettungsweg behalten; bei schwarzem Bildschirm `UI/index.html`-Backup zurück, `hisenseUI` neu starten.
|
||||
- **API-Namen** (`Hisense_StartApp`, `TVAPI`, `guijs`) sind `UNVERIFIED`; im UI-DevTools (9223) / Web-Browser (9224) prüfen.
|
||||
- **Kein Flash**: alles in `/3rd_rw`/Bind-Mounts; Rollback per Datei/`umount`/Reboot.
|
||||
- **`hide-preset.json`** ist ein Vollbeispiel (inkl. `TV Browser`/`vidaa-plus`); kürze es auf das, was du wirklich ausblenden willst. `VidaaRecon` nicht ausblenden, wenn du die Recon-Seite brauchst.
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"AppInfo": [
|
||||
{
|
||||
"AppId": "MyApp",
|
||||
"Thumb": "file:///3rd_rw/appdata/custom/icon.png",
|
||||
"Icon_96": "file:///3rd_rw/appdata/custom/icon.png",
|
||||
"Image": "file:///3rd_rw/appdata/custom/icon.png",
|
||||
"URL": "file:///3rd_rw/appdata/custom/index.html",
|
||||
"AppName": "MyApp",
|
||||
"Title": "MyApp",
|
||||
"IconURL": "file:///3rd_rw/appdata/custom/icon.png",
|
||||
"StartCommand": "file:///3rd_rw/appdata/custom/index.html",
|
||||
"InstallTime": "2026-10-26",
|
||||
"RunTimes": 0,
|
||||
"StoreType": "foxxum",
|
||||
"PreInstall": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=1280,height=720">
|
||||
<title>My TV</title>
|
||||
<style>
|
||||
html, body { margin:0; width:100%; height:100%; background:#0b0b0b; color:#eee;
|
||||
font-family: -apple-system, "Segoe UI", Roboto, sans-serif; overflow:hidden; }
|
||||
.wrap { padding:2.2vw; }
|
||||
h1 { font-size:2.8vw; margin:0 0 1.2vw 0; font-weight:300; letter-spacing:.04em; }
|
||||
.row { display:flex; gap:1vw; flex-wrap:wrap; }
|
||||
button { font-size:1.25vw; padding:1vw 1.5vw; border-radius:.55vw;
|
||||
border:1px solid #444; background:#1b1b1b; color:#eee; cursor:pointer; }
|
||||
button:hover { background:#2a2a2a; }
|
||||
pre { margin-top:1.5vw; font-size:.95vw; color:#8f8; white-space:pre-wrap; }
|
||||
.hint { color:#888; font-size:1vw; margin-top:1.5vw; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
<h1>My TV</h1>
|
||||
<div class="row">
|
||||
<button onclick="launch('dtv_app_mtk')">TV</button>
|
||||
<button onclick="launch('netflix')">Netflix</button>
|
||||
<button onclick="launch('youtube')">YouTube</button>
|
||||
<button onclick="launch('opera4x')">TV Browser</button>
|
||||
<button onclick="launch('factory_lite')">Factory</button>
|
||||
<button onclick="probe()">APIs</button>
|
||||
</div>
|
||||
<pre id="out">ready.</pre>
|
||||
<div class="hint">
|
||||
Custom-UI-Template. API-Namen/Signaturen sind UNVERIFIED — im UI-DevTools (9223)
|
||||
bzw. im Web-Browser (9224) prüfen. Kein Shell-Zugriff aus JS; dafür Root-Loop/SSH.
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
function out(o){ document.getElementById('out').textContent = JSON.stringify(o,null,2); }
|
||||
|
||||
function launch(id){
|
||||
var o = {app:id};
|
||||
try {
|
||||
// UI context (hisenseUI / UI_jsplugins)
|
||||
if (typeof Hisense_StartApp === 'function') {
|
||||
Hisense_StartApp(':am,' + id + ',:start=' + id);
|
||||
o.via = 'Hisense_StartApp';
|
||||
} else if (typeof HiBrowser !== 'undefined' && HiBrowser && HiBrowser.System) {
|
||||
// web-browser context (hisense_browser / libhspdk-jsx)
|
||||
HiBrowser.System.startApp(':am,' + id + ',:start=' + id);
|
||||
o.via = 'HiBrowser.System.startApp';
|
||||
} else if (typeof TVAPI !== 'undefined' && TVAPI && TVAPI.StartApp) {
|
||||
TVAPI.StartApp(id);
|
||||
o.via = 'TVAPI.StartApp';
|
||||
} else if (typeof guijs !== 'undefined' && guijs && guijs.StartApp) {
|
||||
guijs.StartApp(id);
|
||||
o.via = 'guijs.StartApp';
|
||||
} else {
|
||||
o.via = 'none';
|
||||
o.note = 'No start API found; see 03-ui.md / DevTools.';
|
||||
}
|
||||
} catch(e) { o.err = String(e); }
|
||||
out(o);
|
||||
}
|
||||
|
||||
function probe(){
|
||||
var o = {};
|
||||
['Hisense_StartApp','HiBrowser','TVAPI','guijs','model','UI'].forEach(function(k){
|
||||
try { o[k] = (typeof window[k] !== 'undefined') ? typeof window[k] : 'undefined'; }
|
||||
catch(e){ o[k] = String(e); }
|
||||
});
|
||||
o.href = location.href;
|
||||
out(o);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,63 @@
|
||||
#!/bin/sh
|
||||
# /3rd_rw/developer.sh
|
||||
#
|
||||
# EARLY root boot hook. Called by /basic/autorun.sh at line ~90, i.e. BEFORE:
|
||||
# ms_service (162) -> hisenseUI (168) -> app_man (177) -> delayrun (190)
|
||||
#
|
||||
# Use it for:
|
||||
# - bind-mounting modified /basic/am_start.ini, am_config, delayrun.sh
|
||||
# - stubbing unwanted services (ms_service, start-UI.sh, ...)
|
||||
# - starting your own root service
|
||||
# - starting root_loop/sshd earlier than the late HamService wrapper
|
||||
#
|
||||
# Keep it idempotent and log everything. If it breaks the UI/AM, remove it via
|
||||
# SSH/root_loop and reboot.
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/basic/bin
|
||||
export PATH
|
||||
|
||||
# Everything to a log (comment out for serial/debug)
|
||||
exec >>/3rd_rw/developer.log 2>&1
|
||||
echo "=== developer.sh $(date) boot=$(cat /proc/sys/kernel/random/boot_id 2>/dev/null) ==="
|
||||
# set -x
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 1) Your own root service
|
||||
# ---------------------------------------------------------------------------
|
||||
# mkdir -p /3rd_rw/bin
|
||||
# /3rd_rw/bin/mydaemon &
|
||||
# echo "mydaemon started: $!"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 2) Replace a ro config BEFORE app_man reads it (am_start/am_config)
|
||||
# Put modified copies under /3rd_rw/etc/.
|
||||
# ---------------------------------------------------------------------------
|
||||
# mount --bind /3rd_rw/etc/am_start.ini /basic/am_start.ini
|
||||
# mount --bind /3rd_rw/etc/am_config /basic/am_config
|
||||
# echo "am configs bound"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 3) Replace a ro service script/binary BEFORE autorun runs it.
|
||||
# Example: stub ms_service (autorun line 162)
|
||||
# ---------------------------------------------------------------------------
|
||||
# mkdir -p /3rd_rw/stubs
|
||||
# printf '#!/bin/sh\nexit 0\n' > /3rd_rw/stubs/true
|
||||
# chmod 755 /3rd_rw/stubs/true
|
||||
# mount --bind /3rd_rw/stubs/true /3rd/ms-screen/ms_service
|
||||
# echo "ms_service stubbed"
|
||||
|
||||
# Example: custom UI start script (autorun line 168)
|
||||
# mount --bind /3rd_rw/patch/start-UI-custom.sh /3rd/opera4x/hisenseUI/start-UI.sh
|
||||
# echo "custom start-UI bound"
|
||||
|
||||
# Example: modified delayrun (autorun line 190)
|
||||
# mount --bind /3rd_rw/etc/delayrun.sh /basic/delayrun.sh
|
||||
# echo "delayrun bound"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 4) Start root loop / SSH earlier (optional; the HamService wrapper also does)
|
||||
# ---------------------------------------------------------------------------
|
||||
# /bin/sh /3rd_rw/appdata/root_loop.sh &
|
||||
# [ -x /3rd_rw/sshd/start_sshd.sh ] && /bin/sh /3rd_rw/sshd/start_sshd.sh &
|
||||
|
||||
echo "=== developer.sh done ==="
|
||||
exit 0
|
||||
@@ -0,0 +1,27 @@
|
||||
[
|
||||
"netflix",
|
||||
"amazon",
|
||||
"youtube",
|
||||
"browser",
|
||||
"vidaa-plus",
|
||||
"accuweather",
|
||||
"https://cd-dmgz.bamgrid.com/bbd/hisense_tv/index.html",
|
||||
"http://8577004de253-ott-tv.maxdome.de",
|
||||
"https://prod-hisense-ui40-app.rakuten.tv/",
|
||||
"https://tvapp.rlaxxtv.com/r/no-animations/720/?customer=Hisense",
|
||||
"https://hisense.chili.com",
|
||||
"https://smarttv.uefa.tv",
|
||||
"https://app.hisense.rtl-smart.tv/",
|
||||
"https://ctv-vewd.kidoodle.tv",
|
||||
"http://www.yupptv.com/hisense/index.html",
|
||||
"http://plex.tv/web/tv/hisense?mixedContent=1",
|
||||
"https://smarttv3.videociety.de",
|
||||
"http://apps.tvgam.es/tv_games/hisense_portal/production/portal/index.html",
|
||||
"http://2897431816.fxm3751860294.com/?category=apps",
|
||||
"http://2897431816.fxm3751860294.com/?category=movies",
|
||||
"http://2897431816.fxm3751860294.com/?category=catchup",
|
||||
"http://2897431816.fxm3751860294.com/?category=news",
|
||||
"http://2897431816.fxm3751860294.com/?category=music",
|
||||
"http://2897431816.fxm3751860294.com/?category=sport",
|
||||
"http://2897431816.fxm3751860294.com/?category=search"
|
||||
]
|
||||
@@ -0,0 +1,42 @@
|
||||
#!/bin/sh
|
||||
# custom start-UI: same runtime as the stock start-UI.sh, but loads
|
||||
# /3rd_rw/UI/custom.html instead of /3rd_rw/UI/index.html.
|
||||
#
|
||||
# Install (safe, file-level bind mount) via /3rd_rw/developer.sh:
|
||||
# mkdir -p /3rd_rw/patch
|
||||
# cp this file /3rd_rw/patch/start-UI-custom.sh
|
||||
# chmod 755 /3rd_rw/patch/start-UI-custom.sh
|
||||
# mount --bind /3rd_rw/patch/start-UI-custom.sh /3rd/opera4x/hisenseUI/start-UI.sh
|
||||
#
|
||||
# Or use the vendor full overlay /3rd_rw/patch/opera4x (see 04-modding.md, E.2).
|
||||
set -e
|
||||
cd /3rd/opera4x/hisenseUI
|
||||
. ./opera_env.sh
|
||||
|
||||
export MEMORY_LIMIT=$(( 500*1024*1024 ))
|
||||
STARTPAGE="file:///3rd_rw/UI/custom.html"
|
||||
|
||||
if [ -x /etc/scripts/ins_arm_mali_mod.sh ]; then
|
||||
/etc/scripts/ins_arm_mali_mod.sh
|
||||
fi
|
||||
|
||||
export LD_PRELOAD="/3rd/opera4x/lib/libcurl.so.4.4.0"
|
||||
|
||||
cmd="./bin/hisenseUI"
|
||||
cmd+=" --hw-gles"
|
||||
cmd+=" --js-flags=\"--expose-gc\""
|
||||
cmd+=" --jsplugins-dir=/3rd/UI_jsplugins"
|
||||
cmd+=" --enable-gpu-rasterization"
|
||||
cmd+=" --force-gpu-rasterization"
|
||||
cmd+=" --force-gpu-mem-available-mb=512"
|
||||
cmd+=" --disable-software-rasterizer"
|
||||
cmd+=" --disable-web-security"
|
||||
cmd+=" --http-cache-size=30"
|
||||
cmd+=" -u ${STARTPAGE}"
|
||||
|
||||
if [ -e /3rd_rw/appdata/enable_developer_tools ]; then
|
||||
cmd+=" --remote-debugging-port=9223"
|
||||
fi
|
||||
|
||||
cmd+=" $@"
|
||||
exec $cmd
|
||||
Reference in new issue
Block a user