query all packages что это
Google запретит Android-приложениям просматривать установленный софт
Google планирует ограничить возможности приложений в мобильной операционной системе Android. Например, в скором времени программы не смогут просматривать список установленного на мобильном устройстве софта.
Согласно замыслу Google, такой шаг должен положительно сказаться на конфиденциальности и безопасности пользователей Android. Корпорация планирует ввести этот механизм в эксплуатацию 5 мая 2021 года.
Таким образом, разработчики уже не смогут размещать в Google Play Store приложения, использующие функцию «QUERY_ALL_PACKAGES». Это коснётся версии Android 11 (API уровня 30). К слову, QUERY_ALL_PACKAGES уже давно признали сомнительной, поэтому лишь определённые программы смогут задействовать эту функцию.
По словам представителей Google, доступ к QUERY_ALL_PACKAGES получат только те приложения, в задачи которых входит поиск по устройству. Это могут быть антивирусы, файловые менеджеры и веб-браузеры. Различные цифровые кошельки или банковские программы тоже смогут обращаться к QUERY_ALL_PACKAGES, однако только в том случае, если функция будет использоваться из соображений безопасности.
Google уже давно рассматривала возможность подобного ограничения, поскольку доступ к проблемной функции могут использовать не только вредоносные программы, но и рекламные компании, просматривающие списки приложений и использующие их для таргетированной рекламы.
Интернет-гигант призывает разработчиков обновить свой софт для соответствия новым требованиям, иначе такие программы с 5 мая будут просто удалены из официального магазина Play Store.
Читайте также
Компания DuckDuckGo, известная в первую очередь поисковой системой с фокусом на конфиденциальность, заявила, что планирует в скором времени выпустить аналогичный десктопный браузер. В настоящее время работа над интернет-обозревателем ведётся полным ходом.
Задача браузера DuckDuckGo — уберечь пользователя от механизмов отслеживания, которыми сейчас напичканы многие ресурсы и веб-площадки. Гендиректор DuckDuckGo Габриэль Вайнберг в блоге подробно описал, как будет выглядеть программа и что можно от неё ожидать.
Вайнберг отметил, что браузер обеспечит «надёжную защиту конфиденциальности» по умолчанию, то есть дополнительно настраивать софт не потребуется. Как и аналогичное мобильное приложение, десктоп-версия будет оснащена кнопкой «Fire», которая за один клик удалит всю историю вашего веб-сёрфинга, хранящиеся данные и закроет вкладки.
Помимо этого, Вайнберг обещает «изящный интерфейс». Он будет выгодно отличаться от того нагромождения, которое можно встретить почти в каждом популярном браузере. К слову, проведённое тестирование показало, что браузер DuckDuckGo работает «значительно быстрее» Google Chrome.
Интересно, что разработчики решили отказаться от использования WebView и WebView2, а взять за основу API для рендеринга, которые предоставляет сама операционная система. На сегодняшний день браузер находится в стадии закрытого тестирования на ОС macOS, а для Windows пока нет даже бета-версии.
Разработчики пока не раскрывают информацию о том, когда именно интернет-обозреватель будет доступен рядовому пользователю.
Google ограничит Android-приложениям возможность видеть, какое ПО установлено на устройстве
Разработчики Android-приложений больше не смогут загружать в Google Play Store новые приложения с функцией QUERY_ALL_PACKAGES.
Компания Google объявила о намерении ограничить возможность Android-приложений видеть, какие еще приложения установлены на устройстве. Данный шаг призван усилить приватность и безопасность пользователей.
Обновление вступит в силу 5 мая 2021 года. Начиная с этой даты, разработчики Android-приложений больше не смогут загружать в Google Play Store новые приложения для Android 11 (уровень API 30) или более поздних версий, в которых присутствует функция QUERY_ALL_PACKAGES. Эта функция будет считаться «представляющей высокий риск или запрашивающей чувствительные разрешения», и использовать ее смогут только избранные приложения. Как сообщает Google, использовать функцию будет разрешено только приложениям для сканирования операций на устройстве, антивирусному ПО, браузерам и файловым менеджерам.
Решение ограничить приложения, которым будет разрешено использовать QUERY_ALL_PACKAGES, принималось очень долго. Даже если в Android-приложениях нет вредоносного кода, жадные до рекламы разработчики часто злоупотребляют разрешением видеть, какие приложения пользователи установили на свои устройства, и продают эту информацию рекламодателям, которые позже используют ее для показа таргетированной рекламы.
На презентации в рамках конференции MOBILEsoft 2020 группа исследователей сообщила, что из 14 300 исследованных ими Android-приложений более 4000 злоупотребляли различными API Android (так называемыми IAM) для получения списка локально установленных приложений. В то время функция QUERY_ALL_PACKAGES была выпущена как ответ на это злоупотребление, и в настоящее время Google ужесточает привязку к этому разрешению.
Google запретит просматривать список установленных на Android-устройстве приложений
Linux для хакера
Разработчики Google сообщили, что из соображений конфиденциальности и безопасности планируют запретить приложениям «видеть», что еще установлено на том же устройстве.
Дело в том, что разработчики нередко злоупотребляют этим: узнают, какие приложения пользователи установили на свои устройства, и продают эту информацию рекламодателям, которые позже используют ее для показа целевой рекламы. Впервые об этом проблеме заговорили в прошлом году, когда группа ученых из университетов Швейцарии, Италии и Нидерландов представила соответствующий доклад на выставке MOBILESoft.
Теперь в Google заявили, что отныне рассматривают «перечень установленных приложений, запрошенных с устройства пользователя, как личную и конфиденциальную информацию», и будут бороться с приложениями, злоупотребляющими этим для получения выгоды.
Нововведение вступит в силу 5 мая 2021 года. По сути, после этой даты разработчики приложений для Android не смогут загружать в Play Store новые приложения, предназначенные для Android 11 или более поздней версии и использующие функцию QUERY_ALL_PACKAGES.
Данную функцию признали слишком высокорисковой, и лишь избранным приложениям будет разрешено ее использовать. Например, тем, которые выполняют операции поиска устройств, антивирусам, файловым менеджерам и браузерам. Другие приложения, такие как цифровые кошельки и приложения электронного банкинга, тоже смогут получить доступ к необходимому разрешению, но только если это необходимо в целях безопасности.
The Quick Developers Guide to Migrate Their Apps to Android 11
Earlier, apps could query the full list of installed apps on the system using methods like queryIntentActivities(). Mostly, I was far broader access you what you actually require.
With Android 11, this is no longer the case. Using the element, apps can define the set of other packages that they can access. This element helps encourage the principle of least privilege by telling the system which other packages to make visible to your app.
If your app targets Android 11 or higher, you might need to add the element in your app’s manifest file. Within the element, you can specify packages by name, by intent signature, or by provider authority.
Example
Suppose you want to send an email, you have to create an Intent for it and let the system find an appropriate app to handle the request.
This code will work fine (even on the API level 30) if the email app is installed on the device. But what if there are no apps that can handle this request? — The app will crash by throwing ActivityNotFoundException.
A safe option is to first check that if we have at least one app which can handle this request. So we could do something like:
Now, this is where your code will fail, as your app is not allowed to query other installed apps. Here, in order for your code to work, you will have to add in your app’s manifest file and declare your intent.
App’s Manifest file with element
Custom Tabs
When using Custom Tabs to open a Web URL, it is possible that there may be some non-browser apps that can also handle that URL. It is recommended that you allow the non-browser app to handle that URL first.
FLAG_ACTIVITY_REQUIRE_NON_BROWSER can be used here to query Non-Browser apps only.
To learn more about it, refer to “Configuring package visibility based on use cases” from Android Documentation.
Important Point
The system makes some apps visible to your app automatically, but it hides other apps by default. Generally, these are apps that are linked to your app in some ways, like, Any app that starts or binds to a service in your app, access a content provider in your app, whose content provider your app accesses, etc.
You can start another app’s activity using either an implicit or explicit intent, regardless of whether that other app is visible to your app. You just cannot query the intent.
What do I do if my App is an App Launcher or similar, where I need to know all the apps that are installed on the device?
To allow your app to see all other installed apps, the system provides the QUERY_ALL_PACKAGES permission.
This permission is appropriate for apps that genuinely need this permission like a Launcher App, a Security App, Device Management App, Accessibility App, etc.
In an upcoming policy update, look for Google Play to provide guidelines for apps that need the QUERY_ALL_PACKAGES permission.
How to get a list of installed android applications and pick one to run
I asked a similar question to this earlier this week but I’m still not understanding how to get a list of all installed applications and then pick one to run.
and this only shows application that are preinstalled or can run the ACTION_MAIN Intent type.
I also know I can use PackageManager to get all the installed applications, but how do I use this to run a specific application?
20 Answers 20
Here’s a cleaner way using the PackageManager
Following is the code to get the list of activities/applications installed on Android :
You will get all the necessary data in the ResolveInfo to start a application. You can check ResolveInfo javadoc here.
Another way to filter on system apps (works with the example of king9981):
Here a good example:
Getting list of installed non-system apps
To filter on sytem based apps :
To get al installed apps you can use Package Manager..
To run you can use package name
You can Find the List of installed apps in Android Device by using below code, «packageInfo» Contains Installed Application Information in Device. we can retrive Intent for the application installed from the packageinfo object and by using startactivity(intent), can start application. it is up to you how you organize the UI either Listview or Gridview. so on click event based on position, you can retrive intent object and start activity intent.
I had a requirement to filter out the system apps which user do not really use(eg. «com.qualcomm.service», «update services», etc). Ultimately I added another condition to filter down the app list. I just checked whether the app has ‘launcher intent’.
So, the resultant code looks like.
If there are multiple launchers in a one package above code has a problem. Eg: on LG Optimus Facebook for LG, MySpace for LG, Twitter for LG contains in a one package name SNS and if you use above SNS will repeat. After hours of research I came with below code. Seems to work well.
@Jas: I don’t have that code anymore, but I’ve found something close. I’ve made this to search for «components» of my application, they are just activities with a given category.
I’ve commented the part where it gets the activity name, but it’s pretty straightforward.
Clean solution that filter successfuly out system apps
The idea behind this solution is that the main activity of every system app does not have a custom activity icon. This method gives me an excellent result:
context.getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA); Should return the list of all the installed apps but in android 11 it’ll only return the list of system apps. To get the list of all the applications(system+user) we need to provide an additional permission to the application i.e
Since Android 11 (API level 30), most user-installed apps are not visible by default. You must either statically declare which apps and/or intent filters you are going to get info about in your manifest like this:
Or require the QUERY_ALL_PACKAGES permission.
After doing the above, the other answers here still apply.