TGTGInsighttelegram intelligenceLIVE / telegram public index
← Android Broadcast
Android Broadcast avatar

TGINSIGHT POST

Post #8625

@android_broadcast

Android Broadcast

Vues8,900Nombre de vues
Publié31 janv.31/01/2025 10:53
Contenu

Contenu du post

Все мы уже привыкли выкладывать сборки в Google Play через AAB, которые передаст на устройство только необходимое для устройства нативные библиотеки. Некоторым приходится раздавать сборку в APK формате. Банальный кейс - отдавать сборку на проверку QA. Универсальное APK - содержит ресурсы и библиотеки под все возможные устройства, даже те которые не нужны на устройстве пользователя. Обычно нативные библиотеки делают наибольший вклад в конечный размер приложения на устройстве пользователя. Отказ от ненужных позволит снизить размер и скорость доставки до устройства пользователя. Android Gradle плагин позволяет указать какие ABI нужно добавлять в сборку. Сложность в том, что для финальной сборки обычно надо добавить ABI arm64-v8a и armeabi-v7a, а вот для Intel эмуляторов нужны x86 и x86-64. Чтобы делать это эффективно, я делал механизм передачи значений ABI через переменные при сборке. Это позволяет задавать локально и на CI разные значения, а локальные задавать через файл local.properties или переменную окружения // Код в Gradle KTS скрипте fun resolveAbiFilters(): List<String> { val abisString = project.findProperty("abiFilter") as String? // Параметр командной строки ?: readFromLocalProperties("abi.filter") // Значение из local.properties ?: System.getenv("ABI_FILTER") // Переменная окружения return abisString?.split(",") ?: emptyList() } fun readFromLocalProperties(key: String): String? { val localPropertiesFile = rootProject.file("local.properties") if (!localPropertiesFile.exists()) return null val localProperties = Properties().apply { localPropertiesFile.inputStream().use(::load) } return localProperties.getProperty(key) } // В Android application модуле указываем android { defaultConfig { ndk { abiFilters = resolveAbiFilters() } } } Пример задания через параметр ./gradlew assembleRelease -PabiFilter=arm64-v8a,armeabi-v7a Если вы запускаете приложения из Android Studio на устройстве/эмуляторе, то IDE понимает какую ABI из поддерживаемых стоит включить в APK, чтобы приложение смогло работать. Все остальные исключается. Сборка компактнее - меньше время на передачу и установку тестового билда. #android#gradle#ndk