ไธไธชๅ จๆฐ็ Android Recovery๏ผๅบไบ Flutter ๆๅปบ๏ผๆๆณๆๅฎๅ็ๆดไธช Recovery ็ๆๆจๅไธไธไธช้็จ็ข
ๆ ่ฎบๅฆไฝ๏ผๆไธไผๆพๅผๆ็ๆฏไธไธช่ฝฏไปถ๏ผๆพ็ปๆฏ๏ผๅฐๆฅๆฏ๏ผ็ฐๅจไนๆฏ
ๅจๆ่ฎพๅคๆขไบไธๅ ็ๆๆบๅๅนณๆฟๅ๏ผๆๅๆฌกๆฅ่งฆไบๅทๆบ๏ผๅท Magisk๏ผไฝๅ ไธบ็จๅฐ็ฑณๅคฑๅป็่ฟๅ ๅนด๏ผๆๅทฒ็ปๅฎๅ จๅ่ฟไธช็ๆ่ฑ่๏ผ็ฌฌไธๆญฅๅฐ่ฏไบๆพ่ฎพๅค็ TWRP๏ผ่ฟๆฏ็ๆ็็้ข๏ผๅๅๅนดๅๅ ไนไธๆจกไธๆ ท๏ผๅจๆ8ๅนดๅๅๆฅ่งฆ Flutter๏ผๆๅฝๆถๅฐฑๆณ๏ผๅฆๆ่ฟไธช Recovery ่ฝ็จ Flutter ๅผๅๅฐฑๅฅฝไบ๏ผๅฝๆถไนๆฒกๆณๅคชๅค่ฟไปถไบ็ๆไนๆฏไปไน๏ผ็ดๅฐ็ฐๅจ๏ผๆ็ปไบๆไบ่ฝๅๅฐ่ฟไปถไบๆ ๅฎ็ฐใ
- ๅผๅๆ็ๆๅ๏ผFlutter ็ hot reload ๅ hot restart ๅคงๅคง็ผฉ็ญไบๅผๅๅจๆ๏ผๆๅคงๆๅไบๅผๅๆ็๏ผๆๅผๅๆ็๏ผ่ฟไธช Recovery ๆ่ฝๅฟซ้่ฟญไปฃ๏ผๅฟซ้ๅฎๅ๏ผๅฟซ้้้ ๆดๅค่ฎพๅค
- Flutter ไธฐๅฏ็็ๆ๏ผFlutter ๆฅๆไธฐๅฏ็็ฌฌไธๆนๅบๅๅทฅๅ ท๏ผๅฏไปฅ่ฝปๆพ้ๆๅ็งๅ่ฝ๏ผไพๅฆ็ฝ็ป่ฏทๆฑใๆฐๆฎๅญๅจใๅจ็ปๆๆ็ญ๏ผ่ฟไบ้ฝๅฏไปฅ็ดๆฅๅจ Recovery ไธญไฝฟ็จ๏ผ่ไธ้่ฆ้ๆฐๅผๅ
- ่ทจๅนณๅฐ: ่ฝ็ถๆฏๅช่ฟ่กๅจ Android Recovery ็ฏๅข๏ผไฝๅฆๆไป ไป ่ฐ่ฏ UI๏ผๅฏไปฅ้่ฟๅ ถไปไปปๆ่ฎพๅค่ฐ่ฏ
- ๅๅนดๅ็ UI ้ฃๆ ผไน่ฎธไธ้ๅบๅฝไธไบ
ๅจๅฐ่ฏ่ชๅทฑ็ผ่ฏ TWRP ็่ฟ็จไธญ๏ผๅ็ฐๆดไธช่ฟ็จๅ ถๅฎๆฏ่พๅคๆ๏ผTWRP ้่ฆไพ่ตๆดไธช AOSP ็็ผ่ฏ็ฏๅข๏ผๅ ็จ็ฃ็้ๅธธๅคง๏ผ็ฌฌไธๆฌก็ผ่ฏๆถ้ด้ๅธธ้ฟ
ๅ็ปญๅฝไธญ็ผๅญ็ผ่ฏๆถ้ดไผๅฅฝไธไบ๏ผไฝๅฏนไบ TWRP ็ๅผๅ๏ผๆๅนถไธๆธ ๆฅๆฏๅฆไฝ่ฟ่ก็๏ผๆฏไธๆฏๅช่ฝ็ฒๅไปฃ็ ๏ผ็ถๅ push recovery ่ฟไธชไบ่ฟๅถๅฐ่ฎพๅคไธ่ฟ่กๆต่ฏ๏ผ่ฟๆฏ้่ฆๅฎๆด flash recovery ้ๅ๏ผไน่ฎธๆไธไบ็ฐๆ็ๆนๆณ
ไพๅฆ TWRP ็ UI ๆฏๅบไบ XML ็ผๅ็๏ผๅฏ่ฝๅฏไปฅๅฎ็ฐ็ดๆฅ้ข่ง๏ผไฝๆ ่ฎบๅฆไฝ๏ผๆดไธชๅผๅๆต็จๆ็ๆไฝ
ไบๆฏๆๅฐ Flutter ๅธฆๅฐไบ Android Recovery ็ฏๅขไธญ๏ผๅผๅ Aurora Recovery๏ผๅๅผๅๆฎ้ Flutter App ๆฒกๆไปปไฝๅทฎๅผ๏ผๅๅฉ flutter ็ custom devices๏ผไฟๅญๅ hot reload๏ผไปฅๅ hot restart๏ผ้ฝๅๆฎ้ๅผๅๅฎๅ จไธๆ ท
ๅบไบ sony ็ flutter-embedded-linux๏ผๅๅง็ไปฃ็ ๏ผๆฏๅผบไพ่ต Linux ็ GPU ็ฏๅข็๏ผๅณไฝฟๆฏ flutter-embedded-linux/examples/flutter-drm-gbm-backend ่ฟไธช backend๏ผ่ฝ็ถๆฏ็ดๆฅๆไฝ drm ่ฎพๅค่็น๏ผไฝๅจ Android Recovery ๆจกๅผไธไป็ถไธๅฏ็จ
่ๅ่ TWRP ็ไปฃ็ ๏ผๅ ถไธญๆไธคไธชๆธฒๆๅบ๏ผๅๅซๆฏ minui/minuitwrp๏ผๅ่ ๅฏน็ฐไปฃ็่ฎพๅคๆฏๆๆดๅฅฝ๏ผๆ้ๅฏน่ฎพ็ฝฎ plane ้้็ญๆไฝ๏ผๅ่ ๅจไธๅ 15ๅไธๅ Pad2 Pro ไธ็ RGB demo ๅฑ็คบ้ฝไธๆญฃ็กฎ
ๆไปฅ DRM-DUMB backend ็ๅฎ็ฐๅๆญฅๅฐฑๆฏๅฐ Flutter ๆฏๅธงๆธฒๆ็ๆฐๆฎ้ๅๆฌก CPU ๆท่ด๏ผๅไฝฟ็จ minuitwrp ้ๆพ
Flutter Engine ไนๆๅคง้็ไฟฎๆน้้ ๏ผๆฅๆฏๆ Android Recovery ็ฏๅข่ฟ่ก๏ผๅนถๅช้่ฆไธไปฝ Engine ๅฐฑ่ฝๅๆถๆฏๆ CPU ๅ GPU ไธค็งๆธฒๆๅ็ซฏ๏ผๅป้ค OpenGL ES ็ธๅ ณ็ไพ่ต๏ผๅขๅ Vulkan Impeller ็ๆฏๆ
็ฎๅ้ญๆบ๏ผๅ็ปญไผๆไพ็ฑปไผผ flutter-elinux ็ๅทฅๅ ท๏ผๅฏไปฅ่ฎฉๅคงๅฎถไน่ฝๅผๅ่ฟไธช Recovery
้ป่ฎค็ผ่ฏๅบ Android ไธคไธช so ็ไพ่ตๅฆไธ๏ผ
$READELF -d libflutter.so
0x0000000000000001 (NEEDED) Shared library: [libc.so]
0x0000000000000001 (NEEDED) Shared library: [libdl.so]
0x0000000000000001 (NEEDED) Shared library: [libm.so]
0x0000000000000001 (NEEDED) Shared library: [libandroid.so]
0x0000000000000001 (NEEDED) Shared library: [libEGL.so]
0x0000000000000001 (NEEDED) Shared library: [libGLESv2.so]
0x0000000000000001 (NEEDED) Shared library: [liblog.so]
0x0000000000000001 (NEEDED) Shared library: [libjnigraphics.so]
0x000000000000000e (SONAME) Library soname: [libflutter.so]
$READELF -d libflutter_engine.so
0x0000000000000001 (NEEDED) Shared library: [libc.so]
0x0000000000000001 (NEEDED) Shared library: [libdl.so]
0x0000000000000001 (NEEDED) Shared library: [libm.so]
0x0000000000000001 (NEEDED) Shared library: [libandroid.so]
0x0000000000000001 (NEEDED) Shared library: [libEGL.so]
0x0000000000000001 (NEEDED) Shared library: [libGLESv2.so]
0x0000000000000001 (NEEDED) Shared library: [liblog.so]
0x000000000000000e (SONAME) Library soname: [libflutter_engine.so]ไฟฎๆนๅ็ๅผๆไพ่ตๅฆไธ๏ผ
$READELF -d /Users/Laurie/Desktop/nightmare-space/AuroraRecoveryProject/arp_render/flutter-3.38.5/engine/src/out/android_debug_unopt_arm64_embedder_software/libflutter_engine.so
Dynamic section at offset 0x20954a8 contains 28 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libc.so]
0x0000000000000001 (NEEDED) Shared library: [libdl.so]
0x0000000000000001 (NEEDED) Shared library: [libm.so]
0x0000000000000001 (NEEDED) Shared library: [liblog.so]
0x000000000000000e (SONAME) Library soname: [libflutter_engine.so]่ฝ็ถไธไพ่ต libEGL.so ๅ libGLESv2.so ไบ๏ผไฝ้ ๅ่ชๅฎไน็ embedders๏ผไพ็ถๅฏไปฅ่ฎฉ Flutter ไฝฟ็จ Vulkan Impeller ๅ็ซฏ
็ป่ฟไธๅฐ็ๅฐ่ฏ
vkCreateInstance() โ ไธ้่ฆไปปไฝ display
โ vkEnumeratePhysicalDevices()
โ vkCreateDevice() โ ๅช้ๅ
ๆ ธ้ฉฑๅจ (kgsl)
โ vkAllocateMemory() / vkCreateBuffer() / ...Vulkan ่ฎพ่ฎกไธๅฐ ๆ ธๅฟ GPU ๆไฝ๏ผinstanceใdeviceใmemoryใcommand buffer๏ผไธ ็ชๅฃ็ณป็ป้ๆ๏ผWSI: surfaceใswapchain๏ผๅฎๅ
จๅ็ฆปใๅจ Android HAL ๅฑ๏ผhwvulkan_device_t ็ดๆฅๆไพ GetInstanceProcAddr๏ผ็ป่ฟไบๆๆ Framework ๆๅกใ
eglGetDisplay() โ ๅฟ
้กปๆ display๏ผ่ฟๆฅ SurfaceFlinger๏ผ
โ eglInitialize() โ ๆไธพ GPUใๅ ่ฝฝ้
็ฝฎ๏ผไพ่ต HWComposer๏ผ
โ eglCreateContext() โ ๆๆ GL ่ฐ็จๅฟ
้กปๅจ context ๅ
โ glBindBuffer() / glDrawArrays() / ...OpenGL/ES ็ๆๆๆไฝ้ฝๅฟ
้กปๅจ EGL context ๅ
ๆง่ก๏ผ่ EGL context ้่ฆ EGL displayใAdreno ้ญๆบ libEGL_adreno.so ็ eglInitialize() ๅ
้จ้่ฟ libgui ่ฟๆฅ SurfaceFlinger ๆไธพๆพ็คบ่ฎพๅค โ ่ฟๅจ Recovery ไธญๆฐธ่ฟไธๅฏ่ฝๆๅใ
| Vulkan | OpenGL ES | |
|---|---|---|
| ้่ฆ display ๆ่ฝๅๅงๅ๏ผ | โ ไธ้่ฆ | โ ๅฟ ้กป |
| Android HAL ็ดๆฅๅ ฅๅฃ๏ผ | โ
hwvulkan_device_t |
โ ๆ ๅฏนๅบ HAL |
| ไพ่ต SurfaceFlinger๏ผ | โ | โ EGL ๅ ้จ็กฌ็ผ็ |
| ็ฆปๅฑๆธฒๆๆฏไธ็ญๅ ฌๆฐ๏ผ | โ | โ ้ๅ ๆ context |
| Recovery ๅฏ็จๆง | โ ๅฏ็จ | โ ไธๅฏ็จ |
้ฎ้ข๏ผ
Recovery ๆจกๅผไธ็ engine ็ฎๆ ไบง็ฉๆฏ arm64 ๆถๆ็ so๏ผ่ฟ่ก็ฏๅขไธๆไพๅฎๆด็ GPU ๅพๅฝขๆ ๏ผๅๅงๆๅปบ็ณป็ปๅจ arm64 ไบคๅ็ผ่ฏๆถไผๅผบๅถ้พๆฅ EGLใGLESv2 ็ญๅบ๏ผ่ฟไบๅบๅจ Recovery ่ฟ่กๆถ็ฏๅขไธญไธๅญๅจ๏ผso ๅ ่ฝฝๆถไผๅ undefined symbol ็ดๆฅๅดฉๆบ
ๆนๆก๏ผ
ๅฐ Android ไพง BUILD.gn ๆนไธบๆกไปถ็ผ่ฏ๏ผๅ ่ฎธๆๆๅปบๅผๅ ณ่ฃๅช GLใVulkan ไปฅๅ้จๅ Android SDK ็ธๅ ณไพ่ต
้่ฟๆ GL/Vulkan ่ฎพไธบๅฏ่ฃๅชๅผๅ ณ๏ผๆถ้คไบไบคๅ็ผ่ฏ้ถๆฎต็ๅผบๅถ GPU ็ฌฆๅทๅผ็จ๏ผไนๆ้ไบ software-only engine ็็ฌ็ซ็ผ่ฏไธๆญฃ็กฎๅ ่ฝฝ้พ่ทฏ
้ฎ้ข๏ผ
ไป ไฟฎๆน BUILD.gn ๅช่ฝๅจ้พๆฅๅฑ้ข็งป้คไพ่ต๏ผๆ ๆณไฟ่ฏๆบไปฃ็ ๆฌ่บซไธๅๅผ็จ่ฟไบๅ็ซฏ๏ผๅฝ GL/Vulkan ่ขซๅฎๅ จ่ฃๆๆถ๏ผๆชๅไฟๆค็ๅคดๆไปถๅผ็จใ็ฑปๅๅฃฐๆๅ switch case ไปไผๅฏผ่ด็ผ่ฏๅคฑ่ดฅ
ๆนๆก๏ผ
ๆไปฅไธบ Android ๅนณๅฐไปฃ็ ไธญ็ GL/Vulkan includeใ็ฑปๅๅผ็จๅๅๆฏ้ป่พ่กฅๅ ็ผ่ฏๆๅฎไฟๆค๏ผๅขๅ ๅฎไฟๆคๅ๏ผ็บฏ CPU software engine ไธไป ่ฝๅจ้พๆฅ้ถๆฎต่ฃๆ GPU ไพ่ต๏ผไน่ฝๅจๆบ็ ๅฑ้ขๅฎๆด็ผ่ฏ้่ฟ
้ฎ้ข๏ผ
Embedder ็ซฏ่ฝ็ถๅ ทๅค Vulkan Impeller ็่ฐ็จ่ทฏๅพ๏ผไฝๅนณๅฐ่งๅพๅฏน่ฑกๆ ๆณๆ้ขๆๅฎๆๆ้ ๏ผๅฏผ่ดๆดๆกๆธฒๆ้พ่ทฏๆ ๆณๆ้๏ผembedder.cc ไธญๅทฒ็ปๅญๅจ Vulkan Impeller ็ๆฅ็บฟ้ป่พ๏ผไฝๅฝๅ็ๆฌ็ PlatformViewEmbedder ็ผบๅฐๅฏนๅบๆ้ ๅฝๆฐ้่ฝฝ
ๆนๆก๏ผ
ไธบ PlatformViewEmbedder ๅขๅ Vulkan Impeller ๅฏนๅบ็ๆ้ ๅฝๆฐๅ ฅๅฃ๏ผๆฐๅขๆ้ ๅ ฅๅฃๅ๏ผembedder.cc ไธญๅทฒๆ็ Vulkan Impeller ้ป่พๅฏไปฅๆญฃ็กฎ่ฝๅฐ PlatformViewEmbedder๏ผๅฎ็ฐๅฎๆด็ Vulkan Impeller ๆฅๅ ฅ้ญ็ฏ
้ฎ้ข๏ผ
Adreno ้ฉฑๅจๅฏน command pool ๅ descriptor pool ็ๆ็ปญๅข้ฟๆดๆๆ๏ผๅจ้ซ้ขๅ้ ไฝไธๅคไฝ็ๆ ๅตไธๆดๅฎนๆ่งฆๅ OOM๏ผๅๅคๅ้ command buffer ๅ descriptor set ่ไธๅคไฝ pool๏ผไผๅฏผ่ดๅทฒๅฎๆๅธงๅฏนๅบ็ๅ้ ้ฟๆๆป็๏ผๆ็ปๅผๅๅ ๅญๆ็ปญๅข้ฟๅ OOM๏ผๅจ Android ๅ็็ๆธฒๆ่ทฏ็บฟไธญไธไผๆ่ฟไธช้ฎ้ข
ๆนๆก๏ผ
ไธบ Vulkan ๅ็ซฏ่กฅๅ command pool ๅ descriptor pool ็ๆพๅผๅคไฝๆบๅถ๏ผๅจๆฏๅธง present ๅฎๆๅๆพๅผๅคไฝ command pool ๅ descriptor pool๏ผๅๆถๅๆถๆฌๅธงๅทฒๅฎๆ็ไธดๆถๅ้ ๏ผ้ฟๅ Vulkan ่ตๆบๆฑ ๆ ้ๅข้ฟ๏ผ้ไฝ Adreno ่ฎพๅคๅจ้ฟๆถ้ด่ฟ่กไธ่งฆๅ OOM ็้ฃ้ฉ
- ๅจ CPU/GPU ๆจกๅผ้ฝๆ่พ้ซๅทๆฐ็
- ๅๅบๅผ็ UI
- ๆดๅฎๆด็็ป็ซฏ
่ฟไธชๆๅๆฏ็ฑ sh ่ๆฌๅฎ็ฐ็๏ผๅ้ข่ฝฌๆไบ dart๏ผๅฎ็ไฝ็จๆฏ้ ๅ custom-devices.json๏ผๅ ไธบ่ฟ็งๆจกๅผไธ็ Flutter App๏ผ้่ฆ็นๆฎ็ๅฎ่ฃ ๆนๅผ๏ผไปฅๅ ffi ็ๆไปถ่กฅๅ จ๏ผๆจ้ๅฐ่ฎพๅค็ /tmp๏ผ่ฟๆๅพๅค้ขๅค็ๅทฅไฝ๏ผ้ฝๆฏ fort ๅ ้จๅฎๆ๏ผๅ ๆฌไฝไธ้ไบ
- ๅญไฝๅบ่กฅ้ฝ
- GPU ้ฉฑๅจๆ่ฝฝ
- ๅจๆๅบ่กฅ้ฝ
custom-devices.json ็้ ็ฝฎ็คบไพๅฆไธ๏ผ
{
"custom-devices": [
{
"id": "rec",
"label": "Android Recovery",
"sdkNameAndVersion": "Android Recovery 1.0",
"platform": "android-arm64",
"enabled": true,
"ping": [
"adb",
"get-state"
],
"pingSuccessRegex": "recovery",
"postBuild": null,
"uninstall": [
"fort",
"uninstall",
"--app-name",
"${appName}"
],
"install": [
"fort",
"install",
"--app-name",
"${appName}",
"--local-path",
"${localPath}/.."
],
"runDebug": [
"fort",
"launch",
"--app-name",
"${appName}"
],
"forwardPort": [
"adb",
"forward",
"tcp:${hostPort}",
"tcp:${devicePort}"
],
"forwardPortSuccessRegex": ".*",
"stopApp": [
"adb",
"shell",
"killall",
"flutter-runner"
],
"screenshot": [
"echo",
"Installing on Android Recovery"
]
}
]
}่ฏดๆ๏ผๅฆๆ้่ฆๅจๅไธไธช่ฎพๅคๅฎไนไธๅๆขๆธฒๆๅ็ซฏ๏ผไพๅฆ Vulkan / SwiftShader๏ผ๏ผๅฏไปฅ้่ฟ็ฏๅขๅ้ไผ ็ป fort ๅณ็ญ๏ผไพๅฆ FORT_RENDERER=software|vulkan|swiftshader๏ผ๏ผ่ไธๆฏๅๅฎไนๅคไธช device idใ
่ฏฆ่ง launch.json
- TWRP ็ไปฃ็ ๅUIๆฏ่ฆๅๅจไธ่ตท็็ใ้่ฆๅฐ้จๅ่ฝๅๆๅๆๅฏไปฅ็ฌ็ซไฝฟ็จ็ๅบ๏ผไพๅฆ Setting๏ผ่ฟๆ ทๅฏไปฅไฟๆ ARP ๅ TWRP ็่ฎพ็ฝฎๅๆญฅ
- ่ฟๆไพๅฆ็ต้่ทๅ็ญ๏ผไน่ฆๆๅๅบ็ฌ็ซ็ๆจกๅ๏ผไปฅ ffi ็ๆนๅผๆไพ็ป Flutter ๅฑ
- ๅ ถไป็ so ๅบไฟๆไธๅจ๏ผ่ฟๆ ทๅช่ฆๆฏๅบไบๅไธไธช TWRP ้ข็ๆบ็ ็ผ่ฏๅบๆฅ็็ๆฌ๏ผFlutter ้ฝ่ฝๆญฃๅธธไฝฟ็จ ffi ่ฝๅ
ไพๅฆ๏ผ
โ android_source $READELF -d 'libtwrp_settings_ffi.so'
Dynamic section at offset 0x81f0 contains 35 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [android.hardware.health@2.0.so]
0x0000000000000001 (NEEDED) Shared library: [libhidlbase.so]
0x0000000000000001 (NEEDED) Shared library: [libutils.so]
0x0000000000000001 (NEEDED) Shared library: [libbase.so]
0x0000000000000001 (NEEDED) Shared library: [libc++.so]
0x0000000000000001 (NEEDED) Shared library: [libc.so]
0x0000000000000001 (NEEDED) Shared library: [libm.so]
0x0000000000000001 (NEEDED) Shared library: [libdl.so]
0x000000000000000e (SONAME) Library soname: [libtwrp_core_ffi.so]
***ๅ
ถไธญ็ android.hardware.health@2.0.so/libhidlbase.so ็ญ้ฝไธ้่ฆ็ฎก
ๅช้่ฆๆ libtwrp_core_ffi.so ไฝไธบ ARP(Flutter App) ็ไพ่ตๅณๅฏ
- ๆฏๆๅคๆๅนถ่งฃๅณ TWRP ๅๆๅฟซ้็นๅป๏ผๅคง้ไบไปถไธขๅคฑ็้ฎ้ข
- ๅพ ่กฅ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Flutter On Android Recovery (Architecture) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Framework (Dart) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Material / Cupertino โ โ Widgets โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Rendering / Animation / Painting / Gestures / Foundation โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ App code (your Dart/Flutter app) โ builds widget tree โ produces layer tree / scene โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ Flutter Engine API (embedder)
v
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Engine (C/C++) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Dart Isolate Setup โ โ Dart Runtime Mgmt โ โ Service Protocol โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Asset Resolution โ โ Platform Channels โ โ System Events โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Frame Scheduling โ โ Frame Pipelining โ โ Composition โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Raster backend (selected by embedder): โ
โ - Software: Skia CPU raster โ
โ - Vulkan: Impeller Vulkan (if enabled) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ Callbacks + configs provided by embedder
v
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Embedder (platform-specific: Recovery runner) โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Thread / TaskRunner Setup โ โ Event Loop Interop โ โ
โ โ (UI/Raster/IO/Platform) โ โ (epoll path; avoid libandroid)โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ App Packaging (Bundle) โ โ Native Plugins (optional) โ โ
โ โ - icudtl.dat โ โ - MethodChannel/EventChannel โ โ
โ โ - flutter_assets/* โ โ - minimal in Recovery โ โ
โ โ - libapp.so (AOT only) โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Render Surface Setup (DRM-DUMB) โ โ
โ โ - KMS/DRM dumb buffers โ โ
โ โ - PresentSoftwareBitmap/PresentBuffer โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Input (Recovery) โ โ
โ โ - minuitwrp touch API โ Flutter pointer/key events โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Vulkan mode extra (when enabled): โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Vulkan loader/driver chain โ โ
โ โ libvulkan.so โ /vendor/lib64/hw/vulkan.adreno.so โ โ
โ โ (often also) libc++.so / libnativewindow.so โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ Display scanout
v
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Kernel / Hardware โ
โ DRM (e.g., msm_drm) + KMS โ panel/display controller โ screen โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
forc build-app
forc install --app-name aurora_recovery --local-path build
forc launch --app-name aurora_recoveryforc build-app --release
forc install --app-name aurora_recovery-release --local-path build
forc launch --app-name aurora_recovery-release --release
flutter assemble -dTargetPlatform=android-arm64 \
-dBuildMode=release \
-dTargetFile=lib/main.dart \
--local-engine-src-path=$TWRP_FLUTTER_SDK/engine/src \
--local-engine=android_release_arm64_embedder_software \
--local-engine-host=host_debug_unopt_arm64 \
-o build \
android_aot_bundle_release_android-arm64device=oneplus15-rec
device=opus-pad2pro-rec
flutter run -d $device --debug \
-t lib/main.dart \
--local-engine-src-path=$TWRP_FLUTTER_SDK/engine/src \
--local-engine=android_debug_unopt_arm64_embedder_software \
--local-engine-host=host_debug_unopt_arm64 \
-vadb shell cat /tmp/twrp_child.log > ./twrp_child.log adb shell cat /data/local/tmp/magisk_install.log > ./magisk_install.log adb shell dmesg -T | tail -200 > ./dmesg.log