Compare commits

...
5 Commits
Author SHA1 Message Date
netadmin 55a69c743a add android icon 2026-11-02 22:13:43 +03:00
netadmin f22d954105 a.0.1.0 move to creates src 2026-10-27 22:23:15 +03:00
netadmin 86d3a3b47f a.0.0.9 2026-10-26 20:52:10 +03:00
netadmin 8a95abf18b a.0.0.8 2026-10-25 23:16:47 +03:00
netadmin 552c009120 a.0.0.7 2026-10-25 22:48:38 +03:00
1047 changed files with 270679 additions and 767 deletions

No files matched your search

Generated
+230 -20
View File
@@ -10,7 +10,7 @@ checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 3.0.9",
]
[[package]]
@@ -123,12 +123,28 @@ dependencies = [
"shlex",
]
[[package]]
name = "cesu8"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
[[package]]
name = "cfg-if"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"
[[package]]
name = "combine"
version = "4.6.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4356eba6976435498d05a311ee9fc486da3bc81c200d3f0d7dd9703b41913f92"
dependencies = [
"bytes",
"memchr",
]
[[package]]
name = "cpufeatures"
version = "0.2.17"
@@ -172,7 +188,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 3.0.9",
]
[[package]]
@@ -229,7 +245,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 3.0.9",
]
[[package]]
@@ -517,6 +533,50 @@ version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "jni"
version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
dependencies = [
"cesu8",
"cfg-if",
"combine",
"jni-sys 0.3.1",
"log",
"thiserror",
"walkdir",
"windows-sys 0.45.0",
]
[[package]]
name = "jni-sys"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258"
dependencies = [
"jni-sys 0.4.1",
]
[[package]]
name = "jni-sys"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2"
dependencies = [
"jni-sys-macros",
]
[[package]]
name = "jni-sys-macros"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264"
dependencies = [
"quote",
"syn 2.0.119",
]
[[package]]
name = "js-sys"
version = "0.3.106"
@@ -675,7 +735,20 @@ dependencies = [
]
[[package]]
name = "ramshare_ui"
name = "ramshare-android-jni"
version = "0.4.0"
dependencies = [
"jni",
"parking_lot",
"ramshare-core",
"serde_json",
"tokio",
"tokio-rustls",
"tokio-util",
]
[[package]]
name = "ramshare-core"
version = "0.4.0"
dependencies = [
"axum",
@@ -700,6 +773,18 @@ dependencies = [
"tokio-util",
]
[[package]]
name = "ramshare_ui"
version = "0.4.0"
dependencies = [
"axum",
"ramshare-core",
"serde_json",
"tokio",
"tokio-rustls",
"tokio-util",
]
[[package]]
name = "rcgen"
version = "0.13.2"
@@ -821,6 +906,15 @@ version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
[[package]]
name = "same-file"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
dependencies = [
"winapi-util",
]
[[package]]
name = "scopeguard"
version = "1.2.0"
@@ -854,7 +948,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 3.0.9",
]
[[package]]
@@ -964,6 +1058,17 @@ version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
version = "2.0.119"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "syn"
version = "3.0.9"
@@ -992,7 +1097,27 @@ checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 3.0.9",
]
[[package]]
name = "thiserror"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.119",
]
[[package]]
@@ -1048,7 +1173,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 3.0.9",
]
[[package]]
@@ -1199,6 +1324,16 @@ version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "walkdir"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
dependencies = [
"same-file",
"winapi-util",
]
[[package]]
name = "want"
version = "0.3.2"
@@ -1257,7 +1392,7 @@ dependencies = [
"bumpalo",
"proc-macro2",
"quote",
"syn",
"syn 3.0.9",
"wasm-bindgen-shared",
]
@@ -1293,19 +1428,37 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "winapi-util"
version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
dependencies = [
"windows-sys 0.61.2",
]
[[package]]
name = "windows-link"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
[[package]]
name = "windows-sys"
version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
dependencies = [
"windows-targets 0.42.2",
]
[[package]]
name = "windows-sys"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
"windows-targets",
"windows-targets 0.52.6",
]
[[package]]
@@ -1314,7 +1467,7 @@ version = "0.59.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
dependencies = [
"windows-targets",
"windows-targets 0.52.6",
]
[[package]]
@@ -1326,34 +1479,67 @@ dependencies = [
"windows-link",
]
[[package]]
name = "windows-targets"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
dependencies = [
"windows_aarch64_gnullvm 0.42.2",
"windows_aarch64_msvc 0.42.2",
"windows_i686_gnu 0.42.2",
"windows_i686_msvc 0.42.2",
"windows_x86_64_gnu 0.42.2",
"windows_x86_64_gnullvm 0.42.2",
"windows_x86_64_msvc 0.42.2",
]
[[package]]
name = "windows-targets"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_aarch64_gnullvm 0.52.6",
"windows_aarch64_msvc 0.52.6",
"windows_i686_gnu 0.52.6",
"windows_i686_gnullvm",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
"windows_i686_msvc 0.52.6",
"windows_x86_64_gnu 0.52.6",
"windows_x86_64_gnullvm 0.52.6",
"windows_x86_64_msvc 0.52.6",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
[[package]]
name = "windows_i686_gnu"
version = "0.52.6"
@@ -1366,24 +1552,48 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
[[package]]
name = "windows_i686_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.6"
@@ -1424,7 +1634,7 @@ checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 3.0.9",
"synstructure",
]
@@ -1445,7 +1655,7 @@ checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 3.0.9",
"synstructure",
]
@@ -1485,7 +1695,7 @@ checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 3.0.9",
]
[[package]]
+11 -5
View File
@@ -1,9 +1,16 @@
[package]
name = "ramshare_ui"
[workspace]
members = [
"crates/core",
"crates/desktop",
"crates/android-jni",
]
resolver = "2"
[workspace.package]
version = "0.4.0"
edition = "2021"
[dependencies]
[workspace.dependencies]
tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "fs", "time", "sync", "io-util", "signal"] }
tokio-stream = "0.1"
tokio-util = { version = "0.7", features = ["io"] }
@@ -14,9 +21,8 @@ axum = { version = "0.7" }
hyper = { version = "1", features = ["http1", "server"] }
hyper-util = { version = "0.1", features = ["tokio", "server", "http1", "service"] }
# 0.12.9+: нужен ClientBuilder::read_timeout / tls_info / use_preconfigured_tls
reqwest = { version = "0.12.9", default-features = false, features = ["rustls-tls-no-provider", "stream"] }
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] } # TLS 1.2 не нужен
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] }
rcgen = "0.13"
sha2 = "0.10"
hex = "0.4"
-23
View File
@@ -1,23 +0,0 @@
[package]
name = "ramshare_ui"
version = "0.2.0"
edition = "2021"
[dependencies]
tokio = { version = "1.40", features = ["full"] }
axum = { version = "0.7" }
axum-server = { version = "0.7", features = ["tls-rustls"] }
bytes = "1.7"
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "json"] }
rcgen = "0.13"
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12"] }
sha2 = "0.10"
hex = "0.4"
mdns-sd = "0.11"
local-ip-address = "0.6"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
+232
View File
@@ -0,0 +1,232 @@
# ramshare_ui
Легковесная, автономная утилита для безопасного обмена текстом и файлами внутри локальных сетей (Wi-Fi, точки доступа со смартфонов, офисные LAN, домашние роутеры, VPN/Tailscale `100.64.0.0/10`).
Приложение спроектировано для работы в условиях нестабильного окружения и роуминга устройств (ноутбуки, телефоны, сменяющие IP-адреса при переходе между сетями). Работает как в виде локального веб-интерфейса, так и через полноценный CLI без графической оболочки.
---
## Ключевые особенности
* **Криптографическая безопасность из коробки:**
* Соединения работают строго по **TLS 1.3** с обязательной взаимной аутентификацией (**mTLS**) через самоподписанные сертификаты.
* Пиннинг сертификатов: соединение устанавливается только с известным и явно подтверждённым отпечатком (SHA-256).
* **SAS-коды сверки (Short Authentication String):** 80-битный симметричный верификационный код вида `XXXX-XXXX-XXXX`, вычисляемый из отпечатков обоих узлов, предотвращает атаки типа Man-in-the-Middle (MitM).
* Двусторонняя верификация: передача данных блокируется до тех пор, пока **оба** участника не подтвердят код на своих экранах.
* **Приватность и потоковая передача:**
* **Текст принимается исключительно в ОЗУ** (до 64 КБ на сообщение, кольцевой буфер на 50 записей). При закрытии процесса или нажатии кнопки очистки текст бесследно исчезает.
* **Потоковая передача файлов с backpressure:** чтение и запись производятся чанками с константным потреблением памяти ($O(1)$ RAM), поддерживаются файлы объёмом до 2 ГБ.
* Файлы записываются во временные `.part_*` файлы с атомарным переименованием и очисткой битых передач по таймауту.
* **Адаптивность к смене сетей и роумингу:**
* Автоматическое отслеживание изменений сетевых интерфейсов и актуального IP-адреса без перезапуска.
* Приоритезация IP-адресов: узлы сначала опрашивают адреса из своей текущей `/24` подсети.
* Поддержка частных диапазонов RFC 1918 (`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`), Link-Local (`169.254.0.0/16`) и CGNAT / Carrier VPN (`100.64.0.0/10`).
* **Энергоэффективный опрос (Smart Ping):**
* Если устройство перестаёт отвечать, система делает до **5 попыток** опроса, после чего переводит пир в `offline` и **полностью прекращает фоновый опрос**, экономя заряд батареи и сетевой трафик.
* Опрос возобновляется автоматически при ручном пинге, общем сканировании подсети или если пир сам пришлёт UDP-маяк/данные.
* **Автономное обнаружение:**
* Быстрое обнаружение через UDP-рассылку (порт `5354`) без зависимости от тяжелых сервисов mDNS / Avahi / Bonjour.
* Встроенный многопоточный сканер диапазонов IPv4 (CIDR, списки, диапазоны тире).
* **Интерфейс без внешних зависимостей:**
* Web UI встроен непосредственно в бинарный файл (zero-external-assets, никаких внешних CDN и шрифтов).
* Работает прямо на `[http://127.0.0.1:8080/](http://127.0.0.1:8080/)` без необходимости ввода одноразовых токенов.
* Защита от межсайтовых атак: валидация заголовков `Host` и `Origin` (защита от DNS-rebinding и CSRF), строгие CSP-заголовки.
* Разделение интерфейса на активные устройства и отдельную вкладку со всеми ранее заверенными пирами.
---
## Архитектура сетевого взаимодействия
```
+-------------+ +-------------+
| Node A | | Node B |
+-------------+ +-------------+
| |
| --- 1. UDP Broadcast Beacon (порт 5354) ------------> |
| |
| <--- 2. HTTPS/TLS 1.3 Handshake (mTLS /p2p/info) ---> |
| (Обмен именами, портами и статусом доверия) |
| |
| === 3. Сверка SAS-кода пользователями на экранах === |
| |
| --- 4. Запрос доверия: x-node-trusts: <FP_B> -------> |
| <--- Ответ: trusts_you: true --------------------- |
| |
| [Взаимное доверие установлено (Status: mutual)] |
| |
| --- 5. POST /p2p/text (Только в ОЗУ) ---------------> |
| --- 6. POST /p2p/media (Поток на диск) -------------> |
```
---
## Сборка и установка
Требуется компилятор Rust версии **1.75+** (Cargo).
```bash
# Клонирование репозитория
git clone https://github.com/your-username/ramshare_ui.git
cd ramshare_ui
# Сборка оптимизированного релиза (LTO + Strip)
cargo build --release
# Исполняемый файл появится по пути:
./target/release/ramshare_ui
```
---
## Быстрый старт
### 1. Запуск узла с веб-интерфейсом
Запустите узел на обоих устройствах в сети:
```bash
# Запуск с параметрами по умолчанию (P2P: 8443, UI: 8080)
ramshare_ui serve
# Либо с явным указанием имени узла
ramshare_ui serve --name "Laptop-Work"
```
После старта откройте в браузере: **`[http://127.0.0.1:8080](http://127.0.0.1:8080)`**.
### 2. Запуск в headless-режиме (сервер/терминал)
Если веб-интерфейс не нужен (например, на удалённом сервере или Raspberry Pi):
```bash
ramshare_ui serve --no-ui --name "Home-Server"
```
*Входящие текстовые сообщения будут выводиться прямо в stdout терминала, а принятые файлы сохраняться в папку `received_media/`.*
---
## Использование через CLI
Все операции можно выполнять через консоль без открытия веб-интерфейса.
### Поиск устройств в сети
```bash
# Показать устройства, которые видны прямо сейчас
ramshare_ui peers
# Вывод списка в формате JSON
ramshare_ui peers --json
# Сканирование текущей подсети (например, 192.168.1.1-254)
ramshare_ui scan
# Сканирование произвольного диапазона
ramshare_ui scan 192.168.1.50-100
ramshare_ui scan 10.0.0.0/24
```
### Заверение устройства (Trust)
Для отправки данных устройства должны взаимно подтвердить SAS-код:
```bash
# Заверить по имени, IP или префиксу ID
ramshare_ui trust Laptop
# С ожиданием подтверждения с противоположной стороны (до 60 секунд)
ramshare_ui trust 192.168.1.45 --confirm-wait 60
# Отозвать доверие
ramshare_ui untrust Laptop
```
### Отправка текста и файлов
```bash
# Отправить текст в оперативную память устройства
ramshare_ui send-text Laptop "Привет! Пароль от архива: secret123"
# Передача содержимого через конвейер (stdin)
cat dump.sql | ramshare_ui send-text Laptop -
echo "токен_авторизации" | ramshare_ui send-text 192.168.1.50 -
# Отправка одного или нескольких файлов
ramshare_ui send-file Laptop ./document.pdf ./archive.tar.gz
```
### Просмотр параметров узла
```bash
ramshare_ui config
```
---
## Структура каталогов
По умолчанию приложение хранит данные рядом с бинарным файлом (или в пути, переданном через `--data-dir`):
```text
.
├── ramshare_ui # Исполняемый файл
├── config/ # Каталог конфигурации
│ ├── config.json # Идентичность узла (приватный ключ, сертификат, имя)
│ └── trusted.json # База данных заверенных устройств и их адресов
└── received_media/ # Папка принятых файлов
├── report.pdf
└── 1774500000_a1b2c3_photo.png
```
*Файл `config.json` генерируется автоматически при первом запуске с правами доступа `0600` (Unix).*
---
## Параметры командной строки
| Параметр | По умолчанию | Описание |
| --- | --- | --- |
| `--name <имя>` | Имя хоста ОС | Имя устройства, отображаемое другим пирам в сети |
| `--p2p-port <порт>` | `8443` | Порт для HTTPS / mTLS соединений передачи данных |
| `--ui-port <порт>` | `8080` | Порт веб-интерфейса (привязывается строго к `127.0.0.1`) |
| `--ip <IPv4>` | Авто | Принудительная привязка к конкретному локальному адресу |
| `--data-dir <путь>` | Рядом с бинарником | Базовая папка для каталогов `config/` и `received_media/` |
| `--ping-interval <с>` | `15` | Интервал периодического опроса устройств (от `10` до `30` с) |
| `--no-ui` | `false` | Запуск сервера без поднятия локального веб-сервера |
| `--wait <с>` | `4` | Время прослушивания UDP-маяков при выполнении CLI-команд |
| `--scan <диапазон>` | `None` | Автоматически сканировать указанную сеть, если пир не найден |
| `--confirm-wait <с>` | `0` | Время ожидания подтверждения со второго устройства при `trust` |
| `--json` | `false` | Вывод списков узлов (`peers`, `scan`) в формате JSON |
| `-y, --yes` | `false` | Пропуск интерактивного запроса подтверждения в CLI |
| `-h, --help` | — | Вывод справки по доступным командам |
---
## Безопасность и модель угроз
1. **Защита от прослушивания в открытых сетях:** Весь трафик шифруется TLS 1.3 с современными наборами шифров (AEAD). Провайдер сети или сосед по Wi-Fi не видят передаваемый контент или имена файлов.
2. **Защита от подмены (MitM):** Если злоумышленник пытается перехватить трафик и подменить самоподписанный сертификат на лету, у пользователей **не совпадут SAS-коды сверки**. При несовпадении кодов подтверждать соединение запрещено.
3. **Безопасность Web UI:** Сервер интерфейса слушает только `127.0.0.1`. При попытке внешнего сайта выполнить запрос в локальный браузер (CSRF / DNS-rebinding) запрос отклоняется благодаря проверке заголовков `Origin` и `Host`, а также строгой политике CSP (`frame-ancestors 'none'`, `default-src 'none'`).
4. **Защита файловой системы:** Имена входящих файлов нормализуются с вырезанием управляющих символов и попыток выхода из каталога (`../`). Файлы с исполняемыми расширениями (`.sh`, `.exe`, `.bat` и др.) помечаются в интерфейсе как потенциально опасные и не открываются автоматически.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Whitespace-only changes.
Binary file not shown.
Binary file not shown.
Binary file not shown.
View File
Whitespace-only changes.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
View File
Whitespace-only changes.
@@ -0,0 +1,2 @@
#Mon Oct 26 23:25:03 MSK 2026
gradle.version=8.5
Binary file not shown.
Binary file not shown.
View File
Whitespace-only changes.
+74
View File
@@ -0,0 +1,74 @@
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "com.ramshare.app"
compileSdk = 34
defaultConfig {
applicationId = "com.ramshare.app"
minSdk = 26
targetSdk = 34
versionCode = 5
versionName = "0.5.0"
ndk {
abiFilters += listOf("arm64-v8a")
}
}
sourceSets {
getByName("main") {
jniLibs.srcDirs("src/main/jniLibs")
}
}
lint {
abortOnError = false
checkReleaseBuilds = false
}
buildTypes {
release {
isMinifyEnabled = false
isShrinkResources = false
signingConfig = signingConfigs.getByName("debug")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.10"
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
}
dependencies {
val composeBom = platform("androidx.compose:compose-bom:2024.02.02")
implementation(composeBom)
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
implementation("androidx.activity:activity-compose:1.8.2")
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.material3:material3")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
}
@@ -0,0 +1,6 @@
-keep class androidx.core.app.CoreComponentFactory { <init>(); }
-keep class androidx.core.content.FileProvider { <init>(); }
-keep class androidx.profileinstaller.ProfileInstallReceiver { <init>(); }
-keep class androidx.startup.InitializationProvider { <init>(); }
-keep class com.ramshare.app.MainActivity { <init>(); }
-keep class com.ramshare.app.RamshareService { <init>(); }
@@ -0,0 +1,2 @@
#- File Locator -
listingFile=../../../outputs/apk/release/output-metadata.json
@@ -0,0 +1,2 @@
appMetadataVersion=1.1
androidGradlePluginVersion=8.2.2
@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ramshare.app"
android:versionCode="4"
android:versionName="0.4.0" >
<uses-sdk
android:minSdkVersion="29"
android:targetSdkVersion="34" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<permission
android:name="com.ramshare.app.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"
android:protectionLevel="signature" />
<uses-permission android:name="com.ramshare.app.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION" />
<application
android:allowBackup="false"
android:appComponentFactory="androidx.core.app.CoreComponentFactory"
android:extractNativeLibs="false"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.RamShare"
android:usesCleartextTraffic="true" >
<activity
android:name="com.ramshare.app.MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:exported="true"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name="com.ramshare.app.RamshareService"
android:enabled="true"
android:exported="false"
android:foregroundServiceType="dataSync" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.ramshare.app.fileprovider"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="com.ramshare.app.androidx-startup"
android:exported="false" >
<meta-data
android:name="androidx.emoji2.text.EmojiCompatInitializer"
android:value="androidx.startup" />
<meta-data
android:name="androidx.lifecycle.ProcessLifecycleInitializer"
android:value="androidx.startup" />
<meta-data
android:name="androidx.profileinstaller.ProfileInstallerInitializer"
android:value="androidx.startup" />
</provider>
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:directBootAware="false"
android:enabled="true"
android:exported="true"
android:permission="android.permission.DUMP" >
<intent-filter>
<action android:name="androidx.profileinstaller.action.INSTALL_PROFILE" />
</intent-filter>
<intent-filter>
<action android:name="androidx.profileinstaller.action.SKIP_FILE" />
</intent-filter>
<intent-filter>
<action android:name="androidx.profileinstaller.action.SAVE_PROFILE" />
</intent-filter>
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
</application>
</manifest>
@@ -0,0 +1,10 @@
{
"version": 3,
"artifactType": {
"type": "COMPATIBLE_SCREEN_MANIFEST",
"kind": "Directory"
},
"applicationId": "com.ramshare.app",
"variantName": "release",
"elements": []
}
@@ -0,0 +1,117 @@
# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
#
# Starting with version 2.2 of the Android plugin for Gradle, this file is distributed together with
# the plugin and unpacked at build-time. The files in $ANDROID_HOME are no longer maintained and
# will be ignored by new version of the Android plugin for Gradle.
# Optimizations: If you don't want to optimize, use the proguard-android.txt configuration file
# instead of this one, which turns off the optimization flags.
# Adding optimization introduces certain risks, since for example not all optimizations performed by
# ProGuard works on all versions of Dalvik. The following flags turn off various optimizations
# known to have issues, but the list may not be complete or up to date. (The "arithmetic"
# optimization can be used if you are only targeting Android 2.0 or later.) Make sure you test
# thoroughly if you go this route.
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-allowaccessmodification
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
# Preserve some attributes that may be required for reflection.
-keepattributes AnnotationDefault,
EnclosingMethod,
InnerClasses,
RuntimeVisibleAnnotations,
RuntimeVisibleParameterAnnotations,
RuntimeVisibleTypeAnnotations,
Signature
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
-keep public class com.google.android.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService
-dontnote com.google.vending.licensing.ILicensingService
-dontnote com.google.android.vending.licensing.ILicensingService
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# Keep setters in Views so that animations can still work.
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
# We want to keep methods in Activity that could be used in the XML attribute onClick.
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final ** CREATOR;
}
# Preserve annotated Javascript interface methods.
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# The support libraries contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontnote android.support.**
-dontnote androidx.**
-dontwarn android.support.**
-dontwarn androidx.**
# This class is deprecated, but remains for backward compatibility.
-dontwarn android.util.FloatMath
# Understand the @Keep support annotation.
-keep class android.support.annotation.Keep
-keep class androidx.annotation.Keep
-keep @android.support.annotation.Keep class * {*;}
-keep @androidx.annotation.Keep class * {*;}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@androidx.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@androidx.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <init>(...);
}
-keepclasseswithmembers class * {
@androidx.annotation.Keep <init>(...);
}
# These classes are duplicated between android.jar and org.apache.http.legacy.jar.
-dontnote org.apache.http.**
-dontnote android.net.http.**
# These classes are duplicated between android.jar and core-lambda-stubs.jar.
-dontnote java.lang.invoke.**
@@ -0,0 +1,116 @@
# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
#
# Starting with version 2.2 of the Android plugin for Gradle, this file is distributed together with
# the plugin and unpacked at build-time. The files in $ANDROID_HOME are no longer maintained and
# will be ignored by new version of the Android plugin for Gradle.
# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize steps (and performs some
# of these optimizations on its own).
# Note that if you want to enable optimization, you cannot just
# include optimization flags in your own project configuration file;
# instead you will need to point to the
# "proguard-android-optimize.txt" file instead of this one from your
# project.properties file.
-dontoptimize
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
# Preserve some attributes that may be required for reflection.
-keepattributes AnnotationDefault,
EnclosingMethod,
InnerClasses,
RuntimeVisibleAnnotations,
RuntimeVisibleParameterAnnotations,
RuntimeVisibleTypeAnnotations,
Signature
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
-keep public class com.google.android.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService
-dontnote com.google.vending.licensing.ILicensingService
-dontnote com.google.android.vending.licensing.ILicensingService
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# Keep setters in Views so that animations can still work.
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
# We want to keep methods in Activity that could be used in the XML attribute onClick.
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final ** CREATOR;
}
# Preserve annotated Javascript interface methods.
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# The support libraries contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontnote android.support.**
-dontnote androidx.**
-dontwarn android.support.**
-dontwarn androidx.**
# This class is deprecated, but remains for backward compatibility.
-dontwarn android.util.FloatMath
# Understand the @Keep support annotation.
-keep class android.support.annotation.Keep
-keep class androidx.annotation.Keep
-keep @android.support.annotation.Keep class * {*;}
-keep @androidx.annotation.Keep class * {*;}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@androidx.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@androidx.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <init>(...);
}
-keepclasseswithmembers class * {
@androidx.annotation.Keep <init>(...);
}
# These classes are duplicated between android.jar and org.apache.http.legacy.jar.
-dontnote org.apache.http.**
-dontnote android.net.http.**
# These classes are duplicated between android.jar and core-lambda-stubs.jar.
-dontnote java.lang.invoke.**
@@ -0,0 +1,117 @@
# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
#
# Starting with version 2.2 of the Android plugin for Gradle, this file is distributed together with
# the plugin and unpacked at build-time. The files in $ANDROID_HOME are no longer maintained and
# will be ignored by new version of the Android plugin for Gradle.
# Optimizations can be turned on and off in the 'postProcessing' DSL block.
# The configuration below is applied if optimizations are enabled.
# Adding optimization introduces certain risks, since for example not all optimizations performed by
# ProGuard works on all versions of Dalvik. The following flags turn off various optimizations
# known to have issues, but the list may not be complete or up to date. (The "arithmetic"
# optimization can be used if you are only targeting Android 2.0 or later.) Make sure you test
# thoroughly if you go this route.
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-allowaccessmodification
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
# Preserve some attributes that may be required for reflection.
-keepattributes AnnotationDefault,
EnclosingMethod,
InnerClasses,
RuntimeVisibleAnnotations,
RuntimeVisibleParameterAnnotations,
RuntimeVisibleTypeAnnotations,
Signature
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
-keep public class com.google.android.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService
-dontnote com.google.vending.licensing.ILicensingService
-dontnote com.google.android.vending.licensing.ILicensingService
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# Keep setters in Views so that animations can still work.
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
# We want to keep methods in Activity that could be used in the XML attribute onClick.
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final ** CREATOR;
}
# Preserve annotated Javascript interface methods.
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# The support libraries contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontnote android.support.**
-dontnote androidx.**
-dontwarn android.support.**
-dontwarn androidx.**
# This class is deprecated, but remains for backward compatibility.
-dontwarn android.util.FloatMath
# Understand the @Keep support annotation.
-keep class android.support.annotation.Keep
-keep class androidx.annotation.Keep
-keep @android.support.annotation.Keep class * {*;}
-keep @androidx.annotation.Keep class * {*;}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@androidx.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@androidx.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <init>(...);
}
-keepclasseswithmembers class * {
@androidx.annotation.Keep <init>(...);
}
# These classes are duplicated between android.jar and org.apache.http.legacy.jar.
-dontnote org.apache.http.**
-dontnote android.net.http.**
# These classes are duplicated between android.jar and core-lambda-stubs.jar.
-dontnote java.lang.invoke.**
@@ -0,0 +1,18 @@
<lint-module
format="1"
dir="/home/xuser/Projects/rust/fileshare/android/app"
name=":app"
type="APP"
maven="RamShare:app:"
agpVersion="8.2.2"
buildFolder="build"
bootClassPath="/home/xuser/Android/Sdk/platforms/android-34/android.jar:/home/xuser/Android/Sdk/build-tools/34.0.0/core-lambda-stubs.jar"
javaSourceLevel="17"
compileTarget="android-34">
<lintOptions
abortOnError="true"
absolutePaths="true"
checkReleaseBuilds="true"
explainIssues="true"/>
<variant name="release"/>
</lint-module>
@@ -0,0 +1,287 @@
<dependencies>
<compile
roots="androidx.activity:activity:1.8.2@aar,androidx.activity:activity-compose:1.8.2@aar,androidx.activity:activity-ktx:1.8.2@aar,androidx.lifecycle:lifecycle-livedata-core:2.7.0@aar,androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0@aar,androidx.lifecycle:lifecycle-viewmodel:2.7.0@aar,androidx.lifecycle:lifecycle-runtime-ktx:2.7.0@aar,androidx.core:core:1.12.0@aar,androidx.lifecycle:lifecycle-runtime:2.7.0@aar,androidx.lifecycle:lifecycle-common:2.7.0@jar,androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0@aar,androidx.core:core-ktx:1.12.0@aar,androidx.compose.material3:material3-android:1.2.1@aar,androidx.compose.ui:ui-util-android:1.6.3@aar,androidx.compose.ui:ui-unit-android:1.6.3@aar,androidx.compose.ui:ui-text-android:1.6.3@aar,androidx.compose.ui:ui-graphics-android:1.6.3@aar,androidx.compose.foundation:foundation-layout-android:1.6.3@aar,androidx.compose.material:material-icons-core-android:1.6.3@aar,androidx.compose.material:material-ripple-android:1.6.3@aar,androidx.compose.foundation:foundation-android:1.6.3@aar,androidx.compose.animation:animation-core-android:1.6.3@aar,androidx.compose.animation:animation-android:1.6.3@aar,androidx.compose.ui:ui-geometry-android:1.6.3@aar,androidx.compose.ui:ui-android:1.6.3@aar,androidx.compose.runtime:runtime-saveable-android:1.6.3@aar,androidx.compose.runtime:runtime-android:1.6.3@aar,org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3@jar,org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3@jar,org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20@jar,androidx.versionedparcelable:versionedparcelable:1.1.1@aar,androidx.arch.core:core-common:2.2.0@jar,androidx.savedstate:savedstate-ktx:1.2.1@aar,androidx.savedstate:savedstate:1.2.1@aar,androidx.collection:collection-jvm:1.4.0@jar,androidx.annotation:annotation-jvm:1.7.0@jar,androidx.annotation:annotation-experimental:1.4.0@aar,org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20@jar,org.jetbrains.kotlin:kotlin-stdlib:1.9.22@jar,org.jetbrains:annotations:23.0.0@jar">
<dependency
name="androidx.activity:activity:1.8.2@aar"
simpleName="androidx.activity:activity"/>
<dependency
name="androidx.activity:activity-compose:1.8.2@aar"
simpleName="androidx.activity:activity-compose"/>
<dependency
name="androidx.activity:activity-ktx:1.8.2@aar"
simpleName="androidx.activity:activity-ktx"/>
<dependency
name="androidx.lifecycle:lifecycle-livedata-core:2.7.0@aar"
simpleName="androidx.lifecycle:lifecycle-livedata-core"/>
<dependency
name="androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0@aar"
simpleName="androidx.lifecycle:lifecycle-viewmodel-ktx"/>
<dependency
name="androidx.lifecycle:lifecycle-viewmodel:2.7.0@aar"
simpleName="androidx.lifecycle:lifecycle-viewmodel"/>
<dependency
name="androidx.lifecycle:lifecycle-runtime-ktx:2.7.0@aar"
simpleName="androidx.lifecycle:lifecycle-runtime-ktx"/>
<dependency
name="androidx.core:core:1.12.0@aar"
simpleName="androidx.core:core"/>
<dependency
name="androidx.lifecycle:lifecycle-runtime:2.7.0@aar"
simpleName="androidx.lifecycle:lifecycle-runtime"/>
<dependency
name="androidx.lifecycle:lifecycle-common:2.7.0@jar"
simpleName="androidx.lifecycle:lifecycle-common"/>
<dependency
name="androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0@aar"
simpleName="androidx.lifecycle:lifecycle-viewmodel-savedstate"/>
<dependency
name="androidx.core:core-ktx:1.12.0@aar"
simpleName="androidx.core:core-ktx"/>
<dependency
name="androidx.compose.material3:material3-android:1.2.1@aar"
simpleName="androidx.compose.material3:material3-android"/>
<dependency
name="androidx.compose.ui:ui-util-android:1.6.3@aar"
simpleName="androidx.compose.ui:ui-util-android"/>
<dependency
name="androidx.compose.ui:ui-unit-android:1.6.3@aar"
simpleName="androidx.compose.ui:ui-unit-android"/>
<dependency
name="androidx.compose.ui:ui-text-android:1.6.3@aar"
simpleName="androidx.compose.ui:ui-text-android"/>
<dependency
name="androidx.compose.ui:ui-graphics-android:1.6.3@aar"
simpleName="androidx.compose.ui:ui-graphics-android"/>
<dependency
name="androidx.compose.foundation:foundation-layout-android:1.6.3@aar"
simpleName="androidx.compose.foundation:foundation-layout-android"/>
<dependency
name="androidx.compose.material:material-icons-core-android:1.6.3@aar"
simpleName="androidx.compose.material:material-icons-core-android"/>
<dependency
name="androidx.compose.material:material-ripple-android:1.6.3@aar"
simpleName="androidx.compose.material:material-ripple-android"/>
<dependency
name="androidx.compose.foundation:foundation-android:1.6.3@aar"
simpleName="androidx.compose.foundation:foundation-android"/>
<dependency
name="androidx.compose.animation:animation-core-android:1.6.3@aar"
simpleName="androidx.compose.animation:animation-core-android"/>
<dependency
name="androidx.compose.animation:animation-android:1.6.3@aar"
simpleName="androidx.compose.animation:animation-android"/>
<dependency
name="androidx.compose.ui:ui-geometry-android:1.6.3@aar"
simpleName="androidx.compose.ui:ui-geometry-android"/>
<dependency
name="androidx.compose.ui:ui-android:1.6.3@aar"
simpleName="androidx.compose.ui:ui-android"/>
<dependency
name="androidx.compose.runtime:runtime-saveable-android:1.6.3@aar"
simpleName="androidx.compose.runtime:runtime-saveable-android"/>
<dependency
name="androidx.compose.runtime:runtime-android:1.6.3@aar"
simpleName="androidx.compose.runtime:runtime-android"/>
<dependency
name="org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3@jar"
simpleName="org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm"/>
<dependency
name="org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3@jar"
simpleName="org.jetbrains.kotlinx:kotlinx-coroutines-android"/>
<dependency
name="org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20@jar"
simpleName="org.jetbrains.kotlin:kotlin-stdlib-jdk8"/>
<dependency
name="androidx.versionedparcelable:versionedparcelable:1.1.1@aar"
simpleName="androidx.versionedparcelable:versionedparcelable"/>
<dependency
name="androidx.arch.core:core-common:2.2.0@jar"
simpleName="androidx.arch.core:core-common"/>
<dependency
name="androidx.savedstate:savedstate-ktx:1.2.1@aar"
simpleName="androidx.savedstate:savedstate-ktx"/>
<dependency
name="androidx.savedstate:savedstate:1.2.1@aar"
simpleName="androidx.savedstate:savedstate"/>
<dependency
name="androidx.collection:collection-jvm:1.4.0@jar"
simpleName="androidx.collection:collection-jvm"/>
<dependency
name="androidx.annotation:annotation-jvm:1.7.0@jar"
simpleName="androidx.annotation:annotation-jvm"/>
<dependency
name="androidx.annotation:annotation-experimental:1.4.0@aar"
simpleName="androidx.annotation:annotation-experimental"/>
<dependency
name="org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20@jar"
simpleName="org.jetbrains.kotlin:kotlin-stdlib-jdk7"/>
<dependency
name="org.jetbrains.kotlin:kotlin-stdlib:1.9.22@jar"
simpleName="org.jetbrains.kotlin:kotlin-stdlib"/>
<dependency
name="org.jetbrains:annotations:23.0.0@jar"
simpleName="org.jetbrains:annotations"/>
</compile>
<package
roots="androidx.activity:activity:1.8.2@aar,androidx.activity:activity-ktx:1.8.2@aar,androidx.compose.material3:material3-android:1.2.1@aar,androidx.activity:activity-compose:1.8.2@aar,androidx.compose.material:material-icons-core-android:1.6.3@aar,androidx.compose.material:material-ripple-android:1.6.3@aar,androidx.compose.foundation:foundation-android:1.6.3@aar,androidx.compose.animation:animation-android:1.6.3@aar,androidx.compose.foundation:foundation-layout-android:1.6.3@aar,androidx.compose.animation:animation-core-android:1.6.3@aar,androidx.compose.ui:ui-unit-android:1.6.3@aar,androidx.compose.ui:ui-geometry-android:1.6.3@aar,androidx.compose.ui:ui-util-android:1.6.3@aar,androidx.compose.ui:ui-text-android:1.6.3@aar,androidx.compose.ui:ui-graphics-android:1.6.3@aar,androidx.compose.ui:ui-android:1.6.3@aar,androidx.autofill:autofill:1.0.0@aar,androidx.emoji2:emoji2:1.3.0@aar,androidx.core:core:1.12.0@aar,androidx.core:core:1.12.0@aar,androidx.customview:customview-poolingcontainer:1.0.0@aar,androidx.lifecycle:lifecycle-process:2.7.0@aar,androidx.lifecycle:lifecycle-livedata-core:2.7.0@aar,androidx.lifecycle:lifecycle-common-java8:2.7.0@jar,androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0@aar,androidx.lifecycle:lifecycle-viewmodel:2.7.0@aar,androidx.lifecycle:lifecycle-runtime-ktx:2.7.0@aar,androidx.lifecycle:lifecycle-runtime:2.7.0@aar,androidx.savedstate:savedstate-ktx:1.2.1@aar,androidx.savedstate:savedstate:1.2.1@aar,androidx.lifecycle:lifecycle-common:2.7.0@jar,androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0@aar,androidx.core:core-ktx:1.12.0@aar,androidx.compose.runtime:runtime-saveable-android:1.6.3@aar,androidx.compose.runtime:runtime-android:1.6.3@aar,org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3@jar,org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3@jar,org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20@jar,androidx.annotation:annotation-experimental:1.4.0@aar,org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20@jar,androidx.versionedparcelable:versionedparcelable:1.1.1@aar,androidx.collection:collection-ktx:1.4.0@jar,androidx.collection:collection-jvm:1.4.0@jar,androidx.interpolator:interpolator:1.0.0@aar,androidx.arch.core:core-runtime:2.2.0@aar,androidx.arch.core:core-common:2.2.0@jar,androidx.profileinstaller:profileinstaller:1.3.0@aar,androidx.concurrent:concurrent-futures:1.1.0@jar,androidx.startup:startup-runtime:1.1.1@aar,androidx.tracing:tracing:1.0.0@aar,androidx.annotation:annotation-jvm:1.7.0@jar,org.jetbrains.kotlin:kotlin-stdlib:1.9.22@jar,org.jetbrains:annotations:23.0.0@jar,com.google.guava:listenablefuture:1.0@jar">
<dependency
name="androidx.activity:activity:1.8.2@aar"
simpleName="androidx.activity:activity"/>
<dependency
name="androidx.activity:activity-ktx:1.8.2@aar"
simpleName="androidx.activity:activity-ktx"/>
<dependency
name="androidx.compose.material3:material3-android:1.2.1@aar"
simpleName="androidx.compose.material3:material3-android"/>
<dependency
name="androidx.activity:activity-compose:1.8.2@aar"
simpleName="androidx.activity:activity-compose"/>
<dependency
name="androidx.compose.material:material-icons-core-android:1.6.3@aar"
simpleName="androidx.compose.material:material-icons-core-android"/>
<dependency
name="androidx.compose.material:material-ripple-android:1.6.3@aar"
simpleName="androidx.compose.material:material-ripple-android"/>
<dependency
name="androidx.compose.foundation:foundation-android:1.6.3@aar"
simpleName="androidx.compose.foundation:foundation-android"/>
<dependency
name="androidx.compose.animation:animation-android:1.6.3@aar"
simpleName="androidx.compose.animation:animation-android"/>
<dependency
name="androidx.compose.foundation:foundation-layout-android:1.6.3@aar"
simpleName="androidx.compose.foundation:foundation-layout-android"/>
<dependency
name="androidx.compose.animation:animation-core-android:1.6.3@aar"
simpleName="androidx.compose.animation:animation-core-android"/>
<dependency
name="androidx.compose.ui:ui-unit-android:1.6.3@aar"
simpleName="androidx.compose.ui:ui-unit-android"/>
<dependency
name="androidx.compose.ui:ui-geometry-android:1.6.3@aar"
simpleName="androidx.compose.ui:ui-geometry-android"/>
<dependency
name="androidx.compose.ui:ui-util-android:1.6.3@aar"
simpleName="androidx.compose.ui:ui-util-android"/>
<dependency
name="androidx.compose.ui:ui-text-android:1.6.3@aar"
simpleName="androidx.compose.ui:ui-text-android"/>
<dependency
name="androidx.compose.ui:ui-graphics-android:1.6.3@aar"
simpleName="androidx.compose.ui:ui-graphics-android"/>
<dependency
name="androidx.compose.ui:ui-android:1.6.3@aar"
simpleName="androidx.compose.ui:ui-android"/>
<dependency
name="androidx.autofill:autofill:1.0.0@aar"
simpleName="androidx.autofill:autofill"/>
<dependency
name="androidx.emoji2:emoji2:1.3.0@aar"
simpleName="androidx.emoji2:emoji2"/>
<dependency
name="androidx.core:core:1.12.0@aar"
simpleName="androidx.core:core"/>
<dependency
name="androidx.customview:customview-poolingcontainer:1.0.0@aar"
simpleName="androidx.customview:customview-poolingcontainer"/>
<dependency
name="androidx.lifecycle:lifecycle-process:2.7.0@aar"
simpleName="androidx.lifecycle:lifecycle-process"/>
<dependency
name="androidx.lifecycle:lifecycle-livedata-core:2.7.0@aar"
simpleName="androidx.lifecycle:lifecycle-livedata-core"/>
<dependency
name="androidx.lifecycle:lifecycle-common-java8:2.7.0@jar"
simpleName="androidx.lifecycle:lifecycle-common-java8"/>
<dependency
name="androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0@aar"
simpleName="androidx.lifecycle:lifecycle-viewmodel-ktx"/>
<dependency
name="androidx.lifecycle:lifecycle-viewmodel:2.7.0@aar"
simpleName="androidx.lifecycle:lifecycle-viewmodel"/>
<dependency
name="androidx.lifecycle:lifecycle-runtime-ktx:2.7.0@aar"
simpleName="androidx.lifecycle:lifecycle-runtime-ktx"/>
<dependency
name="androidx.lifecycle:lifecycle-runtime:2.7.0@aar"
simpleName="androidx.lifecycle:lifecycle-runtime"/>
<dependency
name="androidx.savedstate:savedstate-ktx:1.2.1@aar"
simpleName="androidx.savedstate:savedstate-ktx"/>
<dependency
name="androidx.savedstate:savedstate:1.2.1@aar"
simpleName="androidx.savedstate:savedstate"/>
<dependency
name="androidx.lifecycle:lifecycle-common:2.7.0@jar"
simpleName="androidx.lifecycle:lifecycle-common"/>
<dependency
name="androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0@aar"
simpleName="androidx.lifecycle:lifecycle-viewmodel-savedstate"/>
<dependency
name="androidx.core:core-ktx:1.12.0@aar"
simpleName="androidx.core:core-ktx"/>
<dependency
name="androidx.compose.runtime:runtime-saveable-android:1.6.3@aar"
simpleName="androidx.compose.runtime:runtime-saveable-android"/>
<dependency
name="androidx.compose.runtime:runtime-android:1.6.3@aar"
simpleName="androidx.compose.runtime:runtime-android"/>
<dependency
name="org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3@jar"
simpleName="org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm"/>
<dependency
name="org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3@jar"
simpleName="org.jetbrains.kotlinx:kotlinx-coroutines-android"/>
<dependency
name="org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20@jar"
simpleName="org.jetbrains.kotlin:kotlin-stdlib-jdk8"/>
<dependency
name="androidx.annotation:annotation-experimental:1.4.0@aar"
simpleName="androidx.annotation:annotation-experimental"/>
<dependency
name="org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20@jar"
simpleName="org.jetbrains.kotlin:kotlin-stdlib-jdk7"/>
<dependency
name="androidx.versionedparcelable:versionedparcelable:1.1.1@aar"
simpleName="androidx.versionedparcelable:versionedparcelable"/>
<dependency
name="androidx.collection:collection-ktx:1.4.0@jar"
simpleName="androidx.collection:collection-ktx"/>
<dependency
name="androidx.collection:collection-jvm:1.4.0@jar"
simpleName="androidx.collection:collection-jvm"/>
<dependency
name="androidx.interpolator:interpolator:1.0.0@aar"
simpleName="androidx.interpolator:interpolator"/>
<dependency
name="androidx.arch.core:core-runtime:2.2.0@aar"
simpleName="androidx.arch.core:core-runtime"/>
<dependency
name="androidx.arch.core:core-common:2.2.0@jar"
simpleName="androidx.arch.core:core-common"/>
<dependency
name="androidx.profileinstaller:profileinstaller:1.3.0@aar"
simpleName="androidx.profileinstaller:profileinstaller"/>
<dependency
name="androidx.concurrent:concurrent-futures:1.1.0@jar"
simpleName="androidx.concurrent:concurrent-futures"/>
<dependency
name="androidx.startup:startup-runtime:1.1.1@aar"
simpleName="androidx.startup:startup-runtime"/>
<dependency
name="androidx.tracing:tracing:1.0.0@aar"
simpleName="androidx.tracing:tracing"/>
<dependency
name="androidx.annotation:annotation-jvm:1.7.0@jar"
simpleName="androidx.annotation:annotation-jvm"/>
<dependency
name="org.jetbrains.kotlin:kotlin-stdlib:1.9.22@jar"
simpleName="org.jetbrains.kotlin:kotlin-stdlib"/>
<dependency
name="org.jetbrains:annotations:23.0.0@jar"
simpleName="org.jetbrains:annotations"/>
<dependency
name="com.google.guava:listenablefuture:1.0@jar"
simpleName="com.google.guava:listenablefuture"/>
</package>
</dependencies>
@@ -0,0 +1,565 @@
<libraries>
<library
name="androidx.activity:activity:1.8.2@aar"
jars="/home/xuser/.gradle/caches/transforms-3/15683ba0f4e359741be3d1ac6ec01816/transformed/activity-1.8.2/jars/classes.jar"
resolved="androidx.activity:activity:1.8.2"
folder="/home/xuser/.gradle/caches/transforms-3/15683ba0f4e359741be3d1ac6ec01816/transformed/activity-1.8.2"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.activity:activity-compose:1.8.2@aar"
jars="/home/xuser/.gradle/caches/transforms-3/32b40584c1c897379325d96151333602/transformed/activity-compose-1.8.2/jars/classes.jar"
resolved="androidx.activity:activity-compose:1.8.2"
folder="/home/xuser/.gradle/caches/transforms-3/32b40584c1c897379325d96151333602/transformed/activity-compose-1.8.2"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.activity:activity-ktx:1.8.2@aar"
jars="/home/xuser/.gradle/caches/transforms-3/46b1e779e36541f6b63e5a9150272094/transformed/activity-ktx-1.8.2/jars/classes.jar"
resolved="androidx.activity:activity-ktx:1.8.2"
folder="/home/xuser/.gradle/caches/transforms-3/46b1e779e36541f6b63e5a9150272094/transformed/activity-ktx-1.8.2"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.lifecycle:lifecycle-livedata-core:2.7.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/858f42a16ccff625a3fdc18f55864700/transformed/lifecycle-livedata-core-2.7.0/jars/classes.jar"
resolved="androidx.lifecycle:lifecycle-livedata-core:2.7.0"
folder="/home/xuser/.gradle/caches/transforms-3/858f42a16ccff625a3fdc18f55864700/transformed/lifecycle-livedata-core-2.7.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/99a0ceda7a5b31e43675d93bb3cc711b/transformed/lifecycle-viewmodel-ktx-2.7.0/jars/classes.jar"
resolved="androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0"
folder="/home/xuser/.gradle/caches/transforms-3/99a0ceda7a5b31e43675d93bb3cc711b/transformed/lifecycle-viewmodel-ktx-2.7.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.lifecycle:lifecycle-viewmodel:2.7.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/3d04aff4df0f768f379e34d5f0b314db/transformed/lifecycle-viewmodel-2.7.0/jars/classes.jar"
resolved="androidx.lifecycle:lifecycle-viewmodel:2.7.0"
folder="/home/xuser/.gradle/caches/transforms-3/3d04aff4df0f768f379e34d5f0b314db/transformed/lifecycle-viewmodel-2.7.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.lifecycle:lifecycle-runtime-ktx:2.7.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/e988d893da54918c8afc17e2c51734b4/transformed/lifecycle-runtime-ktx-2.7.0/jars/classes.jar"
resolved="androidx.lifecycle:lifecycle-runtime-ktx:2.7.0"
folder="/home/xuser/.gradle/caches/transforms-3/e988d893da54918c8afc17e2c51734b4/transformed/lifecycle-runtime-ktx-2.7.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.core:core:1.12.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/440a64c1659b3784956be1ef27019da1/transformed/core-1.12.0/jars/classes.jar"
resolved="androidx.core:core:1.12.0"
folder="/home/xuser/.gradle/caches/transforms-3/440a64c1659b3784956be1ef27019da1/transformed/core-1.12.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.lifecycle:lifecycle-runtime:2.7.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/c0811ff559e841342aebad900e726f1e/transformed/lifecycle-runtime-2.7.0/jars/classes.jar"
resolved="androidx.lifecycle:lifecycle-runtime:2.7.0"
folder="/home/xuser/.gradle/caches/transforms-3/c0811ff559e841342aebad900e726f1e/transformed/lifecycle-runtime-2.7.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.lifecycle:lifecycle-common:2.7.0@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-common/2.7.0/85334205d65cca70ed0109c3acbd29e22a2d9cb1/lifecycle-common-2.7.0.jar"
resolved="androidx.lifecycle:lifecycle-common:2.7.0"/>
<library
name="androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/aca27ab5518a0c1fb21b10cba587b1e9/transformed/lifecycle-viewmodel-savedstate-2.7.0/jars/classes.jar"
resolved="androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0"
folder="/home/xuser/.gradle/caches/transforms-3/aca27ab5518a0c1fb21b10cba587b1e9/transformed/lifecycle-viewmodel-savedstate-2.7.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.core:core-ktx:1.12.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/760c49e260287e65438a700d022f8c6b/transformed/core-ktx-1.12.0/jars/classes.jar"
resolved="androidx.core:core-ktx:1.12.0"
folder="/home/xuser/.gradle/caches/transforms-3/760c49e260287e65438a700d022f8c6b/transformed/core-ktx-1.12.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.material3:material3-android:1.2.1@aar"
jars="/home/xuser/.gradle/caches/transforms-3/0cdddda37359c8b723cadbd3d1c70e1d/transformed/material3-release/jars/classes.jar"
resolved="androidx.compose.material3:material3-android:1.2.1"
folder="/home/xuser/.gradle/caches/transforms-3/0cdddda37359c8b723cadbd3d1c70e1d/transformed/material3-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.ui:ui-util-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/9584b36d008b3a8705d72de652168f0b/transformed/ui-util-release/jars/classes.jar"
resolved="androidx.compose.ui:ui-util-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/9584b36d008b3a8705d72de652168f0b/transformed/ui-util-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.ui:ui-unit-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/71157aaae7a56ef7c40489901eae7564/transformed/ui-unit-release/jars/classes.jar"
resolved="androidx.compose.ui:ui-unit-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/71157aaae7a56ef7c40489901eae7564/transformed/ui-unit-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.ui:ui-text-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/aede77a64633191f8f75cfa5b01f1c91/transformed/ui-text-release/jars/classes.jar"
resolved="androidx.compose.ui:ui-text-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/aede77a64633191f8f75cfa5b01f1c91/transformed/ui-text-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.ui:ui-graphics-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/fa0c9e185a3a487e45b239547f13b2e4/transformed/ui-graphics-release/jars/classes.jar"
resolved="androidx.compose.ui:ui-graphics-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/fa0c9e185a3a487e45b239547f13b2e4/transformed/ui-graphics-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.foundation:foundation-layout-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/8caa6fa3d8017790e6b9b46d62382f95/transformed/foundation-layout-release/jars/classes.jar"
resolved="androidx.compose.foundation:foundation-layout-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/8caa6fa3d8017790e6b9b46d62382f95/transformed/foundation-layout-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.material:material-icons-core-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/2412de1521026c012484eceda3a40c23/transformed/material-icons-core-release/jars/classes.jar"
resolved="androidx.compose.material:material-icons-core-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/2412de1521026c012484eceda3a40c23/transformed/material-icons-core-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.material:material-ripple-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/3226ff1fec4aa771894bb205517fb5a2/transformed/material-ripple-release/jars/classes.jar"
resolved="androidx.compose.material:material-ripple-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/3226ff1fec4aa771894bb205517fb5a2/transformed/material-ripple-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.foundation:foundation-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/0456fb6ed6a9f65b690f7ec19420bf84/transformed/foundation-release/jars/classes.jar"
resolved="androidx.compose.foundation:foundation-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/0456fb6ed6a9f65b690f7ec19420bf84/transformed/foundation-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.animation:animation-core-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/8c2ae47b6f9bf69f0d9a26d6f66a7bd1/transformed/animation-core-release/jars/classes.jar"
resolved="androidx.compose.animation:animation-core-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/8c2ae47b6f9bf69f0d9a26d6f66a7bd1/transformed/animation-core-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.animation:animation-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/b45a2c0ca76feafe3dc94bd3696e92dd/transformed/animation-release/jars/classes.jar"
resolved="androidx.compose.animation:animation-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/b45a2c0ca76feafe3dc94bd3696e92dd/transformed/animation-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.ui:ui-geometry-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/d5dcf9d9af18c9bbbf83eeb3a3c8a49f/transformed/ui-geometry-release/jars/classes.jar"
resolved="androidx.compose.ui:ui-geometry-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/d5dcf9d9af18c9bbbf83eeb3a3c8a49f/transformed/ui-geometry-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.ui:ui-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/165148a5632eca232c7755e5d0d74563/transformed/ui-release/jars/classes.jar"
resolved="androidx.compose.ui:ui-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/165148a5632eca232c7755e5d0d74563/transformed/ui-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.runtime:runtime-saveable-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/2bd831ff237d218f44732f400530dfb4/transformed/runtime-saveable-release/jars/classes.jar"
resolved="androidx.compose.runtime:runtime-saveable-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/2bd831ff237d218f44732f400530dfb4/transformed/runtime-saveable-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.compose.runtime:runtime-android:1.6.3@aar"
jars="/home/xuser/.gradle/caches/transforms-3/bdb73c5007ed74f0c3f0ff3edd27ccd9/transformed/runtime-release/jars/classes.jar"
resolved="androidx.compose.runtime:runtime-android:1.6.3"
folder="/home/xuser/.gradle/caches/transforms-3/bdb73c5007ed74f0c3f0ff3edd27ccd9/transformed/runtime-release"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core-jvm/1.7.3/2b09627576f0989a436a00a4a54b55fa5026fb86/kotlinx-coroutines-core-jvm-1.7.3.jar"
resolved="org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3"/>
<library
name="org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-android/1.7.3/38d9cad3a0b03a10453b56577984bdeb48edeed5/kotlinx-coroutines-android-1.7.3.jar"
resolved="org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3"/>
<library
name="org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.8.20/73576ddf378c5b4f1f6b449fe6b119b8183fc078/kotlin-stdlib-jdk8-1.8.20.jar"
resolved="org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20"/>
<library
name="androidx.versionedparcelable:versionedparcelable:1.1.1@aar"
jars="/home/xuser/.gradle/caches/transforms-3/a80f11189515b49da8eeba05c8021fb4/transformed/versionedparcelable-1.1.1/jars/classes.jar"
resolved="androidx.versionedparcelable:versionedparcelable:1.1.1"
folder="/home/xuser/.gradle/caches/transforms-3/a80f11189515b49da8eeba05c8021fb4/transformed/versionedparcelable-1.1.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.arch.core:core-common:2.2.0@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/androidx.arch.core/core-common/2.2.0/5e1b8b81dfd5f52c56a8d53b18ca759c19a301f3/core-common-2.2.0.jar"
resolved="androidx.arch.core:core-common:2.2.0"/>
<library
name="androidx.savedstate:savedstate-ktx:1.2.1@aar"
jars="/home/xuser/.gradle/caches/transforms-3/feafe4506e00f055cc53add47b9260a0/transformed/savedstate-ktx-1.2.1/jars/classes.jar"
resolved="androidx.savedstate:savedstate-ktx:1.2.1"
folder="/home/xuser/.gradle/caches/transforms-3/feafe4506e00f055cc53add47b9260a0/transformed/savedstate-ktx-1.2.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.savedstate:savedstate:1.2.1@aar"
jars="/home/xuser/.gradle/caches/transforms-3/040de899e265d6c45a386fd0e5e15c65/transformed/savedstate-1.2.1/jars/classes.jar"
resolved="androidx.savedstate:savedstate:1.2.1"
folder="/home/xuser/.gradle/caches/transforms-3/040de899e265d6c45a386fd0e5e15c65/transformed/savedstate-1.2.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.collection:collection-jvm:1.4.0@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/androidx.collection/collection-jvm/1.4.0/e209fb7bd1183032f55a0408121c6251a81acb49/collection-jvm-1.4.0.jar"
resolved="androidx.collection:collection-jvm:1.4.0"/>
<library
name="androidx.annotation:annotation-jvm:1.7.0@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/androidx.annotation/annotation-jvm/1.7.0/920472d40adcdef5e18708976b3e314f9a636fcd/annotation-jvm-1.7.0.jar"
resolved="androidx.annotation:annotation-jvm:1.7.0"/>
<library
name="androidx.annotation:annotation-experimental:1.4.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/a667965df92ed2d22f4e1ea0c8cc5625/transformed/annotation-experimental-1.4.0/jars/classes.jar"
resolved="androidx.annotation:annotation-experimental:1.4.0"
folder="/home/xuser/.gradle/caches/transforms-3/a667965df92ed2d22f4e1ea0c8cc5625/transformed/annotation-experimental-1.4.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.8.20/3aa51faf20aae8b31e1a4bc54f8370673d7b7df4/kotlin-stdlib-jdk7-1.8.20.jar"
resolved="org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20"/>
<library
name="org.jetbrains.kotlin:kotlin-stdlib:1.9.22@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.9.22/d6c44cd08d8f3f9bece8101216dbe6553365c6e3/kotlin-stdlib-1.9.22.jar"
resolved="org.jetbrains.kotlin:kotlin-stdlib:1.9.22"/>
<library
name="org.jetbrains:annotations:23.0.0@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/23.0.0/8cc20c07506ec18e0834947b84a864bfc094484e/annotations-23.0.0.jar"
resolved="org.jetbrains:annotations:23.0.0"/>
<library
name="androidx.autofill:autofill:1.0.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/ed13784557a114bf4e20eb69e0d51286/transformed/autofill-1.0.0/jars/classes.jar"
resolved="androidx.autofill:autofill:1.0.0"
folder="/home/xuser/.gradle/caches/transforms-3/ed13784557a114bf4e20eb69e0d51286/transformed/autofill-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.emoji2:emoji2:1.3.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/161d2e0566de4dbd90cbc47319c186f1/transformed/emoji2-1.3.0/jars/classes.jar:/home/xuser/.gradle/caches/transforms-3/161d2e0566de4dbd90cbc47319c186f1/transformed/emoji2-1.3.0/jars/libs/repackaged.jar"
resolved="androidx.emoji2:emoji2:1.3.0"
folder="/home/xuser/.gradle/caches/transforms-3/161d2e0566de4dbd90cbc47319c186f1/transformed/emoji2-1.3.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.customview:customview-poolingcontainer:1.0.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/076d8f7edaad13469d92c51ab804f23a/transformed/customview-poolingcontainer-1.0.0/jars/classes.jar"
resolved="androidx.customview:customview-poolingcontainer:1.0.0"
folder="/home/xuser/.gradle/caches/transforms-3/076d8f7edaad13469d92c51ab804f23a/transformed/customview-poolingcontainer-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.lifecycle:lifecycle-process:2.7.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/01096349b0936ba7f741e909295c017b/transformed/lifecycle-process-2.7.0/jars/classes.jar"
resolved="androidx.lifecycle:lifecycle-process:2.7.0"
folder="/home/xuser/.gradle/caches/transforms-3/01096349b0936ba7f741e909295c017b/transformed/lifecycle-process-2.7.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.lifecycle:lifecycle-common-java8:2.7.0@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-common-java8/2.7.0/2ad14aed781c4a73ed4dbb421966d408a0a06686/lifecycle-common-java8-2.7.0.jar"
resolved="androidx.lifecycle:lifecycle-common-java8:2.7.0"/>
<library
name="androidx.collection:collection-ktx:1.4.0@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/androidx.collection/collection-ktx/1.4.0/2ad14aed781c4a73ed4dbb421966d408a0a06686/collection-ktx-1.4.0.jar"
resolved="androidx.collection:collection-ktx:1.4.0"/>
<library
name="androidx.interpolator:interpolator:1.0.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/9c3c5103c05a0f062c4aa72715398688/transformed/interpolator-1.0.0/jars/classes.jar"
resolved="androidx.interpolator:interpolator:1.0.0"
folder="/home/xuser/.gradle/caches/transforms-3/9c3c5103c05a0f062c4aa72715398688/transformed/interpolator-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.arch.core:core-runtime:2.2.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/c420bb1138b5734b642235e867f979eb/transformed/core-runtime-2.2.0/jars/classes.jar"
resolved="androidx.arch.core:core-runtime:2.2.0"
folder="/home/xuser/.gradle/caches/transforms-3/c420bb1138b5734b642235e867f979eb/transformed/core-runtime-2.2.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.profileinstaller:profileinstaller:1.3.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/4dbbd11a74d28bd64c37893cccf57482/transformed/profileinstaller-1.3.0/jars/classes.jar"
resolved="androidx.profileinstaller:profileinstaller:1.3.0"
folder="/home/xuser/.gradle/caches/transforms-3/4dbbd11a74d28bd64c37893cccf57482/transformed/profileinstaller-1.3.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.concurrent:concurrent-futures:1.1.0@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/androidx.concurrent/concurrent-futures/1.1.0/50b7fb98350d5f42a4e49704b03278542293ba48/concurrent-futures-1.1.0.jar"
resolved="androidx.concurrent:concurrent-futures:1.1.0"/>
<library
name="androidx.startup:startup-runtime:1.1.1@aar"
jars="/home/xuser/.gradle/caches/transforms-3/6ff610d5b5eece47f38e51599785a189/transformed/startup-runtime-1.1.1/jars/classes.jar"
resolved="androidx.startup:startup-runtime:1.1.1"
folder="/home/xuser/.gradle/caches/transforms-3/6ff610d5b5eece47f38e51599785a189/transformed/startup-runtime-1.1.1"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="androidx.tracing:tracing:1.0.0@aar"
jars="/home/xuser/.gradle/caches/transforms-3/8ed7be0de195e25f997f37fd1157ea40/transformed/tracing-1.0.0/jars/classes.jar"
resolved="androidx.tracing:tracing:1.0.0"
folder="/home/xuser/.gradle/caches/transforms-3/8ed7be0de195e25f997f37fd1157ea40/transformed/tracing-1.0.0"
manifest="AndroidManifest.xml"
resFolder="res"
assetsFolder="assets"
lintJar="lint.jar"
publicResources="public.txt"
symbolFile="R.txt"
externalAnnotations="annotations.zip"
proguardRules="proguard.txt"/>
<library
name="com.google.guava:listenablefuture:1.0@jar"
jars="/home/xuser/.gradle/caches/modules-2/files-2.1/com.google.guava/listenablefuture/1.0/c949a840a6acbc5268d088e47b04177bf90b3cad/listenablefuture-1.0.jar"
resolved="com.google.guava:listenablefuture:1.0"/>
</libraries>
@@ -0,0 +1,32 @@
<variant
name="release"
package="com.ramshare.app"
minSdkVersion="29"
targetSdkVersion="34"
shrinking="true"
mergedManifest="build/intermediates/merged_manifest/release/AndroidManifest.xml"
proguardFiles="build/intermediates/default_proguard_files/global/proguard-android-optimize.txt-8.2.2:proguard-rules.pro"
partialResultsDir="build/intermediates/lint_vital_partial_results/release/out"
desugaredMethodsFiles="/home/xuser/.gradle/caches/transforms-3/9800946bb6bb399df0a0c9d35948c37c/transformed/D8BackportedDesugaredMethods.txt">
<buildFeatures
namespacing="REQUIRED"/>
<sourceProviders>
<sourceProvider
manifests="src/main/AndroidManifest.xml"
javaDirectories="src/main/java:src/release/java:src/main/kotlin:src/release/kotlin"
resDirectories="src/main/res:src/release/res"
assetsDirectories="src/main/assets:src/release/assets"/>
</sourceProviders>
<testSourceProviders>
</testSourceProviders>
<testFixturesSourceProviders>
</testFixturesSourceProviders>
<artifact
classOutputs="build/intermediates/javac/release/classes:build/tmp/kotlin-classes/release:build/kotlinToolingMetadata:build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/release/R.jar"
type="MAIN"
applicationId="com.ramshare.app"
generatedSourceFolders="build/generated/ap_generated_sources/release/out"
generatedResourceFolders="build/generated/res/resValues/release"
desugaredMethodsFiles="/home/xuser/.gradle/caches/transforms-3/9800946bb6bb399df0a0c9d35948c37c/transformed/D8BackportedDesugaredMethods.txt">
</artifact>
</variant>
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/home/xuser/Projects/rust/fileshare/android/app/src/main/assets"/></dataSet><dataSet config="release" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/home/xuser/Projects/rust/fileshare/android/app/src/release/assets"/></dataSet><dataSet config="generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/home/xuser/Projects/rust/fileshare/android/app/build/intermediates/shader_assets/release/out"/></dataSet></merger>
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/home/xuser/Projects/rust/fileshare/android/app/src/main/jniLibs"><file name="arm64-v8a/libramshare_ui.so" path="/home/xuser/Projects/rust/fileshare/android/app/src/main/jniLibs/arm64-v8a/libramshare_ui.so"/></source></dataSet><dataSet config="release" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/home/xuser/Projects/rust/fileshare/android/app/src/release/jniLibs"/></dataSet></merger>
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/home/xuser/Projects/rust/fileshare/android/app/src/main/shaders"/></dataSet><dataSet config="release" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="/home/xuser/Projects/rust/fileshare/android/app/src/release/shaders"/></dataSet></merger>
@@ -0,0 +1,7 @@
#Thu Oct 29 20:14:11 MSK 2026
base.1=/home/xuser/Projects/rust/fileshare/android/app/build/intermediates/dex/release/mergeDexRelease/classes2.dex
path.1=classes2.dex
base.0=/home/xuser/Projects/rust/fileshare/android/app/build/intermediates/dex/release/mergeDexRelease/classes.dex
renamed.1=classes2.dex
renamed.0=classes.dex
path.0=classes.dex
Loaded 100 of 1047 files, more files were not shown because too many files have changed in this diff. Show more