kalle@hauki-android-ci:~$ ./build_gamepad.sh
>>> 0. Valmistellaan hakemistot ja puhdas Gradle-pohja...
>>> 1. Kirjoitetaan MeshBASIC Gamepad Demo...
>>> 2. Valmistellaan VFB HTML Bridge (Taysi Node.js Mock)...
>>> 3. Kasitellaan x-mesh-basic Moottori ja vuodetaan 'state' lennossa...
>>> 4. Paivitetaan Natiivi Android GUI (Gamepad & WebView)...
>>> 5. Kaannetaan APK...
Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv6A
ddresses=false
To honour the JVM settings for this build a single-use Daemon process will be
forked. For more on this, please refer to https://docs.gradle.org/8.5/userguide
/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation.
Daemon will be stopped at the end of the buildB
BUILD SUCCESSFUL in 6s
30 actionable tasks: 30 executed
=========================================
[+] Natiivi MeshGamepad APK valmis: /home/kalle/mesh-game-poc/apks/MeshGamepad_
v1.0.apk
kalle@hauki-android-ci:~$B
==
jee! kokeillaan
==
kalle@hauki-android-ci:~$ mkdir /mnt/mesh_shared/APK/gamepad
kalle@hauki-android-ci:~$ cp /home/kalle/mesh-game-poc/apks/MeshGamepad_v1.0.ap
k /mnt/mesh_shared/APK/gamepad/
kalle@hauki-android-ci:~$B
==
en ole ihan varma pitC$isikC6 nC$kyC$ muuta, kaatuikohan se basic koodi /
engine
==
Kuvakaappaus kertoo meille paljon! HyvC$ uutinen on, ettC$ Android-puolen
natiivi koodaus toimii tC$ydellisesti: Java-koodisi generoi D-Padin,
tulitusnapin ja tilaruudun aivan kuten pitC$C$kin. Gradle-kC$C$nnC6s on siis
100 % ehjC$.
Huono uutinen (kuten uumoilikin) on tuo ylC$osan sysimusta ruutu. Sen pitC$isi
nC$yttC$C$ MeshBASIC-moottorin generoima "THE DARK MESH" -aloitusruutu, mutta
sen sijaan WebView-selainkomponentti on kaatunut JavaScript-virheeseen ennen
ensimmC$isenkC$C$n pikselin piirtC$mistC$.
Koska tC$mC$ tapahtuu lennossa puhelimen sisC$isessC$ selaimessa ja MeshBASIC
yrittC$C$ epC$toivoisesti toimia Node.js-ympC$ristC6n mock-rajapinnoilla, emme
nC$e virhettC$ ilman puhelimen kytkemistC$ tietokoneeseen Android Studion adb
logcat -tyC6kalulla. AlkuperC$inen skripti ohjaa JavaScript-virheet piiloon
Androidin sisC$iseen lokiin.
Voimme kuitenkin "hakkeroida" oman skriptimme nC$yttC$mC$C$n virheet
visuaalisesti suoraan tuossa mustalla ruudulla!
TehdC$C$n nopea Python-injektio, joka puukottaa build_gamepad.sh -skriptin
HTML-generaattoria siten, ettC$ se piirtC$C$ punaisen virhekonsolin ruudulle
heti kun selain kaatuu.
1. Injektoi visuaalinen virhekonsoli skriptiin
Kopioi ja aja tC$mC$ koko lohko kerralla. Se muokkaa bash-skriptiC$si
turvallisesti etsimC$llC$ sieltC$ vanhan piilotetun window.onerror-kC$sittelijC
$n ja korvaamalla sen HTML-ruudulle piirtC$vC$llC$ versiolla.
python3 -c '
import sys
with open("/home/kalle/build_gamepad.sh", "r") as f:
data = f.read()
data = data.replace(
"window.onerror = function(msg, url, line) { if(window.AndroidBridge)
AndroidBridge.log(\"JS ERR: \" + msg + \" at \" + line); };",
"window.onerror = function(msg, url, line) { var d=document.createElement(\
"div\"); d.style=\"color:red;position:absolute;top:0;left:0;z-index:9999;backgr
ound:black;padding:10px;font-family:monospace;\"; d.innerText=\"JS ERR:
\"+msg+\" (line \"+line+\")\"; document.body.appendChild(d); };"
)
data = data.replace(
"var oldLog = console.log;",
"var oldLog = console.log; var logBox = document.createElement(\"div\");
logBox.style=\"color:lime;position:absolute;top:50px;left:0;z-index:998;font-si
ze:10px;pointer-events:none;white-space:pre-wrap;font-family:monospace;\";
document.body.appendChild(logBox);"
)
data = data.replace(
"oldLog(args);",
"oldLog(args); logBox.innerText += args + \"\
\";"
)
with open("/home/kalle/build_gamepad.sh", "w") as f:
f.write(data)
'
2. KC$C$nnC$ ja kopioi uusi APK
Aja skripti ja kopioi tuotos takaisin jaettuun kansioon:
~/build_gamepad.sh
cp /home/kalle/mesh-game-poc/apks/MeshGamepad_v1.0.apk /mnt/mesh_shared/APK/gam
epad/
Kun nyt asennat ja avaat uuden APK:n puhelimellasi, tuon mustan tyhjyyden
pC$C$lle pitC$isi ilmestyC$ punainen laatikko, joka kertoo tC$smC$lleen sen
JavaScript-poikkeuksen tai muuttujan (esim. SyntaxError tai ReferenceError),
johon moottorin kC$ynnistys tukehtuu.