что такое network stack на андроид
Взаимодействие Android-устройств в локальной сети
Предположим, мы пишем игру для Android, которая подразумевает некое сетевое взаимодействие между устройствами. Причем наши устройства находятся в одной сети и мы хотим, чтобы взаимодействие между ними осуществлялось быстро, а значит вариант с обменом данными через интернет нам не подходит. Ах да, еще одна маленькая ложка дегтя — мы хотим охватить максимально возможную аудиторию, для чего нам необходимо поддерживать Android 2.3.
Что же нам делать? Давайте поговорим об этом, а заодно рассмотрим относительно новые возможности Android SDK для соединения двух и более устройств.
О чем это и для кого это?
Как-то раз, уйдя с предыдущего места работы и погрузившись в заслуженный отдых, я принялся писать сетевую игру, в которую могут играть люди, находящиеся в одной локальной сети. И сразу же столкнулся с тем, что для нормального функционирования подобной игры нам мало соорудить сетевое взаимодействие — нам нужно сделать нормальное и быстрое обнаружение устройств в сети. Собственно, в данной статье я поделюсь своим опытом в реализации решения для данной задачи.
Сразу оговорюсь, что статья предназначена в большей мере для тех, кто имеет опыт Android-разработки, написал несколько приложений и хочет расширить свой кругозор, а также улучшить профессиональные навыки.
Какие возможные способы решения существуют?
Далее я взял исходный код NsdChat с Android Developer и изменил его служебный класс, который отвечает за инициализацию сокетов и организацию сетевого взаимодействия. Также я написал wrapper для JmDNS
В завершении я написал универсальный класс ConnectionWrapper для полноценной организации обнаружения, а также обмена сообщениями в локальной сети. Таким образом, создание сервера в конечном приложении выглядит следующим образом:
А вот и mServerHandler, использующийся для приема и обработки сообщений:
Отправка сообщений еще проще:
И, наконец, метод для обнаружения и подключения к серверу:
Как видите, все очень просто. А главное, все это работает в любой версии Android для максимум двух устройств. Но сделать так, чтобы это работало для условно неограниченного числа устройств очень легко, и очевидное решение придет к вам почти сразу после детального изучения класса Connection. Пусть это будет в качестве домашнего задания.
Ах, да, весь код доступен для изучения и использования всеми желающими в моем репозитории на GitHub.. И, конечно, не исключаю то, что некоторые вещи можно сделать лучше и проще, поэтому не стесняйтесь форкать и делать pull request’ы.
Что такое network stack на андроид
Краткое описание:
Мониторинг входящих/исходящих соединений.
Описание:
Мощный инструмент для просмотра и мониторинга (отслеживания) всех входящих и исходящих соединений Вашего Android-устройства. Низкоуровневый модуль перехвата соединений обеспечивает наилучшую производительность при минимальном расходе заряда батареи. Работает и на НЕРУТОВАННЫХ телефонах.
Network Connections должен быть у каждого фаната Android и является идеальным дополнением к приложению Anti Spy Mobile, выявляющему «секреты» установленных у Вас приложений.
ПРИМЕЧАНИЕ: Это БЕСПЛАТНО-Пробное приложение и некоторые его функции ограничены определённым количеством попыток. Если приложение Вам понравилось и Вы хотите им пользоваться, пожалуйста, загрузите Ключ Разблокировки для него.
Требуется Android: 4.0 и выше
Русский интерфейс: Неизвестно
версия 1.3.3 Unlocked Rus: Network Connections (Пост #82505196)
версия 1.3.3 Unlocked: Network Connections (Пост #82498460)
версия 1.3.3: Network Connections (Пост #81997237)
версия 1.3.2: Network Connections (Пост #81882357)
Unlock Key 1.0.1: Network Connections (Пост #33125783)
версия 1.2.0: Network Connections (Пост #78695688)
версия 1.1.2 Unlocked Rus: Network Connections (Пост #60542256)
версия 1.1.2 Unlocked: Network Connections (Пост #51077646)
версия 1.1.1 Unlocked: Network Connections (Пост #46797142)
версия 1.0.11 Unlocked: Network Connections (Пост #36948906)
версия 1.0.11 Rus: Network Connections (Пост #39987413)
версия 1.0.11: Network Connections (Пост #33125783)
версия 1.0.9 Unlocked Rus: Network Connections (Пост #33130043)
версия 1.0.9 Unlocked: Network Connections (Пост #27593031)
версия 1.0.6 Unlocked Rus: Network Connections (Пост #26155389)
версия 1.0.8 Unlocked: Network Connections (Пост #26882289)
версия 1.0.7 Unlocked: Network Connections (Пост #26304119)
версия 1.0.6 Unlocked: com.antispycell.connmonitor_1.0.6_U_if.apk ( 457.76 КБ )
Разблокированы функции полной версии. Анлокер не нужен.
версия 1.0.6 Unlocked Rus: Network Connections (Пост #26155389)
Русифицированная Network Connections
Версия: 1.0.6
Перевод мой.
NetworkConnections_v1.0.6_RUS.apk ( 440.69 КБ )
8 приложений для Android, которые нужно удалить. Они опасны
Кто бы что ни говорил, но Google Play – это помойка. Не даром её признали самым популярным источником вредоносного софта для Android. Просто пользователи в большинстве своём доверяют официальном магазину приложений Google и скачивают оттуда любое ПО без разбору. А какой ещё у них есть выбор? Ведь их всегда учили, что скачивать APK из интернета куда опаснее. В общем, это действительно так. Но остерегаться опасных приложений в Google Play нужно всегда. По крайней мере, постфактум.
Есть как минимум 8 приложений, которые нужно удалить
Google добавила в Google Play функцию разгона загрузки приложений
Исследователи кибербезопасности из антивирусной компании McAfee обнаружили в Google Play 8 вредоносных приложений с многомиллионными загрузками. Попадая на устройства своих жертв, они скачивают получают доступ к сообщениям, а потом совершают от их имени покупки в интернете, подтверждая транзакции кодами верификации, которые приходят в виде SMS.
Вредоносные приложения для Android
Нашли вирус? Удалите его
В основном это приложения, которые потенциально высоко востребованы пользователями. Среди них есть скины для клавиатуры, фоторедакторы, приложения для создания рингтонов и др.:
Это названия пакетов приложений, то есть что-то вроде их идентификаторов. Поскольку всё это вредоносные приложения, их создатели знают, что их будут искать и бороться с ними. Поэтому они вполне могут быть готовы к тому, чтобы менять пользовательские названия приложений, которые видим мы с вами. Но это мы не можем этого отследить. Поэтому куда надёжнее с этой точки зрения отслеживать именно идентификаторы и удалять вредоносный софт по ним.
Как найти вирус на Android
Но ведь, скажете вы, на смартфоны софт устанавливается с пользовательскими названиями. Да, это так. Поэтому вам понадобится небольшая утилита, которая позволит вам эффективно выявить весь шлаковый софт, который вы себе установили, определив название их пакетов.
В красном квадрате приведен пример названия пакета
Package Name Viewer удобен тем, что позволяет не просто найти нужное приложение по названию его пакета, но и при необходимости перейти в настройки для его удаления. Для этого достаточно просто нажать на иконку приложения, как вы попадёте в соответствующий раздел системы, где сможете остановить, отключить, удалить накопленные данные, отозвать привилегии или просто стереть нежелательную программу.
Как отменить подписку на Андроиде
Лучше всего приложение именно удалить. Это наиболее действенный способ защитить себя от его активности. Однако не исключено, что оно могло подписать вас на платные абонементы, поэтому для начала проверьте свою карту на предмет неизвестных списаний, а потом просмотрите список действующих подписок в Google Play:
Если подписка оформлена через Google Play, отменить её ничего не стоит
В принципе, если подписка была оформлена через Google Play и оплата уже прошла, вы можете потребовать у Google вернуть уплаченные деньги. О том, как это делается, мы описывали в отдельной статье. Но поскольку разработчики таких приложений обычно тщательно продумывают способы воровства денег, как правило, они не используют встроенный в Google Play инструмент проведения платежей, чтобы их в случае чего не могли отозвать.
Tasks и Back Stack в Android
Итак. Каждое Android приложение, как минимум, состоит из фундаментальных объектов системы — Activity. Activity — это отдельный экран который имеет свою отдельную логику и UI. Количество Activity в приложении бывает разное, от одного до много. При переходах между различными Activity пользователь всегда может вернуться на предыдущую, закрытую Activity при нажатии кнопки back на устройстве. Подобная логика реализована с помощью стека (Activity Stack). Его организация «last in, first out» — т.е. последний вошел, первый вышел. При открытии новой Activity она становится вершиной, а предыдущая уходит в режим stop. Стек не может перемешиваться, он имеет возможность добавления на вершину новой Activity и удаление верхней текущей. Одна и та же Activity может находиться в стеке, сколько угодно раз.
Task — это набор Activity. Каждый таск содержит свой стек. В стандартной ситуации, каждое приложение имеет свой таск и свой стек. При сворачивании приложения, таск уходит в background, но не умирает. Он хранит весь свой стек и при очередном открытии приложения через менеджер или через launcher, существующий таск восстановится и продолжит свою работу.
Ниже покажу картинку, как работает стек.
Если продолжать нажимать кнопку back, то стек будет удалять Activity до того, пока не останется главная корневая. Если же на ней пользователь нажмет back, приложение закроется и таск умрет. Кстати, я говорил о том, что когда мы сворачиваем наше приложение и запускам например новое, то наш таск просто уходит в background и будет ждать момента, пока мы его вызовем. На самом деле есть одно «но». Если мы будем иметь много задач в background или же просто сильно нагружать свое устройство, не мала вероятность того, что таск умрет из за нехватки системных ресурсов. Это не война конечно, но то что мы потеряем все наши текущие данные и наш стек очистится — это точно. Кстати для избежания потери данных в таком случаи, вам стоит почитать про SavingActivityState.
Маленький итог
Управление тасками
Существует два пути для изменения стандартной организации тасков. Мы можем устанавливать специальные атрибуты в манифесте для каждой Activity. Также мы можем устанавливать специальные флаги для Intent, который запускает новую Activity с помощью startActivity(). Заметьте, что иногда атрибуты в манифесте и флаги в Intent могут противоречить друг другу. В этом случаи флаги Intent будут более приоритетны.
Атрибут launchMode
Флаги
Affinity
Стандартно все Activity нашего приложения работают в одном таске. По желанию мы можем изменять такое поведение и указывать, чтобы в одном приложении Activity работали в разных тасках, или Activity разных приложений работали в одном. Для этого мы можем в манифесте для каждой Activity указывать название таска параметром taskAffinity. Это строковое значение, которое не должно совпадать с названием package, т.к. стандартный таск приложения называется именно как наш пакет. В общем случаи данный параметр указывает, что Activity будет гарантированно открываться в своём отдельном таске. Данный параметр актуален, если мы указываем флаг FLAG_ACTIVITY_NEW_TASK или устанавливаем для Activity атрибут allowTaskReparenting=«true». Этот атрибут указывает, что Activity может перемещаться между тасками, который её запустил и таском, который указан в taskAffinity, если один из них становится активным.
Чистка стека
Это всё для данного топика. Статья не импровизированная, а по сути является вольным переводом официальной документации. Рекомендую собрать легкий пример и поэксперементировать с флагами и атрибутами. Некоторые моменты, лично для меня были, неожиданно интересными. любые ошибки и недоработки учту в лс. Спасибо.
Everything you need to know about Android’s Project Mainline
One of the biggest changes in Android in recent years that flew under the radar, relatively speaking against its importance, was the introduction of Project Mainline in Android 10. Google mandates the inclusion of specific Mainline modules across Android releases, with Android 11 coming in with a combined compulsory total of 25 Mainline modules. Here is an explanation on what Project Mainline is and what it aims to solve, alongside a list of all of Android’s Project Mainline modules.
What is Project Mainline?
To properly understand Project Mainline, we will have to rewind a bit. If you go back a few years, a lot of the conversation around Android updates centered around the fragmentation problem. Fragmentation was one of the biggest challenges for Google to solve on Android around the Ice Cream Sandwich – Lollipop era. Even though Android as a platform received regular updates across a largely-predictable pattern, these updates used to take a very long time to reach the hands of final consumers, if at all. So while Google was fixing critical bugs and security issues at the platform level, the actual rollout of these changes left a lot to be desired. There were/are a lot of middlemen (SoC vendor, OEMs, carriers, etc.) and a lot of moving parts involved in delivering updates to your phone, and the fragmentation problem did not appear like it would solve itself without requiring some hard-hitting interventions.
One of the major efforts to address this problem came in the form of Project Treble alongside Android 8.0 Oreo, which involved a major rearchitecting of Android, separating the Android OS framework components from the vendor HALs and Linux kernel. Project Treble, in essence, modularized Android by separating the OS framework from the device-specific, lower-level software. This way, device makers (OEMs) need not wait for silicon manufacturers (SoC vendor) to update their vendor implementation code, and OEMs could update the Android OS framework independently. The end result is faster adoption of newer Android releases from the OEM, as they no longer need to wait around for the middleman (SoC vendor) to finish its job first before they can begin doing theirs.
While the Android update situation did not dramatically improve right off the bat with Project Treble, it did largely enable broader OEM participation in Android 10 and Android 11 betas as well as making it easier for OEMs to update more of their devices on a quicker timeline. Plus, the entire concept of the GSI (Generic System Image) has had a major impact on aftermarket development on our forums.
Developer boots Android 11 on 22 older devices with a Project Treble GSI
Project Mainline extends the efforts of Project Treble. While Treble reduced how dependent OEMs were on SoC vendors for every single OS update, Mainline reduces how dependent Google is on OEMs for delivering security updates to key OS components. Project Mainline extends the Treble philosophy to more critical parts of the Android framework, removing OEMs as the dependent middlemen from this equation. The purpose of Project Mainline is for Google to wrest control of framework components and system applications that are critical to security and maintaining development consistency away from OEMs. Project Mainline is rightfully referred to as the biggest change to Android since Project Treble.
For Project Mainline, Google makes use of Mainline modules which are delivered through the Google Play Services framework and the Google Play Store. Each Mainline module is delivered as either an APK file, an APEX file, or as an APK-in-APEX. When a Mainline module is being updated, the user sees a “Google Play System Update” (GPSU) notification on their device. Effectively, to deliver updates to critical components, Google has bypassed the need to wait for an OEM to roll out an update, choosing to do the task itself.
Modular system components enable Google and Android partners to distribute updates broadly, quickly, and seamlessly to end-user devices in a non-intrusive manner. For example, the combination of media codec fragmentation and critical bugs can dramatically slow app adoption and user engagement. Frequent updates to media-related modules can reduce codec fragmentation to make media app behavior more consistent across different Android devices and fix critical bugs to build user trust.
Android 10 or higher converts selected system components into modules, some of which use the APEX container format (introduced in Android 10) and some of which use the APK format. The modular architecture enables system components to be updated with critical bug fixes and other improvements as needed, without affecting lower-level vendor implementations or higher-level apps and services.
Project Mainline, AKA “Google Play System Updates,” was introduced in Android 10 as a major effort to make core system components of Android more modular and updatable. Mainline introduced a new “APEX” filetype specifically for system components, with the goal of shipping core Android code through the Play Store as easily as you ship an app update. Previously, Android’s only shippable code block was the APK, a filetype originally designed for third-party apps. This came with all sorts of security restrictions and could only start up late in the boot-up process, so APEX was created with more powerful system components in mind. APEXes can only be created by Google or your device manufacturer, so they can be noticeably more powerful and house critical boot-up components like the app runtime.
Mainline isn’t just a technical solution, it’s also about making more parts of Android centrally distributed by Google, which involves negotiating with device manufacturers and getting them to all agree to ship the same block of code. Mainline modules eventually become mandatory to ship, so Mainline is actually a big collaboration with device manufacturers to make sure a single ecosystem-wide module meets everyone’s needs. Not every Mainline module is an ultra-powerful APEX module—some are just APKs that are now Google-distributed Android code.
Project Mainline — Modules
With Android 10, Google mandated the inclusion of 13 specific Mainline modules. With Android 11, the total number of mandatory modules is 25. Here is the full list, alongside some key details: