Подписи приложений использующих этот идентификатор не совпадают

Содержание

Как устранить ошибки Google Play при установке и обновлении приложений

Подписи приложений использующих этот идентификатор не совпадают

Еще не сталкивались с ошибками, выскакивающими при установке или обновлении приложений в Google Play? Ничего, это лишь дело времени! Если вы однажды столкнетесь с непредвиденными трудностями, не стоит опускать руки. Загляните в наше руководство по борьбе с типичными ошибками!

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

error 491 — ошибка 491

Удалите свой аккаунт Google. Для этого перейдите к настройкам смартфона, пролистайте до аккаунтов (учетных записей), войдите в профиль Google и удалите его. Перезагрузите смартфон и подключите аккаунт заново. Дальше перейдите к настройкам, войдите в меню приложений, кликните по вкладке «Все», найдите «Сервисы Google Play», последовательно нажмите «Очистить данные» и «Остановить».

error 498 — ошибка 498

Проблема связана с переполнением кэша устройства. Удалите ненужные приложения и файлы.

Перезагрузите смартфон в режиме Recovery — нажмите одновременно клавишу уменьшения звука и Home (на большинстве устройств от Samsung) или клавишу уменьшения звука и питания (на большинстве других устройств).

Этот режим предлагает ряд опций. Выберите «Wipe cache partition» при помощи клавиш управления звуком и подтвердите действие нажатием клавиши питания.

error 919 — ошибка 919

Решение 1. На вашем смартфоне нет свободного места. Избавьтесь от лишней музыки, видео и объемных приложений.
Решение 2. Измените настройки APN.

error 413 — ошибка 413

Если вы используете прокси-сервер, помните, что это может вызвать проблемы с работой Google Play Маркет.

Перейдите к настройкам, войдите в меню приложений, кликните по вкладке «Все», найдите «Сервисы Google Play», последовательно нажмите «Очистить данные» и «Остановить». Сделайте те же действия по отношению к приложению Google Play Маркет и очистите кэш интернет-браузера.

error 923 — ошибка 923

Удалите свой аккаунт Google и избавьтесь от ненужных приложений, которые засоряют свободное место. Далее перезагрузите телефон в режиме Recovery. Выберите «Wipe cache partition» и загрузите устройство привычным способом. Не беспокойтесь, ваши персональные данные не будут удалены. Установите аккаунт Google заново.

error 921 — ошибка 921

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

error 403 — ошибка 403

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

Подключитесь к Google Play Маркет с верной учетной записи. Удалите проблемное приложение. Еще раз попробуйте установить приложение, нажав кнопку «Купить».

error 492 — ошибка 492

Перейдите к настройкам, войдите в меню приложений, кликните по вкладке «Все», найдите «Сервисы Google Play», последовательно нажмите «Очистить данные» и «Остановить». Сделайте те же действия по отношению к приложению Google Play Маркет. Если проблема не исчезнет, удалите dalvik-кэш.

Эта возможность доступна в режиме Recovery при наличии ROOT-прав. Если у вас нет прав суперпользователя, необходимо выполнить data wipe/factory reset. Эта опция доступна всем все в том же режиме Recovery.

Будьте осторожны, это действие очистит все ваши данные на смартфоне, необходимо предварительное сохранение резервной копии информации.

error 927 — ошибка 927

Просто подождите пару минут, пока Google Play Маркет завершит процедуру обновления. Если проблема не решается, перейдите к настройкам, войдите в меню приложений, кликните по вкладке «Все», найдите «Сервисы Google Play», последовательно нажмите «Очистить данные» и «Остановить». Сделайте те же действия по отношению к приложению Google Play Маркет.

error 101 — ошибка 101

Банальное удаление лишних приложений должно помочь. В противном случае очистите данные Google Play Маркет, удалите аккаунт Google и заново войдите.

error 481 — ошибка 481

Удалите текущий аккаунт Google и используйте другой.

error 911 — ошибка 911

Решение 1. Очистите данные Google Play Маркет. Перейдите к настройкам, войдите в меню приложений, кликните по вкладке «Все», найдите «Google Play Маркет», последовательно нажмите «Остановить», «Очистить данные» и «Очистить кэш».

Решение 2. Если вы используете WiFi-соединение, требующее авторизации на веб-странице, скорее всего, возможность аутентификации исчерпана. Войдите в APN с помощью вашего мобильного браузера заново. Откройте Google Play Маркет и запустите обновление приложения еще раз. Если это не помогло, проблема кроется в самой сети WiFi.

Решение 3. Просто подключитесь к другой WiFi-сети и запустите обновление.

Способ 4. Используйте сотовую сеть для обновления вместо WiFi. Но используйте данный метод только для обновления небольших игр и приложений. Крупные обновления могут ударить по вашему карману.

error 920 — ошибка 920

Решение 1. Выключите WiFi. Включите WiFi. Запустите Google Play Маркет и запустите установку или обновление приложения.

Решение 2. Удалите аккаунт Google. Перезагрузите телефон и авторизуйтесь заново. В качестве альтернативы вы можете добавить другой аккаунт Google, запустить магазин приложений и скачать приложение.

Решение 3. Перейдите к настройкам, войдите в меню приложений, кликните по вкладке «Все», найдите «Google Play Маркет», удалите обновления, нажмите «Очистить данные» и «Очистить кэш», перезагрузите смартфон. Откройте Маркет и установите приложения.

error 941 — ошибка 941

Перейдите к настройкам, войдите в меню приложений, кликните по вкладке «Все», найдите «Google Play Маркет», нажмите «Остановить», «Очистить данные» и «Очистить кэш». Также очистите кэш и удалите данные Диспетчера загрузки. Откройте Маркет и попробуйте обновиться. Если проблема не исчезла, дополнительно попробуйте удалить обновления Google Play Маркет.

error 504 — ошибка 504

Решение 1. Перейдите к настройкам, войдите в меню приложений, кликните по вкладке «Все», найдите «Google Play Маркет», нажмите «Очистить данные» и «Очистить кэш». Повторите действия и для «Google service framework».

Решение 2. Удалите аккаунт Google. Остановите, удалите данные и кэш для Google Play Маркет, Google service framework и Диспетчера загрузок. Добавьте аккаунт Google и перезагрузите смартфон.

error 495 — ошибка 495

Решение 1. Перейдите к настройкам, войдите в меню приложений, кликните по вкладке «Все», найдите «Google Play Маркет», нажмите «Очистить данные» и «Очистить кэш». Повторите действия и для «Google service framework». Попробуйте установить обновления. Если ошибка все равно выскакивает, попробуйте сперва удалить обновления Google Play Маркет.

Решение 2. Удалите аккаунт Google. Остановите, удалите данные и кэш для Google Play Маркет, Google service framework и Диспетчера загрузок. Добавьте аккаунт Google и перезагрузите смартфон.

error rh01 — ошибка rh01

Решение 1. Перейдите к настройкам, войдите в меню приложений, кликните по вкладке «Все», найдите «Google Play Маркет», нажмите «Очистить данные» и «Очистить кэш». Повторите действия и для «Google service framework». Попробуйте установить обновления.

Решение 2. Удалите аккаунт Google. Остановите, удалите данные и кэш для Google Play Маркет, Google service framework и Диспетчера загрузок. Добавьте аккаунт Google и перезагрузите смартфон.

error rpc:s-5:aec-0 — ошибка rpc:s-5:aec-0

Решение 1. Перейдите к настройкам, войдите в меню приложений, кликните по вкладке «Все», найдите «Google Play Маркет», нажмите «Удалить обновления» и «Очистить кэш». Удалите кэш и данные для Google service framework и Диспетчера загрузок. Попробуйте установить обновления.

Решение 2. Удалите аккаунт Google. Остановите, удалите данные и кэш для Google Play Маркет, Google service framework и Диспетчера загрузок. Добавьте аккаунт Google и перезагрузите смартфон.

error -24 — ошибка -24

Решение 1 (необходим ROOT). Установите файловый менеджер, например, ROOT Manager. Во внутренней памяти перейдите к папке android/data/com.whatsapp и удалите ее. Установите whatsapp с Google Play Маркет.

Решение 2. Установите Cleanmaster. Удалите Whatsapp. Удалите остаточные файлы с помощью Cleanmaster.

Решение 3. Сделайте резервную копию приложений и данных, хранящихся на смартфоне, и сбросьте настройки устройства до заводских.

package file invalid

Решение 1. Найдите приложение в настройках устройства и удалите его кэш и данные.

Решение 2. Установите приложение с помощью веб-интерфейса Google Play Маркет.

Решение 3. Отключите WiFi и установите обновления с помощью мобильного интернета.

Решение 4. Удалите кэш и данные Google Play Маркет и Google service framework. Попробуйте обновиться. Если не сработало, удалите аккаунт Google. Перезагрузите смартфон и войдите заново в свой аккаунт Google.

installation unssuccesful error

Решение 1. Удалите приложение и установите его заново.

Решение 2. Очистите кэш Google Play Маркет.

Решение 3. Удалите обновления Google Play Маркет.

Решение 4. Отключите SD-карту перед установкой приложения.

Решение 5. Удалите папку .android_secure

error rpc:aec:0]

Удалите аккаунт Google. Удалите все синхронизированные аккаунты. Очистите данные Google Play Маркет. Перезагрузите смартфон.

RPC:S-3

Удалите аккаунт Google. Добавьте его заново или подключите другой профиль.

А какие ошибки установки приложений в Google Play встречали вы? Можете подсказать альтернативные способы решения проблем? Купить iPhone — не считается!

Источник: https://lifehacker.ru/kak-ustranit-oshibki-ustanovki-i-obnovleniya-prilozhenij-v-google-play/

Проверка подлинности источника запроса на стороне сервера

Большинствопрограмм на android подразумевают работу с удаленным сервером. Они отправляют ему запросы, а в ответ получают какие-то данные, например, если Вы пишете игру, таким образом может быть загружена и обновлена таблица рекордов.

Читайте также  Приложение whatsapp остановлено что делать

При разработке серверной части перед программистами в полной рост встает проблема идентификации приложения и пользователя, который обратился за данными. Довольно часто для коммуникации с сервером используется протокол HTTP.

Поэтому у любого мало-мальски понимающего хакера не возникнет труда самостоятельно составить POST запрос и подменить данные.

Google Play services с недавнего времени позволяет легко решить эту проблему. Для Android 2.2 и выше идентификация пользователя может осуществляться по данным о его Google аккаунте.

Предлагаемое решение представляет собой многошаговый процесс. Если не вдаваться в подробности, то работа с сервисом выгладит следующим образом: вы используете классGoogleAuthUtilкоторый обращается к Google Play services и возвращает Вам строку, называемую «ID Token» или идентификационной меткой.

Затем вы отправляете эту метку на свой сервер, и он, связавшись с Google, может выяснить какое приложение и какой пользователь пытаются  получить данные. На серверной стороне общение с Google происходит через App Engine  Cloud Endpoints. Подробнее об этой технологии можно прочитатьздесь.

Теперь, когда логика процесса понятна, давайте рассмотрим его более подробно.

Регистрация приложения

Для регистрации своего приложения Вам придется воспользоватьсяGoogle API Console. Нужно будет создать новый проект, при этом совсем не обязательно тратить время на придумывание понятного человеку названия и разработку красивого графического оформления этого проекта.

Вы можете также настроить и использовать этот проект для доступа к большому числу различных Google API.

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

Создание Client ID

Для проекта потребуется создать дваOAuth 2.0 «Client ID» — для серверной части и для Android клиента. Серверный «Client ID» не требует никакой настройки, поскольку от него нам понадобится только строка, которая будет выглядеть как-то так«9414861317621.apps.googleusercontent.

com».

С  Client ID для Android клиента все немного сложнее. Нужно задать package name и подпись-сертификат. Package name задается также, как и в Вашем Android проекта. Его можно посмотреть в самом верху AndroidManifest.xml. Package name обычно выглядит как-то так: com.example.

identity.

Чтобы получить подпись-сертификат для вашего приложения, нужно выполнить следующую команду в консоли:

$ keytool -exportcert -alias -keystore -v -list

Затем нужно скопировать октет «SHA1» и вставить его в поле Developer Console. Опять же в результате будет создана Client ID строка, которая нам потребуется в дальнейшем.

Обращение к Google Play из Android приложения

В своем Android приложении необходимо использовать класс GoogleAuthUtil для обращения к Google Play services. Нам понадобится вызвать метод getToken(email, scope), который собственно и вернет нам требуемую ID метку. В качестве параметра scope нужно использовать строку вида

audience:server:client_id:X

где X — Client ID вашего сервера. Для рассмотренного выше примера это строка будет иметь вид: «audience:server:client_id:9414861317621.apps.googleusercontent.com«.

Обычно, когда вы пытаетесь выполнить  OAuth авторизацию на сервере, пользователю показывается окно, где он должен согласиться на передачу своих данных.

В данном случае система глядя на параметр scope понимает, что сервер и ваше Android приложение входят в один и тот же проект, поэтому никаких лишних вопросов не задается и метка возвращается автоматически.

Отправка метки на сервер

Когда в приложение потребуется получить доступ к серверу, вы должны отправить ему ID метку. Проще всего это сделать в POST запросе, добавив ее в URL параметры. Нужно понимать, что обычное HTTP соединение легко прослушивается, поэтому чтобы предотвратить перехват вашей ID метки необходимо использовать HTTPS.

Использование метки

Когда ваш сервер получил метку от Android приложения, он должен проверить ее. Для этого нужно выполнить два шага:

  • проверить, что метка подписана Google
  • проверить, что она действительно предназначена для вашего сервера

Чтобы проверить, что метка подписана с помощью ключа Google, нужно обратиться на страницу  www.googleapis.com/oauth2/v1/certs, где Google публикует свои публичные ключи (которые, кстати регулярно меняются). Нужно убедиться, что полученная ID метка подписана с помощью одного из них.

Существует десятки библиотек, которые реализуют эту задачу. Ниже будут показаны примеры на Java, Ruby и PHP. Библиотеки умеют кешировать ключи и по необходимости обновляют их. Поэтому проверка происходит очень быстро.

Что касается второй проверки — тут все немного сложнее.

ID метка помимо собственно подписи несет в себе дополнительную информацию в формате JSON и большинство библиотек, осуществляющих проверку подписи также умеют распознавать и возвращать ее.

Обычно результат выдается в виде хеша или словаря, имеющих следующие поля:aud,cidиemail.

Прежде всего, Вы должны проверить значение поляaud. Оно должно совпадать со значением параметраscope, который вы использовали в своем Android приложении при вызове методаgetToken. Это действительно важно. Если Вы не сделаете эту проверку, любой другой программист сможет использовать Ваш сервер из своего приложения.

Также вы можете проверить параметрcid. Он содержит Client ID Android приложения. Вообще у вас может быть несколько различных Android приложений, которые работают с сервером и проверка этого параметра позволит понять какое из них пытается получить информацию.

Самого пользователя можно идентифицировать по полюemail.

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

Даже если запрос посылается со взломанного устройства, хакер не сможет претвориться другим устройством, поскольку аутентификация происходит на стороне Google.

После того, как Вы идентифицировали пользователя, можете посылать ему информацию.

Исходный код серверной части

Приведенный ниже код демонстрирует проверку ID метки:

Java

import java.io.IOException;import java.security.GeneralSecurityException; import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;import com.google.api.client.http.javanet.NetHttpTransport;import com.google.api.client.json.JsonFactory;import com.google.api.client.json.gson.GsonFactory; publicclass Checker{ private finalList mClientIDs;private final String mAudience;private final GoogleIdTokenVerifier mVerifier;private final JsonFactory mJFactory;private String mProblem=»Verification failed. (Time-out?)»; public Checker(String[] clientIDs, String audience){mClientIDs= Arrays.asList(clientIDs);mAudience= audience;NetHttpTransport transport=new NetHttpTransport();mJFactory=new GsonFactory();mVerifier=new GoogleIdTokenVerifier(transport, mJFactory);} public GoogleIdToken.Payload check(String tokenString){GoogleIdToken.Payload payload=null;try{GoogleIdToken token= GoogleIdToken.parse(mJFactory, tokenString);if(mVerifier.verify(token)){GoogleIdToken.Payload tempPayload= token.getPayload();if(!tempPayload.getAudience().equals(mAudience))mProblem=»Audience mismatch»;elseif(!mClientIDs.contains(tempPayload.getIssuee()))mProblem=»Client ID mismatch»;elsepayload= tempPayload;}} catch(GeneralSecurityException e){mProblem=»Security issue: «+ e.getLocalizedMessage();} catch(IOException e){mProblem=»Network problem: «+ e.getLocalizedMessage();}return payload;} public String problem(){return mProblem;}}

Ruby. Необходимо установить google-id-token Ruby gem

require'google-id-token'validator= GoogleIDToken::Validator.newjwt= validator.check(token, required_audience, required_client_id)if jwtemail= jwt['email']elsereport»Cannot validate: #{validator.problem}»end

PHP реализацию можно посмотретьздесь. В частности нужно обратить внимание на функцию verifyIdToken вapiOAuth2.php.

Оригинал:Tim Bray — «Verifying Back-End Calls from Android Apps»
Перевод:Александр Ледков

Источник: http://www.mobilab.ru/androiddev/verifyingbackendcall.html

Устройство не сертифицировано Google в Play Маркет и других приложениях на Android — как исправить

28.03.2018  для начинающих | мобильные устройства

Указанная выше ошибка «Устройство не сертифицировано Google», чаще всего встречающаяся в Play Маркет не новая, но особенно часто с ней стали сталкиваться владельцы Android телефонов и планшетов начиная с марта 2018 года, поскольку Google что-то поменял в своей политики.

В этой инструкции подробно о том, как исправить ошибку Устройство не сертифицировано Google и продолжить использовать Play Маркет и остальные сервисы Google (Карты, Gmail и другие), а также кратко о причинах ошибки.

Причины ошибки «Устройство не сертифицировано» на Android

Начиная с марта 2018 года Google стал блокировать доступ не сертифицированных устройств (т.е. тех телефонов и планшетов, которые не проходили необходимую сертификацию или не отвечают каким-то требованиям Google) к сервисам Google Play.

С ошибкой можно было столкнуться и раньше на устройствах с кастомными прошивками, но сейчас проблема стала более распространена и не только на неофициальных прошивках, но и на просто китайских аппаратах, а также в эмуляторах Android.

Таким образом Google своеобразно борется с отсутствием сертификации на дешевых Android устройствах (а для прохождения сертификации они должны соответствовать конкретным требованиям Google).

Как исправить ошибку Устройство не сертифицировано Google

Конечные пользователи могут самостоятельно зарегистрировать свой не сертифицированный телефон или планшет (или устройство с кастомной прошивкой) для личного использования на сайте Google, после чего ошибка «Устройство не сертифицировано Google» в Play Маркет, Gmail и других приложениях появляться не будет.

Для этого потребуется выполнить следующие шаги:

  1. Узнайте Google Service Framework Device ID своего Android устройства. Это можно сделать, например, с помощью разного рода приложений Device ID (есть несколько таких приложений). Скачать приложение с неработающим Play Маркет можно вот такими способами: Как скачать APK с Play Маркет и не только.  Важное обновление: на следующий день после написания этой инструкции Google для регистрации стал требовать другой GSF ID, не содержащий букв (а приложений, которые его выдавали бы, я не нашел). Посмотреть его можно с помощью командыadb shell 'sqlite3 /data/data/com.google.android.gsf/databases/gservices.db «select * from main where name = \»android_id\»;»'или, если на вашем устройстве есть Root-доступ, с помощью менеджера файлов, способного просматривать содержимое баз данных, например, X-Plore File Manager (нужно открыть в приложении базу данных /data/data/com.google.android.gsf/databases/gservices.db на вашем устройстве найти Value для android_id, не содержащее букв, пример на скриншоте ниже). О том, как использовать команды ADB (если нет root-доступа) можно прочесть, например, в статье Установка кастомного рекавери на Android (во второй её части показывается запуск команд adb). 
  2. Зайдите под своей учетной записью Google на сайт https://www.google.com/android/uncertified/ (можно сделать и с телефона и с компьютера) и введите полученный ранее Device ID в поле «Идентификатор Аndroid». 
  3. Нажмите кнопку «Регистрация».

После регистрации приложения Google, в частности Play Маркет, должны работать как и прежде без сообщений о том, что устройство не зарегистрировано (если это не произошло сразу или появились другие ошибки, попробуйте очистить данные приложения, см. инструкцию Не скачиваются приложения Android из Play Маркет).

Статус сертификации Android устройства при желании можно посмотреть следующим образом: запустите Play Маркет, откройте «Настройки» и обратите на последний пункт списка настроек — «Сертификация устройства».

Надеюсь, инструкция помогла решить проблему.

Дополнительная информация

Существует ещё один способ исправления рассматриваемой ошибки, однако он работает для конкретного приложения (Play Маркет, т.е. ошибка исправляется только в нем), требует Root-доступа и потенциально опасен для устройства (выполняйте только на свой страх и риск).

Суть его в замене содержимого системного файла build.prop (находится в system/build.prop, сохраните копию оригинального файла) следующим (замену можно произвести с помощью одного из файловых менеджеров с поддержкой Root-доступа):

  1. Используйте следующий текст для содержимого файла build.propro.product.brand =ro.product.manufacturer =ro.build.product =ro.product.model =ro.product.name =ro.product.device =ro.build.description =ro.build.fingerprint =
  2. Очистите кэш и данные приложений Play Маркет и Сервисы Google Play.
  3. Зайдите в меню рекавери и очистите кэш устройства и ART/Dalvik.
  4. Перезагрузите телефон или планшет и зайдите в Play Маркет.

Вы можете продолжить получать сообщения о том, что устройство не сертифицировано Google, но приложения из Play Маркет будут скачиваться и обновляться.

Однако, рекомендую именно первый «официальный» способ исправления ошибки на вашем Android устройстве.

А вдруг и это будет интересно:

Источник: https://remontka.pro/device-is-not-certified-by-google/

Подписание пакета приложения с помощью SignTool — UWP app developer

  • 09/30/2018
  • Время чтения: 8 мин

SignTool — это средство командной строки, используемое для цифровой подписи пакета приложения или пакета приложений с помощью сертификата.SignTool is a command line tool used to digitally sign an app package or bundle with a certificate.

Читайте также  Вылетает магазин windows 10 при выборе приложения

Сертификат может быть создан пользователем (для тестирования) или выдан компанией (для распространения).The certificate can either be created by the user (for testing purposes) or issued by a company (for distribution).

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

Signing an app package provides the user with verification that the app's data has not been modified after it was signed while also confirming the identity of the user or company that signed it. SignTool может подписать зашифрованные и незашифрованные пакеты приложения и пакеты приложений.SignTool can sign encrypted or unencrypted app packages and bundles.

Важно!

Если для разработки приложения использовали Visual Studio, рекомендуется применять мастер Visual Studio для создания и подписывания пакета приложения.

If you used Visual Studio to develop your app, it's recommended that you use the Visual Studio wizard to create and sign your app package. Дополнительные сведения см.

в разделе Упаковка приложения UWP с помощью Visual Studio.For more information, see Package a UWP app with Visual Studio.

Дополнительные сведения о подписи кода и сертификатах в целом см. в разделе Знакомство с процессом подписания кода.For more information about code signing and certificates in general, see Introduction to Code Signing.

Предварительные условияPrerequisites

  • Упакованное приложениеA packaged app Подробнее о ручном создании пакета приложения, создания пакета приложения с помощью средства MakeAppx.exe.To learn more about manually creating an app package, see Create an app package with the MakeAppx.exe tool.
  • Действительный сертификат подписиA valid signing certificate Дополнительные сведения о создании или импорте действительного сертификата подписи см. в разделе Создание или импорт сертификата для подписания пакета.For more information about creating or importing a valid signing certificate, see Create or import a certificate for package signing.
  • SignTool.exeSignTool.exe В зависимости от пути установки пакета SDK SignTool может находиться в следующих расположениях на компьютере с Windows 10: your installation path of the SDK, this is where SignTool is on your Windows 10 PC:
    • x86: C:\Program Files (x86)\Windows Kits\10\bin\x86\SignTool.exex86: C:\Program Files (x86)\Windows Kits\10\bin\x86\SignTool.exe
    • x64: C:\Program Files (x86)\Windows Kits\10\bin\x64\SignTool.exex64: C:\Program Files (x86)\Windows Kits\10\bin\x64\SignTool.exe

Применение SignToolUsing SignTool

SignTool может использоваться для подписывания файлов, проверки подписей и меток времени, удаления подписей и другого.SignTool can be used to sign files, verify signatures or timestamps, remove signatures, and more.

Так как нас интересует подписывание пакета приложения, мы рассмотрим команду sign.For the purpose of signing an app package, we will focus on the sign command. Подробные сведения об инструменте SignTool см. на справочной странице SignTool.

For full information on SignTool, see the SignTool reference page.

Определение хэш-алгоритмаDetermine the hash algorithm

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

When using SignTool to sign your app package or bundle, the hash algorithm used in SignTool must be the same algorithm you used to package your app. Например, если вы применили MakeAppx.

exe для создания пакета приложения с параметрами по умолчанию, то необходимо выбрать SHA256 в SignTool, поскольку это алгоритм, по умолчанию используемый в MakeAppx.exe.For example, if you used MakeAppx.

exe to create your app package with the default settings, you must specify SHA256 when using SignTool since that's the default algorithm used by MakeAppx.exe.

Чтобы узнать, какой алгоритм хэширования применялся при упаковке приложения, извлеките содержимое пакета и изучите файл AppxBlockMap.xml.To find out which hash algorithm was used while packaging your app, extract the contents of the app package and inspect the AppxBlockMap.xml file.

Инструкции по распаковке/извлечению пакета приложения см. в разделе Извлечение файлов из пакета приложения или пакета приложений.To learn how to unpack/extract an app package, see Extract files from a package or bundle.

Хэш-метод указан в элементе BlockMap и имеет следующий формат:The hash method is in the BlockMap element and has this format:

В этой таблице показан каждое значение HashMethod и соответствующий хэш-алгоритм:This table shows each HashMethod value and its corresponding hash algorithm:

Примечание

Так как в SignTool по умолчанию применяется алгоритм SHA1 (которого нет в MakeAppx.

exe), вам всегда необходимо указывать хэш-алгоритм при использовании SignTool.Since SignTool's default algorithm is SHA1 (not available in MakeAppx.

exe), you must always specify a hash algorithm when using SignTool.

Подпись пакета приложенияSign the app package

Если у вас есть все необходимые компоненты и вы определили, какой хэш-алгоритм применялся для упаковки приложения, то вы готовы подписать его.Once you have all of the prerequisites and you've determined which hash algorithm was used to package your app, you're ready to sign it.

Общий синтаксис командной строки при подписи пакета с помощью SignTool таков:The general command line syntax for SignTool package signing is:

SignTool sign [options]

Сертификат, используемый для подписания приложения, должен быть либо PFX-файлом либо установлен в хранилище сертификатов.The certificate used to sign your app must be either a .pfx file or be installed in a certificate store.

Чтобы подписать пакет приложения с помощью сертификата из PFX-файла, примените следующий синтаксис:To sign your app package with a certificate from a .pfx file, use the following syntax:

SignTool sign /fd /a /f .pfx /p .appxSignTool sign /fd /a /f .pfx /p .msix

Обратите внимание, что параметр /a позволяет SignTool автоматически выбрать наиболее подходящий сертификат.Note that the /a option allows SignTool to choose the best certificate automatically.

Если ваш сертификат не является PFX-файлом, используйте следующий синтаксис:If your certificate is not a .pfx file, use the following syntax:

SignTool sign /fd /n .appxSignTool sign /fd /n .msix

Кроме того, вы можете указать хэш SHA1 нужного сертификата вместо , с помощью следующего синтаксиса:Alternatively, you can specify the SHA1 hash of the desired certificate instead of using this syntax:

SignTool sign /fd /sha1 .appxSignTool sign /fd /sha1 .msix

Обратите внимание, что с некоторыми сертификатами пароль не используется.Note that some certificates do not use a password. Если для вашего сертификата не требуется пароль, опустите параметр «/p » в примерах команд.If your certificate does not have a password, omit «/p » from the sample commands.

Подписав пакет приложения с помощью действительного сертификата, вы сможете отправить пакет в Store.Once your app package is signed with a valid certificate, you're ready to upload your package to the Store. Дополнительные рекомендации по загрузке и отправке приложений в Store см. в разделе Отправка приложений.For more guidance on uploading and submitting apps to the Store, see App submissions.

Распространенные ошибки и их устранениеCommon errors and troubleshooting

Наиболее распространенные типы ошибок при использовании SignTool являются внутренними и обычно выглядят примерно так:The most common types of errors when using SignTool are internal and typically look something this:

SignTool Error: An unexpected internal error has occurred.Error information: «Error: SignerSign() failed.» (-2147024885 / 0x8007000B)

Если код ошибки начинается с 0x8008, например 0x80080206 (APPX_E_CORRUPT_CONTENT), подписываемый пакет не является допустимым.

If the error code starts with 0x8008, such as 0x80080206 (APPX_E_CORRUPT_CONTENT), the package being signed is invalid. При появлении такого типа ошибки, необходимо перестроить пакет и запустить SignTool еще раз.

If you get this type of error you must rebuild the package and run SignTool again.

В инструменте SignTool есть параметр отладки для показа ошибок с сертификатом и их фильтрации.SignTool has a debug option available to show certificate errors and filtering.

Чтобы использовать функцию отладки, поместите параметр /debug сразу после sign, а затем полную команду SignTool.

To use the debugging feature, place the /debug option directly after sign, followed by the full SignTool command.

SignTool sign /debug [options]

Наиболее распространенная ошибка — 0x8007000B.A more common error is 0x8007000B. О подобном типе ошибки можно найти дополнительные сведения в журнале событий.For this type of error, you can find more information in the event log.

Для получения дополнительных сведений в журнале событий:To find more information in the event log:

  • Запустите Eventvwr.mscRun Eventvwr.msc
  • Откройте журнал событий: Просмотр событий (локальных) -> Приложения и журналы служб -> Microsoft -> Windows -> AppxPackagingOM -> Microsoft-Windows-AppxPackaging/OperationalOpen the event log: Event Viewer (Local) -> Applications and Services Logs -> Microsoft -> Windows -> AppxPackagingOM -> Microsoft-Windows-AppxPackaging/Operational
  • Поиск последнего события об ошибкеFind the most recent error event

Внутренняя ошибка 0x8007000B обычно соответствует одному из следующих значений:The internal error 0x8007000B usually corresponds to one of these values:

Идентификатор событияEvent IDПример строки событияExample event stringПредложениеSuggestion
150150 ошибка 0x8007000B: имя издателя манифеста приложения (CN=Contoso) должно соответствовать имени субъекта сертификата подписи (CN=Contoso, C=US).error 0x8007000B: The app manifest publisher name (CN=Contoso) must match the subject name of the signing certificate (CN=Contoso, C=US). Имя издателя манифеста приложения должно точно соответствовать имени субъекта подписи.The app manifest publisher name must exactly match the subject name of the signing.
151151 ошибка 0x8007000B: указанный хэш-метод подписи (SHA512) должен соответствовать хэш-методу, использованному в схеме блоков пакета приложения (SHA256).error 0x8007000B: The signature hash method specified (SHA512) must match the hash method used in the app package block map (SHA256). В параметре /fd указан неправильный HashAlgorithm.The hashAlgorithm specified in the /fd parameter is incorrect. Повторно запустите SignTool, указав hashAlgorithm, совпадающий со схемой блоков пакета приложения (который использовался при создании пакета приложения)Rerun SignTool using hashAlgorithm that matches the app package block map (used to create the app package)
152152 Ошибка 0x8007000B: содержимого пакета приложения должно подходить под схему блоков.error 0x8007000B: The app package contents must validate against its block map. Пакет приложения поврежден и его необходимо перестроить для формирования новой схемы блока.The app package is corrupt and needs to be rebuilt to generate a new block map. Подробнее о ручном создании пакета приложения, см. Создания пакета приложения с помощью средства MakeAppx.exe.For more about creating an app package, see Create an app package with the MakeAppx.exe tool

Источник: https://docs.microsoft.com/ru-ru/windows/uwp/packaging/sign-app-package-using-signtool

Компиляция и сборка Android приложения (как это работает)

Дисклеймер: Я не 23 летний сеньор (мне 19 и до сеньора мне еще ой как далеко, года 4, поэтому супер статьи от меня не ждите.

Основа пути моего, разработчика как — обучение/изучение нового постоянное. Надеюсь, у вас тоже.

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

Читайте также  Как добавить приложение в автозагрузку windows 10

Конечно, можно было бы ограничиться инструкцией вроде:

  • Напишите код
  • Нажмите кнопочку Build & Run в вашей IDE
  • Продолжайте быть Android разработчиком

Но мы не ищем легких путей.
Примечание:
Это не перевод http://developer.android.com/tools/building/index.html, это статья, основанная в том числе и на данной документации.

В общих чертах процесс сборки приложения выглядит так:

(Оригинал здесь: developer.android.com/tools/building/index.html)

Нас особенно интересует второй этап (компиляция и сборка ресурсов), так что, рассмотрим его более подробно (21 этап как никак):

Пожалуйста, не прокручивайте диаграмму из-за того, что вам лень вникать, она не сложная, к тому же переведенная. Это основа статьи.

(Оригинал здесь: developer.android.com/tools/building/index.html)

Что есть что на диаграмме:

1. Ресурсы приложения — это все xml ресурсы из папки res вашего проекта + некомпилируемые бинарные ресурсы, например, картинки из res/drawable или файлы из /res/raw, а так же файлы из /assets/

2. aapt — утилита, которая ищет в вашем проекте компилируемые ресурсы, такие как AndroidManifest.

xml и xml файлы из res/ и компилирует их в бинарное представление, а изначально бинарные ресурсы, такие как картинки, и файлы из /res/raw и /assets не компилируются. Далее, эта утилита генерирует важнейший класс R.

java для вашего приложения, благодаря которому вы можете обращаться к ресурсам из вашего кода без всяких заморочек с чтением файлов, как скажем с /assets.

Кстати, кроме компиляции xml ресурсов, aapt создает файл resources.arsc, который представляет собой таблицу для маппинга ресурсов во время выполнения приложение, туда входят все ресурсы из /res/, в том числе и /res/raw/, содержимое /assets не включается в таблицу.

Полезно знать: Утилита aapt находится в папке platform-tools вашего Android SDK. Если вам захотелось сделать реверс-инжиниринг скомпилированных ресурсов приложения, вы можете воспользоваться apk-tool (https://code.google.com/p/android-apktool/)

3. R.java — класс, генерируемый утилитой aapt для того, чтобы вы могли обращаться к ресурсам из папки res без явной работы с файловой системой через библиотеки ввода/вывода.

Если кто-то еще не знал — всякие R.string, R.menu и прочее — это статические вложенные классы, а в R.string.app_name, app_name — public static final int поле класса. Получается, что правило-принцип CamelCase, применяемый в Java, для них нарушен, должно то быть: R.String, R.Menu, а с константами — R.String.APP_NAME, айайай Google.

4. Исходный код приложения — это ваши (или украденные форкнутые с других проектов) .java файлы с кодом проекта из папки src, все просто.

5. Java интерфейсы — это не те, обычные интерфейсы (обычные входят в состав исходного кода приложения, предыдущий пункт), которые вы используете в вашем коде, это интерфейсы, сгенерированные утилитой aidl (следующий пункт содержит пояснение).

6. .aidl файлы — это интерфейсы, которые вы можете написать на Java с немного необычным синтаксисом (на самом деле, язык называется AIDL — Android Interface Defenition Language).

Такие интерфейсы нужны для описания взаимодействия между различными процессами, например когда вам нужно, чтобы сервис (Service) вашего приложения работал не просто в отдельном потоке, а именно в отдельном процессе (у такого подхода есть как преимущества, например, раздельные квоты на память для процессов, так и недостатки — необходимость использования aidl), на Хабре есть статья, в которой раскрыта тема использования aidl http://habrahabr.ru/post/139432/).

7. aidl — утилита, которая транслирует ваши .aidl файлы в Java код, она находится в папке platform-tools вашего Android SDK.

8. Java компилятор — (наконец-то мы до него добрались!) это обычный javac из вашего JDK, которому дают на обработку исходный код приложения (4), R.java (3) и интерфейсы aidl, которые переведены в java код с помощью утилиты aidl

9. .class файлы — это «выхлоп» javac — байткод для JVM. Так как Dalvik VM не может интерпретировать java bytecode, а использует свой велосипед под название dex bytecode, то на этом компиляция проекта не заканчивается.

But why? Разработчики Android выбрали регистровую архитектуру Dalvik VM, вместо привычной для JVM — стековой архитектуры из двух ключевых соображений: 1. Производительность регистровой ВМ выше (инфа 100%), особенно на процессорах с RISC-архитектурой, а это все ARM процессоры.

Первые версии Dalviik VM даже не включали JIT (до Android 2.2), но давали терпимую производительность приложений, скажем я не испытывал особых проблем с HTC Desire на 2.1.

2.

java bytecode транслируется в меньший по объему dex bytecode, что уменьшает размер скомпилированного приложения.

10. dex компилятор (а точнее транслятор) — он транслирует .class файлы в classes.dex (Java bytecode в Dalvik bytecode). Описание .dex вы можете прочитать здесь source.android.com/tech/dalvik/dex-format.html.

Сам компилятор находится в папке platform-tools вашего Android SDK, запускать его можно через dx.bat (для Windows), при этом будет задействован dx.jar из папки platform-tools/lib

11. Сторонние библиотеки и .class файлы — это все то, что вы подключаете в проект как библиотеку или включаете в Build Path. Так как в качестве основного ЯП для Android выбрана Java, вы можете без проблем использовать практически любые java библиотеки, они просто будут обработаны dex компилятором.

12. classes.dex — в данный файл dex компилятор записывает весь исполняемый код вашего проекта.

Источник: https://habr.com/sandbox/63285/

Изменение идентификатора пользователя

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

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

Если предоставляемый системой список прав на документ либо позволяет редактирование документа целиком, либо опять-таки целиком запрещает его редактирование, то мы сталкиваемся с неразрешимой проблемой.

Авторизация доступа к полям документа в Notes

Программный комплекс Lotus Notes, широко признанный как лучшая основа для реализации систем документооборота, позволяет устанавливать права на отдельные поля или группы полей документа, а стандартная техника реализации вышеприведенных требований состоит в том, чтобы сначала предоставить пользователю право записи в поле, где должна быть подпись, а потом — после подписания — это право тут же снять. Впрочем, при реализации сложных циклов документооборота, включающих много взаимосвязанных документов, нередко возникают ситуации, неразрешимые с помощью только этих средств [Керн/Линд 2000].

Можно привести и другой пример, более тесно связанный с темой книги: для изменения информации о пользователе необходим доступ для записи в соответствующую базу данных, но не во всю, а только в определенную запись.

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

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

Например, в Win32 весь доступ к пользовательской базе данных осуществляется через системные вызовы, т. е. функции процесса-сервера исполняет само ядро системы.

В системах семейства Unix для этой цели был предложен оригинальный механизм, известный как setuid (setting of user id — установка [эффективного] идентификатора пользователя). По легенде, идея этого механизма возникла именно при решении задачи о том, как же пользователи смогут менять свои пароли, если их хэши будут храниться в одном файле.

Установка идентификатора пользователя в Unix

В Unix каждая задача имеет два пользовательских идентификатора: реальный и эффективный. Реальный идентификатор обычно совпадает с идентификатором пользователя, запустившего задание.

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

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

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

Например, программа /bin/passwd, вызываемая для смены пароля, принадлежит пользователю root, и у нее установлен признак setuid. Любой пользователь, запустивший эту программу, получает задачу, имеющую право модификации пользовательской базы данных, — файлов /etc/passwd и /etc/shadow.

Однако, прежде чем произвести модификацию, программа passwd проверяет допустимость модификации. Например, при смене пароля она требует ввести

старый пароль (рис. 12.20). Сменить пароль пользователю, который его забыл, может только root.
Другим примером setuid-программы может служить программа /bin/ps (process status — состояние процессов) в старых системах.

До установления стандарта на псевдофайловую систему /proc, Unix не предоставляла штатных средств для получения статистики об исполняющихся процессах.

Программа /bin/ps в таких системах анализировала виртуальную память ядра системы, доступную как файл устройства /dev/kmem, находила в ней список процессов и выводила содержащиеся в списке данные. Естественно, только привилегированная программа может осуществлять доступ к /dev/kmem.

Рис. 12.20. Смена идентификатора пользователя в Unix

Механизм setuid был изобретен одним из отцов-основателей Unix, Деннисом Ритчи, и запатентован компанией AT&T в 1975 г. Через несколько месяцев после получения патента, ему был дан статус public domain. Официально AT&T объяснила это тем, что плату за использование данного патента нецелесообразно делать высокой, а сбор небольшой платы с большого числа пользователей неудобен и тоже нецелесообразен.

Механизм setuid позволяет выдавать привилегии, доступные только суперпользователю, как отдельным пользователям (при этом setuid-программа должна явным образом проверять реальный идентификатор пользователя и сравнивать его с собственной базой данных), так и группам (при этом достаточно передать setuid-программу соответствующей группе и дать ей право исполнения на эту программу), таким образом, отчасти компенсируя недостаточную гибкость стандартной системы прав доступа и привилегий в системе Unix.

Серверные агенты в Notes

До совершенства механизм setuid доведен в Lotus Notes (этот пакет относится к прикладным программам, а не операционным системам, но реализует собственные схемы аутентификации и авторизации). В этой системе все объекты базы данных, в том числе и агенты (хранимые процедуры), снабжены электронной подписью.

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

Подпись подделать практически невозможно (используется алгоритм RSA с 631-битным ключом) [redbooks.ibm.com sg245341].

Источник: http://adminbook.ru/index.php?men1=5/12/10

Понравилась статья? Поделить с друзьями: