Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

70 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Aurora Recovery Project (ARP)

ไธ€ไธชๅ…จๆ–ฐ็š„ 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๏ผŒ้ƒฝๅ’Œๆ™ฎ้€šๅผ€ๅ‘ๅฎŒๅ…จไธ€ๆ ท

ๅฎž็Žฐๆ–นๆกˆ

1.ไธบ flutter-embedded-linux ๅผ€ๅ‘ไธ€ไธชๆ–ฐ็š„ DRM-DUMB backend

ๅŸบไบŽ 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 ้€ๆ˜พ

2.่‡ชๅฎšไน‰ Flutter Engine

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 ๅŽ็ซฏ

็ป่ฟ‡ไธๅฐ‘็š„ๅฐ่ฏ•

Vulkan๏ผš่ฎพๅค‡ไธŽๆ˜พ็คบๅˆ†็ฆป

vkCreateInstance()        โ† ไธ้œ€่ฆไปปไฝ• display
  โ†’ vkEnumeratePhysicalDevices()
    โ†’ vkCreateDevice()    โ† ๅช้œ€ๅ†…ๆ ธ้ฉฑๅŠจ (kgsl)
      โ†’ vkAllocateMemory() / vkCreateBuffer() / ...

Vulkan ่ฎพ่ฎกไธŠๅฐ† ๆ ธๅฟƒ GPU ๆ“ไฝœ๏ผˆinstanceใ€deviceใ€memoryใ€command buffer๏ผ‰ไธŽ ็ช—ๅฃ็ณป็ปŸ้›†ๆˆ๏ผˆWSI: surfaceใ€swapchain๏ผ‰ๅฎŒๅ…จๅˆ†็ฆปใ€‚ๅœจ Android HAL ๅฑ‚๏ผŒhwvulkan_device_t ็›ดๆŽฅๆไพ› GetInstanceProcAddr๏ผŒ็ป•่ฟ‡ไบ†ๆ‰€ๆœ‰ Framework ๆœๅŠกใ€‚

OpenGL ES๏ผšEGL ๆ˜ฏๅฟ…็ปไน‹่ทฏ

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 ๅฏ็”จๆ€ง โœ… ๅฏ็”จ โŒ ไธๅฏ็”จ

ๆž„ๅปบ็ณป็ปŸๆ”ฏๆŒๆŒ‰ๆกไปถ่ฃๅ‰ช GLใ€Vulkan ๅ’Œ Android SDK ไพ่ต–

้—ฎ้ข˜๏ผš

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 ็š„็‹ฌ็ซ‹็ผ–่ฏ‘ไธŽๆญฃ็กฎๅŠ ่ฝฝ้“พ่ทฏ

Android ๅนณๅฐไพง็š„ GL/Vulkan ่ทฏๅพ„ๅขžๅŠ ็ผ–่ฏ‘ๆœŸๅฎไฟๆŠค

้—ฎ้ข˜๏ผš

ไป…ไฟฎๆ”น BUILD.gn ๅช่ƒฝๅœจ้“พๆŽฅๅฑ‚้ข็งป้™คไพ่ต–๏ผŒๆ— ๆณ•ไฟ่ฏๆบไปฃ็ ๆœฌ่บซไธๅ†ๅผ•็”จ่ฟ™ไบ›ๅŽ็ซฏ๏ผŒๅฝ“ GL/Vulkan ่ขซๅฎŒๅ…จ่ฃๆމๆ—ถ๏ผŒๆœชๅ—ไฟๆŠค็š„ๅคดๆ–‡ไปถๅผ•็”จใ€็ฑปๅž‹ๅฃฐๆ˜Žๅ’Œ switch case ไปไผšๅฏผ่‡ด็ผ–่ฏ‘ๅคฑ่ดฅ

ๆ–นๆกˆ๏ผš

ๆ‰€ไปฅไธบ Android ๅนณๅฐไปฃ็ ไธญ็š„ GL/Vulkan includeใ€็ฑปๅž‹ๅผ•็”จๅ’Œๅˆ†ๆ”ฏ้€ป่พ‘่กฅๅ……็ผ–่ฏ‘ๆœŸๅฎไฟๆŠค๏ผŒๅขžๅŠ ๅฎไฟๆŠคๅŽ๏ผŒ็บฏ CPU software engine ไธไป…่ƒฝๅœจ้“พๆŽฅ้˜ถๆฎต่ฃๆމ GPU ไพ่ต–๏ผŒไนŸ่ƒฝๅœจๆบ็ ๅฑ‚้ขๅฎŒๆ•ด็ผ–่ฏ‘้€š่ฟ‡

Embedder ่กฅ้ฝ Vulkan Impeller Surface ๆž„้€ ๅ…ฅๅฃ

้—ฎ้ข˜๏ผš

Embedder ็ซฏ่™ฝ็„ถๅ…ทๅค‡ Vulkan Impeller ็š„่ฐƒ็”จ่ทฏๅพ„๏ผŒไฝ†ๅนณๅฐ่ง†ๅ›พๅฏน่ฑกๆ— ๆณ•ๆŒ‰้ข„ๆœŸๅฎŒๆˆๆž„้€ ๏ผŒๅฏผ่‡ดๆ•ดๆกๆธฒๆŸ“้“พ่ทฏๆ— ๆณ•ๆ‰“้€š๏ผŒembedder.cc ไธญๅทฒ็ปๅญ˜ๅœจ Vulkan Impeller ็š„ๆŽฅ็บฟ้€ป่พ‘๏ผŒไฝ†ๅฝ“ๅ‰็‰ˆๆœฌ็š„ PlatformViewEmbedder ็ผบๅฐ‘ๅฏนๅบ”ๆž„้€ ๅ‡ฝๆ•ฐ้‡่ฝฝ

ๆ–นๆกˆ๏ผš

ไธบ PlatformViewEmbedder ๅขžๅŠ  Vulkan Impeller ๅฏนๅบ”็š„ๆž„้€ ๅ‡ฝๆ•ฐๅ…ฅๅฃ๏ผŒๆ–ฐๅขžๆž„้€ ๅ…ฅๅฃๅŽ๏ผŒembedder.cc ไธญๅทฒๆœ‰็š„ Vulkan Impeller ้€ป่พ‘ๅฏไปฅๆญฃ็กฎ่ฝๅˆฐ PlatformViewEmbedder๏ผŒๅฎž็ŽฐๅฎŒๆ•ด็š„ Vulkan Impeller ๆŽฅๅ…ฅ้—ญ็Žฏ

Vulkan ๅŽ็ซฏไฟฎๅค Adreno OOM๏ผš่กฅ้ฝ command pool ๅ’Œ descriptor pool ๅคไฝ

้—ฎ้ข˜๏ผš

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
  • ๆ›ดๅฎŒๆ•ด็š„็ปˆ็ซฏ

4.fort Cli

่ฟ™ไธชๆœ€ๅˆๆ˜ฏ็”ฑ 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

5.ๅบ•ๅฑ‚ๅบ“็‹ฌ็ซ‹

  • 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                           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆž„ๅปบ Debug

forc build-app
forc install --app-name aurora_recovery --local-path build
forc launch --app-name aurora_recovery
forc 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-arm64

่ฟ่กŒ

device=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 \
  -v

adb 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages