Как установить доверенный сертификат ЦС на Android-устройство?

Я создал свой собственный сертификат CA и теперь хочу установить его на свое устройство Android Froyo (HTC Desire Z), чтобы оно доверяло моему сертификату.

Android хранит сертификаты ЦС в своем хранилище ключей Java в /system/etc/security/cacerts.bks . Я скопировал файл на свой компьютер, добавил свой сертификат с помощью portecle 1.5 и отправил его обратно на устройство.

Теперь Android, похоже, не перезагружает файл автоматически. Я прочитал в нескольких сообщениях в блоге, что мне нужно перезагрузить устройство. Это приведет к тому, что файл снова будет перезаписан исходным.

Моя следующая попытка заключалась в том, чтобы установить сертификат с SD-карты, скопировав его и используя соответствующий параметр в меню настроек. Устройство сообщает мне, что сертификат был установлен, но, видимо, не доверяет сертификату. Более того, когда я пытаюсь скопировать хранилище ключей на свой компьютер, я все равно нахожу исходный стандартный файл cacerts.bks .

Итак, как правильно установить мой собственный корневой сертификат ЦС на устройстве Android 2.2 в качестве доверенного сертификата? Есть ли способ сделать это программно?


До Android KitKat вам необходимо выполнить рутирование устройства для установки новых сертификатов.

С Android KitKat (4.0) до Nougat (7.0) это возможно и просто. Мне удалось установить сертификат Charles Web Debbuging Proxy на моем устройстве без рутирования и успешно прослушивать SSL-трафик.

Извлечение из http://wiki.cacert.org/FAQ/ImportRootCert

До версии Android 4.0, с версией Android Gingerbread & Froyo, был один файл только для чтения (/system/etc/security/cacerts.bks), содержащий хранилище доверенных сертификатов со всеми Сертификаты CA (‘system’) доверенные по умолчанию на Android. Его используют как системные приложения, так и все приложения, разработанные с помощью Android SDK. Используйте эти инструкции по установке сертификатов CAcert на Android Gingerbread, Froyo, …

Начиная с Android 4.0 (Android ICS/’Ice Cream Sandwich’, Android 4.3 ‘Jelly Bean’ и Android 4.4 ‘KitKat ‘), системные доверенные сертификаты находятся в системном разделе (только для чтения) в папке’/system/etc/security/’в виде отдельных файлов. Однако теперь пользователи могут легко добавлять свои собственные «пользовательские» сертификаты, которые будут храниться в «/data/misc/keychain/certs-added».

Системными сертификатами можно управлять на Android устройства в разделе «Настройки» -> «Безопасность» -> «Сертификаты» -> «Система», тогда как доверенные сертификаты пользователя управляются там в разделе «Пользователь». При использовании доверенных сертификатов пользователя Android вынуждает пользователя устройства Android применять дополнительные меры безопасности: использование PIN-кода, графического ключа или пароля для разблокировки устройства является обязательным при использовании сертификатов, предоставленных пользователем.

Установить сертификаты CAcert как доверенные сертификаты пользователя очень просто.. Установка новых сертификатов в качестве «доверенных системным» сертификатов требует дополнительной работы (и требует корневого доступа), но она позволяет избежать требования блокировки экрана Android.

Начиная с Android N , становится немного сложнее, см. Этот отрывок с веб-сайта Charles Proxy:

Начиная с Android N, вам нужно добавить конфигурацию в свое приложение чтобы он доверял сертификатам SSL, созданным Charles SSL Proxying. Это означает, что вы можете использовать SSL-прокси только с приложениями, которые вы контролируете.

Чтобы настроить приложение на доверие Чарльзу, вам необходимо добавить в приложение файл конфигурации сетевой безопасности. Этот файл может переопределить системное значение по умолчанию, позволяя вашему приложению доверять установленным пользователем сертификатам CA (например, корневому сертификату Charles). Вы можете указать, что это применимо только в отладочных сборках вашего приложения, чтобы производственные сборки использовали профиль доверия по умолчанию.

Добавьте файл res/xml/network_security_config.xml в ваше приложение :

        

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

  xml version = "1.0" encoding = "utf-8"?>     

Я потратил много времени, пытаясь найти ответ на этот вопрос (мне нужно Android, чтобы увидеть сертификаты StartSSL). Вывод: Android 2.1 и 2.2 позволяют импортировать сертификаты, но только для использования с WiFi и VPN. Пользовательского интерфейса для обновления списка доверенных корневых сертификатов нет, но обсуждается возможность добавления этой функции. Неясно, существует ли надежный обходной путь для ручного обновления и замены файла cacerts.bks.

Подробности и ссылки: http://www.mcbsys.com/techblog/2010/12/android-certificates/. В этом посте см. Ссылку на ошибку Android 11231 – вы можете добавить свой голос и запрос к этой ошибке.

  • 3
    Разработчик Android ответил на мой запрос re. обновление cacerts.bks: “во всех выпусках, начиная с 2.3, требуется OTA для обновления cacerts.bks на телефоне без рута. “code.google.com/p/android/issues/detail?id=11231#c25. OTA = по беспроводной сети, верно? Может быть, поэтому ваш телефон продолжает возвращаться к заводскому cacerts.bks? Однако если у вас есть root-доступ, похоже, вы сможете загрузить исходный код, добавить свой сертификат, а затем создать cacerts.bks с помощью скрипта certimport.sh. android.git.kernel.org/?p=platform/libcore.git;a= tree; f = luni/…. – Марк Берри, 22 дек. ’10 в 17:11
  • Спасибо. Очевидно, это был не тот ответ, который я хотел услышать, но кажется правильным. Я надеялся, что способ установить сертификат без обновления всей системы. Я, конечно, могу создать новый cacerts.bks, с корневым доступом я могу даже заменить старый, но он возвращается к исходной версии при каждой перезагрузке. Без перезагрузки Android, похоже, быть отказано в перезагрузке файла доверенных сертификатов. – Бьорн Маршоллек, 22 декабря 2010 г., 18:47
  • Как насчет установки сертификатов CA на платформах 3.X и 4.X? – Алок Кулкарни 02 апр. ’12 в 8:46
  • 4.X и далее: stackoverflow.com/questions/4461360/… – Дин Уайлд, 25 ноября 2015 г., 15:40

Я потратил много времени, пытаясь найти ответ на этот вопрос (мне нужно Android, чтобы увидеть сертификаты StartSSL). Вывод: Android 2.1 и 2.2 позволяют импортировать сертификаты, но только для использования с WiFi и VPN. Пользовательского интерфейса для обновления списка доверенных корневых сертификатов нет, но обсуждается возможность добавления этой функции. Неясно, существует ли надежный обходной путь для ручного обновления и замены файла cacerts.bks.

Подробности и ссылки: http://www.mcbsys.com/techblog/2010/12/android-certificates/. В этом сообщении см. Ссылку на ошибку Android 11231 – возможно, вы захотите добавить свой голос и запрос к этой ошибке.


Если вам нужен сертификат для HTTPS-соединений, вы можете добавить файл .bks в качестве необработанного ресурса в свое приложение и расширить DefaultHttpConnection, чтобы ваши сертификаты использовались для HTTPS-соединения.

 открытый класс MyHttpClient расширяет DefaultHttpClient {частные ресурсы _resources;  общедоступный MyHttpClient (ресурсы ресурсов) {_resources = resources;  } @Override protected ClientConnectionManager createClientConnectionManager () {SchemeRegistry registry = new SchemeRegistry ();  registry.register (новая схема ("http", PlainSocketFactory .getSocketFactory (), 80));  если (_resources! = null) {registry.register (новая схема ("https", newSslSocketFactory (), 443));  } else {registry.register (новая схема ("https", SSLSocketFactory. getSocketFactory (), 443));  } вернуть новый SingleClientConnManager (getParams (), registry);  } private SSLSocketFactory newSslSocketFactory () {попробуйте {KeyStore trust = KeyStore.getInstance ("BKS");  InputStream in = _resources.openRawResource (R.raw.mystore);  попробуйте {trust.load (in, "pwd" .toCharArray ());  } наконец {in.close ();  } вернуть новый SSLSocketFactory (доверенный);  } catch (Exception e) {выбросить новую AssertionError (e);  }}} 
  • Спасибо за ваш ответ. На самом деле мне нужно установить сертификат таким образом, чтобы каждое приложение на устройстве доверяло сертификату. Та же проблема должна существовать и для некоторых небольших центров сертификации, таких как CAcert, сертификаты которых по умолчанию не являются доверенными. Как они устанавливают свои сертификаты? – Бьорн Маршоллек 20 дек. ’10 в 17:48
  • Вы пробовали: Настройки -> Безопасность -> Установить с SD-карты – Александр Эггер, 20 декабря 2010 г., 20:11
  • Также это может быть интересно: android.git.kernel.org/?p=platform/packages/apps/… – Александр Эггер, 20 дек. ’10 в 20:17
  • У меня та же проблема, мне нужно загрузить сертификат .PDX X509 с помощью приложения Adroid 2.3.3, а затем создать SSL-соединение. Может ли кто-нибудь помочь мне с закомментированным кодом? – AndroidLearner 17 июл., 2012 в 17:35

Если вам нужен сертификат для HTTPS-соединений, вы можете добавить файл .bks в качестве необработанного ресурса в свое приложение и расширить DefaultHttpConnection, чтобы ваши сертификаты используются для соединений HTTPS.

 открытый класс MyHttpClient расширяет DefaultHttpClient {частные ресурсы _resources;  общедоступный MyHttpClient (ресурсы ресурсов) {_resources = resources;  } @Override protected ClientConnectionManager createClientConnectionManager () {SchemeRegistry registry = new SchemeRegistry ();  registry.register (новая схема ("http", PlainSocketFactory .getSocketFactory (), 80));  если (_resources! = null) {registry.register (новая схема ("https", newSslSocketFactory (), 443));  } else {registry.register (новая схема ("https", SSLSocketFactory. getSocketFactory (), 443));  } вернуть новый SingleClientConnManager (getParams (), registry);  } private SSLSocketFactory newSslSocketFactory () {попробуйте {KeyStore trust = KeyStore.getInstance ("BKS");  InputStream in = _resources.openRawResource (R.raw.mystore);  попробуйте {trust.load (in, "pwd" .toCharArray ());  } наконец {in.close ();  } вернуть новый SSLSocketFactory (доверенный);  } catch (Exception e) {выбросить новую AssertionError (e);  }}} 

Связанное здесь руководство, вероятно, ответит на исходный вопрос без необходимости программирования настраиваемого коннектора SSL.

Нашел очень подробное руководство по импорту корневых сертификатов, которое фактически поможет вам установить доверенные сертификаты CA на разных версиях устройств Android (среди других устройств).

Обычно вам необходимо:

  1. Загрузить: cacerts.bks со своего телефона.

    adb pull/system/etc/security/cacerts.bks cacerts.bks

  2. Загрузите файл .crt из центра сертификации, который вы хотите разрешить.
  3. Измените файл cacerts.bks на своем компьютере с помощью поставщика BouncyCastle
  4. Загрузите файл cacerts.bks обратно на свой телефон и перезагрузитесь.

Вот более подробный шаг шаг для обновления более ранней версии android pho nes: Как обновить хранилище ключей центра сертификации безопасности HTTPS на устройстве до Android 4.0


Связанное здесь руководство, вероятно, ответит на исходный вопрос без необходимости программирования настраиваемого коннектора SSL.

Нашел очень подробное руководство по импорту корневых сертификатов, которое фактически поможет вам установить доверенные сертификаты ЦС на разные версии устройств Android (среди других устройств).

В основном вам необходимо:

  1. Загрузите: файл cacerts.bks со своего телефона.

    adb pull/system/etc/security/cacerts. bks cacerts.bks

  2. Загрузите файл .crt из центра сертификации, который вы хотите разрешить.
  3. Измените файл cacerts.bks на вашем компьютере с помощью BouncyCastle Provider
  4. Загрузите файл cacerts.bks обратно в свой телефон и перезагрузитесь.

Вот более подробный шаг за шагом для обновления более ранних телефонов Android: Как обновить хранилище ключей центра сертификации безопасности HTTPS на pre-android-4. 0 устройство


Есть НАМНОГО проще решение этого вопроса, чем опубликовано здесь или в связанных темах. Если вы используете веб-просмотр (как и я), вы можете добиться этого, выполнив в нем функцию JAVASCRIPT. Если вы не используете веб-просмотр, вы можете создать для этой цели скрытый. Вот функция, которая работает практически в любом браузере (или веб-просмотре), чтобы запустить установку CA (обычно через общий репозиторий сертификатов os, в том числе на Droid). Он использует хороший трюк с iFrames. Просто передайте этой функции URL-адрес файла .crt:

 function installTrustedRootCert (rootCertUrl) {id = "rootCertInstaller";  iframe = document.getElementById (id);  если (iframe! = null) document.body.removeChild (iframe);  iframe = document.createElement ("iframe");  iframe.id = id;  iframe.style.display = "нет";  document.body.appendChild (iframe);  iframe.src = rootCertUrl;} 

ОБНОВЛЕНИЕ:

Трюк с iframe работает на дроидах с API 19 и выше, но более старые версии веб-просмотра выиграли так не работает. Однако общая идея все еще работает – просто загрузите/откройте файл с помощью веб-просмотра, а затем позвольте операционной системе взять на себя управление. Это может быть более легкое и более универсальное решение (сейчас в реальной Java):

 public static void installTrustedRootCert (final String certAddress) {WebView certWebView = new WebView (instance_);  certWebView.loadUrl (certAddress);  } 

Обратите внимание, что instance_ является ссылкой на Activity. Это отлично работает, если вы знаете URL-адрес сертификата. В моем случае, однако, я решаю это динамически с помощью программного обеспечения на стороне сервера. Мне пришлось добавить изрядное количество дополнительного кода, чтобы перехватить URL-адрес перенаправления и вызвать его таким образом, чтобы не вызывать сбоя из-за сложности потоковой передачи, но я не буду добавлять сюда всю эту путаницу …


Для этого есть НАМНОГО более простое решение, чем опубликованное здесь или в связанных темах. Если вы используете веб-просмотр (как и я), вы можете добиться этого, выполнив в нем функцию JAVASCRIPT. Если вы не используете веб-просмотр, вы можете создать для этой цели скрытый. Вот функция, которая работает практически в любом браузере (или веб-просмотре), чтобы запустить установку CA (обычно через общий репозиторий сертификатов os, в том числе на Droid). Он использует хороший трюк с iFrames. Просто передайте этой функции URL-адрес файла .crt:

 function installTrustedRootCert (rootCertUrl) {id = "rootCertInstaller";  iframe = document.getElementById (id);  если (iframe! = null) document.body.removeChild (iframe);  iframe = document.createElement ("iframe");  iframe.id = id;  iframe.style.display = "нет";  document.body.appendChild (iframe);  iframe.src = rootCertUrl;} 

ОБНОВЛЕНИЕ:

Трюк с iframe работает на дроидах с API 19 и выше, но более старые версии веб-просмотра выиграли так не работает. Однако общая идея все еще работает – просто загрузите/откройте файл с помощью веб-просмотра, а затем позвольте операционной системе взять на себя управление. Это может быть более легкое и более универсальное решение (сейчас в реальной Java):

 public static void installTrustedRootCert (final String certAddress) {WebView certWebView = new WebView (instance_);  certWebView.loadUrl (certAddress);  } 

Обратите внимание, что instance_ является ссылкой на Activity. Это отлично работает, если вы знаете URL-адрес сертификата. В моем случае, однако, я решаю это динамически с помощью программного обеспечения на стороне сервера. Мне пришлось добавить изрядное количество дополнительного кода, чтобы перехватить URL-адрес перенаправления и вызвать это так, чтобы не вызывать сбоя из-за сложности потоковой передачи, но я не буду добавлять сюда всю эту путаницу …


То, что я сделал, чтобы использовать сертификаты startssl, было довольно легко. (на моем телефоне с root-доступом)

Я скопировал/system/etc/security/cacerts.bks на свою SD-карту

Загрузил http://www.startssl.com/ certs/ca.crt и http://www.startssl.com/certs/sub.class1.server.ca.crt

Перешли на portecle.sourceforge.net и запустили portecle прямо с веб-страницы .

Открыл мой файл cacerts.bks с моей SD-карты (ничего не ввел при запросе пароля)

Выберите импорт в портакле и открыл sub.class1.server.ca .crt, в моем случае у него уже был ca.crt, но, возможно, вам тоже нужно его установить.

Сохранено хранилище ключей и скопировано baxck в/system/etc/security/cacerts.bks (на всякий случай я сделал резервную копию этого файла)

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

  • Новое в Mozilla: недоверие к новым сертификатам WoSign и StartCom. – jww 29 окт., В 8:52
  • есть идеи, как поставить cacert. bks обратно на устройство без рутирования? – Боб 22 фев. В 18:33

То, что я сделал, чтобы можно было использовать сертификаты startssl, было довольно легко. (на моем телефоне с root-доступом)

Я скопировал/system/etc/security/cacerts.bks на свою SD-карту

Загрузил http://www.startssl.com/ certs/ca.crt и http://www.startssl.com/certs/sub.class1.server.ca.crt

Перешли на portecle.sourceforge.net и запустили portecle прямо с веб-страницы .

Открыл мой файл cacerts.bks с моей SD-карты (ничего не ввел при запросе пароля)

Выберите импорт в портакле и открыл sub.class1.server.ca .crt, в моем случае у него уже был ca.crt, но, возможно, вам тоже нужно его установить.

Сохранено хранилище ключей и скопировано baxck в/system/etc/security/cacerts.bks (на всякий случай я сделал резервную копию этого файла)

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


Эти шаги сработали для меня:

  1. Установите приложение Dory Certificate для Android на свое мобильное устройство: https://play.google.com/ store/apps/details? id = io.tempage.dorycert & hl = en_US
  2. Подключите мобильное устройство к ноутбуку с помощью USB-кабеля.
  3. Создайте корневую папку во внутренней памяти телефона, скопируйте файл сертификата в эту папку и отсоедините кабель.
  4. Откройте приложение Dory Certificate для Android, нажмите круглую кнопку [+] и выберите правильный параметр «Импортировать сертификат файла».
  5. Выберите формат, укажите имя (я ввел то же, что и имя файла), просмотрите файл сертификата и нажмите [OK].
  6. Три карты w плохой список вверх. Я проигнорировал карточку, на которой была только кнопка [ПОДПИСАТЬ CSR], и продолжил нажимать кнопку [УСТАНОВИТЬ] на двух других карточках.
  7. Я обновил веб-приложение PWA, которое я открывал без своего мобильного Chrome (он размещен на локальном веб-сервере IIS) и voala! Нет предупреждающего сообщения о Chrome. Зеленый замок был там. Это сработало.

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

  • Устройство Apple: http://help.netmotionsoftware.com/support/docs/mobilityxg/1100/help/mobilityhelp.htm#page/Mobility%2520Server%2Fconfig.05.083.html%23
  • Устройство Android: http://help.netmotionsoftware.com/support/docs/mobilityxg/1100/help/mobilityhelp.htm#page/Mobility%20Server/config.05.084.html

Наконец, это может быть неактуальным, но если вы хотите создать и настроить самозаверяющий сертификат (с помощью mkcert) для своего приложения (веб-сайта) PWA, размещенного на локальном веб-сервере IIS, я перешел на эту страницу:

https://средний. com/@ aweber01/local-trusted-development-Certific-with-mkcert-and-iis-e09410d92031

Спасибо и надеюсь, что это поможет !! 🙂


Эти шаги сработали для меня:

  1. Установите приложение Dory Certificate Android на свой мобильный устройство: https://play.google.com/store/apps/details?id=io.tempage.dorycert&hl=en_US
  2. Подключите мобильное устройство к ноутбуку с помощью кабеля USB.
  3. Создайте корневую папку во внутренней памяти телефона, скопируйте файл сертификата в эту папку и отсоедините кабель.
  4. Откройте приложение Dory Certificate Android, нажмите круглую кнопку [+] и выберите правую кнопку «Импорт» Параметр сертификата файла.
  5. Выберите формат, укажите имя (я ввел то же, что и имя файла), просмотрите файл сертификата и нажмите [OK].
  6. Три карточки будут список вверх. Я проигнорировал карточку, на которой была только кнопка [ПОДПИСАТЬ CSR], и продолжил нажимать кнопку [УСТАНОВИТЬ] на двух других карточках.
  7. Я обновил веб-приложение PWA, которое я открывал без своего мобильного Chrome (он размещен на локальном веб-сервере IIS) и voala! Нет предупреждающего сообщения о Chrome. Зеленый замок был там. Это сработало.

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

  • Устройство Apple: http://help.netmotionsoftware.com/support/docs/mobilityxg/1100/help/mobilityhelp.htm#page/Mobility%2520Server%2Fconfig.05.083.html%23
  • Устройство Android: http://help.netmotionsoftware.com/support/docs/mobilityxg/1100/help/mobilityhelp.htm#page/Mobility%20Server/config.05.084.html

Наконец, это может быть неактуальным, но если вы хотите создать и настроить самозаверяющий сертификат (с помощью mkcert) для своего приложения (веб-сайта) PWA, размещенного на локальном веб-сервере IIS, я перешел на эту страницу:

https://medium.com/@aweber01/locally-trusted-development-certificates-with-mkcert-and-iis-e09410d92031

Спасибо и надеюсь, что это поможет !! 🙂


Вот альтернативное решение, которое фактически добавляет ваш сертификат во встроенный список сертификатов по умолчанию: Доверять всем сертификатам с помощью HttpClient через HTTPS

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


Вот альтернативное решение, которое фактически добавляет ваш сертификат во встроенный список сертификатов по умолчанию: Доверие ко всем сертификатам с использованием HttpClient через HTTPS

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


Если у вас есть рутированное устройство, вы можете использовать модуль Magisk для перемещения пользовательских сертификатов в систему, чтобы он стал доверенным сертификатом

https://github.com/yochananmarqos/Move-Certificates


Если у вас есть рутированное устройство, вы можете использовать модуль Magisk для перемещения пользовательских сертификатов в систему, чтобы он стал доверенным сертификатом

https://github.com/yochananmarqos/Move-Certificates



Какие доверенные корневые центры сертификации включены в Android по умолчанию?

Кажется, не существует центрального ресурса Android, в котором перечислены доверенные корневые центры сертификации, включенные в ОС или браузер по умолчанию (связанный вопрос по SO), так как я могу узнать, какие из них включены в мои телефон по умолчанию?

Учитывая количество скомпрометированных корневых сертификатов и количество мошеннических SSL-сертификатов, созданных за последние пару лет, это проблема для всех, кто полагается на SSL для обеспечения безопасности , иначе вы не узнаете, хотите ли вы удалить какие-либо доверенные центры сертификации.

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


В ICS или более поздних версиях вы можете проверить это в своем настройки. Перейдите в Настройки-> Безопасность-> Надежные учетные данные , чтобы увидеть список всех ваших доверенных центров сертификации, разделенных в зависимости от того, включены ли они в систему или установлены пользователем.

Более ранние версии Android хранят свои сертификаты в /system/etc/security в зашифрованном пакете с именем cacerts.bks , который можно извлечь с помощью Bouncy Castle. и программа keytool . Сводка состоит в том, чтобы сначала вытащить пакет с помощью adb (вам нужна корневая оболочка), затем вы можете использовать Bouncy Castle для отображения содержимого пакета:

 shell ~ $ adb pull/system/etc/security/cacerts.bks`shell~$ keytool -keystore cacerts.bks -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider -storepass changeit -v -list  

Существует также по крайней мере одно приложение, которое вы можете попробовать, если не хотите использовать оболочку: CACertMan (для изменения списка требуется root, но он должен позволять вам просматривать список без рута). Я считаю, что это произошло из-за фиаско DigiNotar, поскольку в то время у пользователя не было особо простых способов отозвать сертификат. Поскольку сертификаты хранятся по-разному в ICS и более поздних версиях, это приложение будет работать только на устройствах с Gingerbread (или более ранней версией), но в любом случае оно устарело в ICS/JB.

Оцените статью
futurei.ru
Добавить комментарий