What is pid android

What is pid android

PID: Process Identifier. PID is the identity of each process. As soon as the program runs, the system will automatically assign a unique PID to the process. After the process is terminated, the PID is recovered by the system and may continue to be assigned to the newly run program, but in the Android system, the process ID that has been killed is generally not reassigned to the new process. The process number of the newly generated process is generally better than All process numbers must be large before they are generated.

UID: Generally understood as User Identifier, UID is the user’s ID in Linux, indicating which user ran this program at the time, mainly used for permission management. It is different in Android because Android is a single-user system. At this time, UID has been given a new mission. Data sharing. In order to achieve data sharing, Android assigns different UIDs to each application, unlike In traditional Linux, each user is assigned the same UID for the same. (Of course, this also shows a problem. Android can only be a single-user system, and it was castrated by their engineers at the beginning of the design.), making it a tool for data sharing.

Therefore, in Android, PID and UID are used to identify the identity of the application, but UID is for different programs to use shared data.

To share data through UID in Android, you only need to configure the menifest in programs a and b, as follows:

In this way, we can access the data in b by jumping activity in the a program.

In this case, you may have doubts. If you let other developers know our shareUserId knows our ID, then our data is not exposed. Rest assured that Google will not make such a low-level error. We have to make a different Programs can access each other, and they need to have the same signature. The signature of each company or developer is unique, so that we don’t have to worry about it, and the other two can access, don’t forget the permissions

Источник

Русские Блоги

Android-UID обучения, GID, GIDS и PID в системе Android

UID, GID, GIDS и PID в системе Android

вAndroidВ верхней части пользовательский UID указывает приложение. Когда приложение установлено, пользовательский UID назначается. В течение времени жизни приложения на устройстве пользовательский UID остается неизменным. Для обычных приложений GID равен UID.

GIDS генерируется платформой в процессе установки приложения и связана с конкретными разрешениями, применяемыми приложением. Если соответствующее разрешение, примененное в Приложении, предоставлено, и существует соответствующий GIDS, то gids этого Приложения будет содержать эти gids. Помните, что разрешения (GIDS) предназначены для разрешения или ограничения доступа приложений (не пользователей) к ресурсам устройства.

Android использует концепцию «песочницы» для достижения разделения и разрешений между приложениями, чтобы разрешить или запретить приложению доступ к ресурсам устройства, таким как файлы и каталоги, сети, датчики и API. Для этого Android использует некоторые утилиты Linux (такие как безопасность на уровне процесса, идентификаторы пользователей и групп, связанные с приложением, а также разрешения) для реализации операций, которые разрешено выполнять приложению.

Рисунок 1. Два Android-приложения, каждое в своей базовой песочнице или процессе

Приложения Android работают на собственных процессах Linux и им присваивается уникальный идентификатор пользователя. По умолчанию приложениям, работающим в базовом процессе изолированной программной среды, не назначаются разрешения, поэтому такие приложения имеют ограниченный доступ к системе или ресурсам, а приложения Android могут запрашивать разрешения только через файл манифеста приложения.

Различные приложения могут работать в одном процессе. Для этого метода вы должны сначала подписать эти приложения одним и тем же закрытым ключом, а затем использовать файл манифеста, чтобы назначить им один и тот же идентификатор пользователя Linux. Это делается путем определения атрибута манифеста android: sharedUserId с тем же значением / именем для общего доступа Доступ к его данным и коду, как показано на рисунке 2

Рисунок 2. Два приложения Android, запущенные в одном процессе

подводить итоги

В Android приложение имеет только один UID, и, конечно, несколько приложений могут также использовать UID.

Для обычных приложений gid равен uid. Поскольку uid и gid каждого приложения различны, как собственный уровень, так и уровень java могут защищать личные данные.

Читайте также:  Параметры разработчика андроид как настроить

GIDS эквивалентен набору разрешений, UID может быть связан с GIDS, указывая, что UID имеет несколько разрешений

Процесс — это песочница хост-приложения, которое обычно имеет UID и несколько GIDS. Каждый процесс может получать доступ только к файлам в пределах диапазона разрешений UID и интерфейсов, разрешенных GID, которые составляют основную основу безопасности Android.

Источник

Работа с устройствами USB в Android

В недавней статье на Geektimes в комментариях возник вопрос о поддержке в ОС Android периферии, подключенной к шине USB. Действительно, большинство вендорского ПО, к примеру, для работы с принтерами и МФУ, поддерживает только подключение по сети. Однако это не означает, что в самой ОС Android нет такой возможности — это означает лишь то, что большинство устройств не имеют полноценного USB хоста, и далеко не все имеют поддержку OTG. По сети же могут работать абсолютно все без исключения.

Большинство устройств на Android при наличии порта OTG поддерживают на уровне системы (ядра Linux или стандартных компонентов Android) следующие классы устройств:

  • Устройства ввода — клавиатуры, мыши, джойстики (HID)
  • Накопители (Mass Storage)

Несколько реже:

  • Сотовые модемы
  • Сетевые адаптеры
  • Вебкамеры

Хабы поддерживаются при наличии полноценных хост-портов, но не поддерживаются на портах OTG.

Подробнее список устройств, поддерживаемых на уровне ядра Linux, можно получить в sysfs:

$ ls /sys/bus/usb/drivers

Если же модуль в принципе доступен в исходниках ядра Linux, но не включен в Android — не стоит рассчитывать на то, что его получится собрать и расставить на все целевые системы.

Однако, начиная с Android 3.1 (API 12), в системе содержатся средства, достаточные для поддержки на уровне приложения любой USB периферии. Данные средства описаны в разделе USB Host руководства по Android API. Здесь же я хочу привести примеры реальной работы с некоторыми видами устройств.

Права доступа

Как и для прочих действий, Android требует, чтобы приложение получило разрешение на доступ к USB периферии. Существует 2 способа получить такое разрешение:

  • Задекларировать список устройств в AndroidManifest
  • Явно показать пользователю диалог “разрешить”

Поскольку для моих задач лишние вопросы к пользователю были нежелательны, я использовал первый способ.

Итак, нам необходимо добавить в манифест следующее:

А в res/xml/device_filter.xml вписать следующее:

Отмечу, что хотя общепринято указывать VID:PID в 16-ричной системе счисления, здесь они должны быть указаны в десятичной. В документации заявляется, что возможно указание только класса, без VID и PID, но у меня это не стало работать.

Принтеры

На примере принтера я покажу, как непосредственно использовать API android.hardware.usb. На уровне передачи данных все принтеры поддерживают стандартый класс USB устройств:

Класс предельно простой. В рамках этого класса устройство должно поддерживать:

  • Обязательный bulk out endpoind для отправки данных на принтер
  • Опциональный bulk in endpoind для получения статуса принтера
  • 3 управляющих запроса

Код, приведенный ниже, предоставляет функциональность, аналогичную устройству /dev/usb/lp в Linux. Далее нам нужен фильтр, преобразующий исходный документ в пакет данных, понятный конкретной модели принтера. Но это тема иной статьи. Как один из вариантов — можно собрать ghostscript с помощью NDK.

Для работы с устройством нам в первую очередь нужно:

1. Найти устройство. В примере для простоты я ищу первый попавшийся:

2. Получить endpoint’ы:

3. Непосредсвенно открыть устройство:

4. После этого мы можем читать и писать в устройство:

5. По завершении работы — закрыть устройство:

Преобразователи USB-Serial

В отличие от притеров, преобразователи USB-Serial гораздо менее стандартизированы. Существует несколько распространенных чипов, для которых существенно отличается установка параметров последовательного порта — битрейта, чётности и проч. К счастью, есть библиотека github.com/mik3y/usb-serial-for-android, поддерживающая практически все существующие чипы. Библиотека полностью скрывает USB API, сводя все необходимые действия к минимуму вызовов с минимумом параметров.

1. Найти и открыть устройство:

2. Установить параметры последовательного порта:

3. Читать и писать в порт:

4. По завершении работы — закрыть порт:

Резюме

Надеюсь, что мне удалось показать, что работа с USB периферией достаточно проста и логична. Безусловно, реализация протоколов некоторых конкретных устройств не блещет простотой — но это проявится в любой системе в одинаковой степени.

Все приведенные примеры я взял из реального проекта, лишь исключил очевидные проверки, оставив только ключевые строки.

Источник

Часть 3. Как подключить смартфон к авто — читаем данные

Мы продолжаем цикл статей о том, как подключиться к бортовой системе своего автомобиля (см. Часть 1 и Часть 2 ) и сегодня расскажем как считывать данные.

Предполагается, что к текущему моменту у нас есть машина с диагностическим разъемом, отвечающим OBD-II стандарту, любимое мобильное устройство (ноутбук, смартфон, планшет) и адаптер на базе ELM327, который позволит соединить машину и мобильное устройство.

Читайте также:  Command conquer rivals андроид

Как уже говорилось в предыдущей части, независимо от типа связи между мобильным устройством и адаптером (Bluetooth, Wi-Fi, USB) на логическом уровне, — это последовательное соединение. На программном уровне необходимо открыть Socket соединение между компьютером и адаптером поверх имеющегося соединения нижнего уровня. Практическая программная реализация будет зависеть от операционной системы и типа соединения, примеров можно найти массу под все ваши любимые языки программирования. В качестве базового примера можно брать реализацию соединения на примерах чат-программ для Bluetooth или TCP\IP. В данной статье мы не будем останавливаться подробно на реализации такого соединения, для экспериментов нам хватит возможностей имеющихся программ а-ля Telnet, для экспериментов под Андроид и iOS мы встроили простую командную консоль в наше приложение OBD Car Doctor.

Итак, скачиваем и устанавливаем программу которая позволит установить последовательное соединение с адаптером и предоставить нам командную строку для общения с машиной.

  • Для ноутбука с Windows (Linux) можно воспользоваться Putty ,
  • для Андроид и iOS можно воспользоваться OBD Car Doctor Android, OBD Car Doctor iOS. Обратите внимание, что на момент публикации статьи на iTunes может еще быть старая версия 1.2, консоль будет доступна в версии 1.3.

После скачивания и установки программ пора брать компьютер (смартфон), адаптер и выдвигаться к машине. Распечатка этой статьи тоже не помешает.
  • Убеждаемся, что перед вами ваша машина, и/или, что ее владелец не против жестоких экспериментов с диагностической системой автомобиля.
  • Подключаем адаптер к диагностическому разъему (надеюсь, вы подготовились заранее и уже нашли разъем в соответствии с рекомендациями предыдущей части).
  • Ключ «на старт», включаем зажигание.
  • На адаптере должна загореться лампочка питания, и мы можем продолжать.

Подробнее остановимся на связи с Bluetooth адаптером, как наиболее популярном и распространенном типе адаптеров.

Windows:

В разделе Устройства производим поиск новых устройств (на некоторых адаптерах нужно нажать кнопочку для того чтобы устройство обнаруживалось), после обнаружения устройства и ввода пин кода устройство появится в общем списке.

Смотрим на свойства, вкладка Оборудование

Теперь свойства Последовательного порта.

Видим и запоминаем, что Последовательное подключение Bluetooth мапится на порт COM3. Если есть необходимость, меняем на другой порт. Теперь запускаем Putty и настраиваем программу на работу с определенным на предыдущем шаге COM портом (в примере с COM3).

Итак, вводим имя COM порта, скорость 9600, тип Serial и кликаем Open для открытия терминального окна.

Android:

1. Подключите Bluetooth адаптер к OBD-II разъему вашего автомобиля (о нем и его расположении мы писали в Части 2). Убедитесь, что лампочка на адаптере зажглась.
2. Запустите двигатель автомобиля
3. Зайдите в окружение Bluetooth на Вашем смартфоне: «Настройки» > Bluetooth и запустите поиск Bluetooth устройств, найдите OBD II адаптер, он должен появиться в списке устройств как ‘scantool’,’obdkey’,’plx . ‘,’cbt’ или что-то похожее. Выберите адаптер. Он предложит произвести спряжение устройств.
4. Произведите сопряжение устройств. Устройство попросит секретный код сопряжения, как правило: 1234 или 0000.
5. Перейдите в приложение OBD Car Doctor на своем смартфоне.
6. В Настройках в пункте BT соединение выбираем имя адаптера с которым ранее произвели сопряжение.
7. В Настройках в разделе Тест устанавливаем галочку в опции Консоль. Возвращаемся на главную страницу, кликаем Подключить и после успешного подключения выбираем пункт Консоль (данная функция доступна начиная с версии OBD Car Doctor Android 2.22).

1. Подключите OBD-II Wi-Fi адаптер к OBD-II разъему вашего автомобиля. Запустите двигатель автомобиля и дождитесь зеленого свечения на Wi-Fi адаптере.
2. На своем iPhone устройстве перейдите в Настройки (Settings), выберите подключиться к сети Wi-Fi. После подключения к Wi-Fi, перейдите в расширенные настройки и установите:

  • Адрес IP: Статический
  • Адрес IP: 192.168.0.11
  • Маска подсети: 255.255.255.0

Выберите имя устройства для подключения Wi-Fi. Выйдите из настроек.
3. Перейдите в приложение OBD Car Doctor > Настройки (Settings), где настройте следующее:

  • IP Адрес: 192.168.0.10
  • Порт: 35000
  • Кликните «Сохранить» и «Выйти»

4. Запустите двигатель.
5. Перейдите в приложение OBD Car Doctor на своем смартфоне. В Настройках в разделе Тест устанавливаем галочку в опции Консоль. Возвращаемся на главную страницу, кликаем Подключить и после успешного подключения выбираем пункт Консоль (данная функция доступна начиная с версии OBD Car Doctor iOS 1.3, выход которой ожидается в ближайшее время).

По завершению описанных действий вы готовы вводить команды и получать ответы от диагностической системы автомобиля. Естественно работать с консолью в движении не очень удобно и не безопасно даже для пассажира. Поэтому экспериментировать предлагаем на заведенной, но удобно припаркованной машине.

Выше мы упомянули, что команды подразделяются на 2 типа: команды управления адаптером и собственно OBD-II команды. Обычно команды управления начинаются с последовательности AT, в то время как OBD-II команды состоят только из шестнадцатеричных цифр.

Читайте также:  Темы для нова лаунчер для андроид
Итак, наша первая команда:

• набираем ATZ и нажимаем Enter (или кнопку Отправить). Если на адаптере есть питание и связь с ним была установлена, мы должны увидеть ответную строку:
ELM 327 v1.3a >
Или что-то похожее, в зависимости от используемого контроллера и версии прошивки адаптера. ATZ — является командой инициализации и выполняет перезагрузку адаптера.

• Следующей командой может быть команда установки протокола, вводим команду ATSP0, в ответ мы должны получить
ATSP0 OK >
Команда ATSP0 не устанавливает непосредственно протокол взаимодействия адаптера с автомобилем, это специальная команда, которая устанавливает автоматический режим определения протокола адаптером. Для непосредственного поиска и установления связи мы должны послать OBD-II команду.

• Отправляем команду 0100 (которая расшифровывается как MODE 01, PID 00), в случае успеха мы должны получить что-то вроде
0100 Searching…
41 00 XX XX XX XX >
Где X может быть любой шестнадцатеричной цифрой.

Здесь обратим внимание на несколько моментов:

• пробелы могут игнорироваться как в командах так и в ответах; наличие или отсутствие пробелов в ответе управляется отдельной командой ATS <0|1>
• в ответе может присутствовать или отсутствовать эхо (т.е. повтор команды, как в приведенном выше примере); наличие или отсутствие пробелов в ответе управляется отдельной командой ATE <0|1>
• сам ответ на команду содержит модифицированное значение команды, а именно (mode+0x40)(PID), т.е. положительный ответ на команду 0100, должен начинаться с 4100.

В случае неудачи ответы могут быть следующими:

0100 SEARCHING.
UNABLE TO CONNECT >
или
0100 SEARCHING.
NO DATA >

Подобные ответы означают, что адаптеру не удалось автоматически определить протокол связи с авто.

Вместо автоматического поиска протокола можно явно установить номер протокола, поддерживаются шестнадцатеричные номера от 1 до C.
1 — SAE J1850 PWM
2 — SAE J1850 VPW
3 — ISO 9142-2
4 — ISO 14230-4 KWP (5 baud init)
5 — ISO 14230-4 KWP (fast init)
6 — ISO 15765-4 CAN (11 bit, 500 Kbaud)
7 — ISO 15765-4 CAN (29 bit, 500 Kbaud)
8 — ISO 15765-4 CAN (11 bit, 250 Kbaud)
9 — ISO 15765-4 CAN (29 bit, 250 Kbaud)
A — SAE J1939 CAN (29 bit, 250 Kbaud)
B — USER1 CAN (11 bit, 125 Kbaud)
C — USER2 CAN (11 bit, 50 Kbaud)

Например, для явного установления связи по протоколу ISO 9142-2 набираем команду ATSP3, получаем в ответ ATSP3 OK >
И проверяем результативность командой 0100, опять же в случае успеха ожидаем увидеть
0100 Searching…
01 00 41 00 XX XX XX XX >

Если видим что-то другое, вроде
0100 BUS INIT:
…ERROR
Что значит — связь по данному протоколу не установлена.

Для тестирования и установления протокола связи может использоваться любая поддерживаемая автомобилем OBD-II команда, но рекомендуется использовать именно 0100, поскольку она должна поддерживаться производителем в соответствии со стандартом. Данная команда должна возвращать информацию о поддержке PID c 01 по 20 для MODE 01.

Напомним, что MODE 01 отвечает за чтение динамических параметров автомобиля (скорость, обороты, температуры и т.д.) в реальном времени. Соответственно, прочитав ответ на 0100, который содержит информацию о том, какие из PID c 01 по 20 (шестнадцатеричные) поддерживаются. Для расшифровки мы должны конвертировать шестнадцатеричное представление числа в бинарное, при этом позиция бита (от старшего к младшему) соответствует номеру PID (от 01 до 20).
Например, ответ содержащий 80 00 00 00 = 1000 0000 0000 0000 0000 0000.
Означает поддержку единственного PID, а именно 01.

Сейчас вы можете прочитать ответ вашего автомобиля на команду 0100 и узнать номера всех команд (PID) поддерживаемых в вашем автомобиле. Обратите внимание, что если поддерживается команда 0120, то отправив ее, можно прочитать номера поддерживаемых PID в диапазоне 21 – 40 и т.д., т.е. 0100, 0120, … 01D0, которые отвечают за определение номеров всех поддерживаемых команд в MODE 01.

Чтобы закрепить полученные знания, предлагаем выполнить еще одну простую команду и разобрать результат. Если вы расшифровали ответ команды 0100 и получили, что PID 0C поддерживается, отправим команду 010C (обороты двигателя), ответ должен быть в виде:
01 0C 41 0C 0B B8 >
Для получения значения в оборотах в минуту, необходимо полученный ответ (0B B8 = 3000) разделить на 4, т.е. получаем 750 об/мин.
Список поддерживаемых стандартом команд и формулы преобразования можно найти здесь.

Пока вы экспериментируете с отправкой различных команд, а также получением и расшифровкой значений, мы будем готовить следующую часть(и), в которой затронем вопросы работы с несколькими бортовыми контроллерами, что нужно знать о хедерах команд, чтение и сброс ошибок, для чего используются другие MODE, «почти OBD-II», а также другие темы, которые могут вас заинтересовать.

Источник

Оцените статью