Архив рубрики: Android

Отвергнута публикация в GooglePlay по причине «заглушки» обрабоки onReceivedSslError в WebView

С недавних пор (ну как сказать недавних, где-то уж год), гугл стал отклонять приложения содержащие «заглушку» обработки SSL сертификата в компоненте WebView. Т.е. если раньше например достаточно было сделать так:

 
  @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed();
    }

,то теперь так сделать не получиться — нужно обязательно показывать пользователю сообщение о том, что что-то не так с сертификатом. Например вот так:

@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(R.string.notification_error_ssl_cert_invalid);
    builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.proceed();
        }
    });
    builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.cancel();
        }
    });
    final AlertDialog dialog = builder.create();
    dialog.show();
}

https://support.google.com/faqs/answer/7071387

Обновление Android Studio с версии 2.8 до 3.1

Ну не всё прошло гладко.. Скачаная с гугла инсталяшка под Linux так и не заработала. Многочисленные не понятные ошибки при компиляции проектов.. Заработал тольво вариант с установкой из ppa.

  sudo add-apt-repository ppa:maarten-fonville/android-studio
  sudo apt update
  sudo apt install android-studio

Но и после этого «сразу» не заработало для старых проектов. Лечим ошибку «Error:Failed to complete Gradle execution.Cause:Write access is allowed from event dispatch thread only»

1) Удаляем папку .gradle из проекта
2) В (File -> Project Structure -> SDK Location) ставим галку «Use embedded JDK»

Перепрошивка приставки Vermax UHD200. Не удачная.

Прилетела задача чуть кастомизировать приставку Vermax UHD200 с прошивкой от НАГ. А именно часть приложений удалить, несколько приложений добавить. Образ оригинальной прошивки был в наличии. В формате zip. Решил попробовать ROM Helper,

Собственно эта программа позволяет выполнить именно те задачи которые мне нужны. А именно открыть архив, вывести список установленных программ, отметить галочками те которые нужно убрать, а так-же возможность добавить свои apk. Так-же было заявлено что умеет  «подписывать» прошивки. Но как оказалось таки — не умеет.

Как мы видим, ругается на подпись и ставить не хочет.

Пробовал подписывать архив и  не безызвестной программой ZipSigner — результат тот-же.

Думаю…

Запрос выбора SSL сертификата в компоненте WebView

Задача: при открытии страницы https необходимо позволить пользователю выбрать необходимый сертификат ssl из установленых в хранилище.

Решение:

private class NocWebViewClient extends WebViewClient {
    @Override
    public void onReceivedClientCertRequest(WebView view, final ClientCertRequest request) {
        Log.v(getClass().getSimpleName(), "===> certificate required!");

        KeyChain.choosePrivateKeyAlias(Form1.this, new KeyChainAliasCallback(){
            @TargetApi(Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void alias(String alias) {
                Log.v(getClass().getSimpleName(), "===>Key alias is: " + alias);
                try {
                    PrivateKey changPrivateKey = KeyChain.getPrivateKey(Form1.this, alias);
                    X509Certificate[] certificates = KeyChain.getCertificateChain(Form1.this, alias);
                    Log.v(getClass().getSimpleName(), "===>Getting Private Key Success!" );
                    request.proceed(changPrivateKey, certificates);
                } catch (KeyChainException e) {
                    Log.e(getClass().getSimpleName(), Util.printException(e));
                } catch (InterruptedException e) {
                    Log.e(getClass().getSimpleName(), Util.printException(e));
                }
            }
        },new String[]{"RSA"}, null, null, -1, null);
    }
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed();
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        return true;
    }
    @Override
    public void onPageFinished(WebView view, String url){

    }

Новый проект — «Маячек»

Более подробное описание, на странице проекта. А если в кратце, то сервис с открытым кодом позволяющий отслеживать местоположение устройства Android. Состоит из двух частей: приложение под Андроид и отдельный сайт http://маячек.грибовы.рф