The A/B/C harness series: sltest (Slint) / egtest (egui) / tttest (Tauri 2 → wry → Android WebView/Chromium). Identical scene to sltest: 8580 full-width rows, 150 px + 2 px divider, alternating colors, virtualized (26-element DOM pool), custom touch drag + exponential-decay fling (sltest decay constant 7.42), rAF-driven frame loop. FR logging: the rAF callback records gap/cost exactly like the Rust harnesses; lines batch (~120) and cross the Tauri event bridge once per second (JNI round trip kept off the per-frame path). Rust side drains to a dedicated writer thread → /sdcard/Android/data/wow.gmp.tttest/files/Documents/fr.log (Tauri document_dir = getExternalFilesDir(DOCUMENTS) — the framework CREATES it; a raw std::fs mkdir of the app's external tree is SELinux-denied on Android 11+). Same FR-line format → fr_capture.py is the referee (its launch check now falls back to the package's LAUNCHER activity via monkey for non-NativeActivity apps). Gotchas learned (see frontend/dist/index.html comments): - touch-action is NOT inherited: touches land on .row, so each row must declare touch-action:none or the WebView claims the pan and cancels the page's drag (only a few px register). - Fling velocity must be a per-EVENT EMA; frame-based tracking dies when touch events sample slower than rAF (adb swipe ≈ 17 Hz). - Drag sign: finger up → offset grows (offset -= finger dy). - Tauri v2 'brownfield' is the NORMAL direct-IPC mode (not an app-provides-content mode); the mobile schema rejects security.pattern entirely. - Custom #[tauri::command]s hit the two-pass app-command ACL chicken-and-egg; the core:default event bridge avoids it. - Rust log output needs a logcat backend (log/std + __android_log_write) or it is invisible. Emulator (60 Hz, scripted swipes): 1319 frames, median 16.70 ms, 5 isolated drops (0.38%), all at swipe-injection moments, render cost med 2 ms. aarch64 phone build compiles (11 MB APK); phone testing pending (personal-device policy). Build: harnesses/tttest/scripts/build.sh [x86_64|aarch64] — cargo-tauri CLI (v2.12.4, prebuilt) drives the gradle build; signed with the debug keystore.
38 lines
1.6 KiB
XML
38 lines
1.6 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
<uses-permission android:name="android.permission.INTERNET" />
|
|
|
|
<!-- AndroidTV support -->
|
|
<uses-feature android:name="android.software.leanback" android:required="false" />
|
|
|
|
<application
|
|
android:icon="@mipmap/ic_launcher"
|
|
android:label="@string/app_name"
|
|
android:theme="@style/Theme.tttest"
|
|
android:usesCleartextTraffic="${usesCleartextTraffic}">
|
|
<activity
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"
|
|
android:launchMode="singleTask"
|
|
android:label="@string/main_activity_title"
|
|
android:name=".MainActivity"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MAIN" />
|
|
<category android:name="android.intent.category.LAUNCHER" />
|
|
<!-- AndroidTV support -->
|
|
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<provider
|
|
android:name="androidx.core.content.FileProvider"
|
|
android:authorities="${applicationId}.fileprovider"
|
|
android:exported="false"
|
|
android:grantUriPermissions="true">
|
|
<meta-data
|
|
android:name="android.support.FILE_PROVIDER_PATHS"
|
|
android:resource="@xml/file_paths" />
|
|
</provider>
|
|
</application>
|
|
</manifest>
|