# Straw Rust core — workspace. # Hosts the JNI/UniFFI-exported library that replaces NewPipeExtractor. # # Builds via cargo-ndk for the four Android ABIs (arm64-v8a, armeabi-v7a, # x86, x86_64). The Mozilla rust-android-gradle plugin wires this into the # strawApp Gradle build so `./gradlew assembleDebug` produces a single APK # with the .so files packed inside. [workspace] resolver = "2" members = ["strawcore"] [workspace.package] edition = "2021" license = "GPL-3.0-or-later" authors = ["Sulkta"] repository = "https://git.sulkta.com/Sulkta-OSS/straw" [profile.release] # Strip debug info, run thin LTO. APK size matters more than build time here. strip = true lto = "thin" codegen-units = 1 # unwind (NOT abort): panic=abort defeats UniFFI's catch_unwind AND tokio's # spawn_blocking JoinError capture, turning ANY panic in the extractor core # (which chews weekly-rotating, attacker-influenced YouTube payloads) into an # instant whole-app SIGABRT. unwind restores both safety nets so a core panic # surfaces as a caught StrawcoreException instead of crashing the app. The # unwind-table size cost is a rounding error against the 4-ABI jniLibs payload. # (straw + FFI-wrapper audits, 2026-07-04.) panic = "unwind" opt-level = "z" # `url` crate for video-id extraction in stream.rs. [workspace.dependencies] url = "2" [profile.dev] # Keep debug builds fast — we rebuild often during NDK cross-compile. opt-level = 0 debug = 1