Статьи

Исследование Android M Developer Preview

В мае Google анонсировала следующую версию платформы Android, Android M. Хотя пока еще неизвестно, что означает «М» (Зефир? Macaroon? Macadamia Nut Cookie?), Вы уже можете получить предварительный просмотр Android Android Developer Preview. , Developer Preview 2 был выпущен всего несколько дней назад.

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

Хотя вы можете изучить функции Android M в предварительном просмотре для разработчиков, не забывайте, что это разрабатываемый выпуск, который предоставляет API предварительного просмотра , поэтому вы должны ожидать значительных изменений вплоть до финального SDK. Вы также не можете публиковать в Google Play приложения, предназначенные для предварительного просмотра разработчика M.

Поскольку предварительная версия для разработчиков находится в стадии разработки, важно поддерживать свою среду разработки в актуальном состоянии и всегда работать с самым последним выпуском предварительной версии для разработчиков Android M. Чтобы не пропустить ни одного обновления, вы можете добавить в закладки блог разработчиков Android , присоединиться к сообществу разработчиков Android M и записать (ориентировочные) даты выпуска Google.

  • Предварительный просмотр 3: конец июля
  • Финальный SDK: третий квартал 2015 года с предположением, что Android M выйдет в сентябре

Если вы хотите начать экспериментировать с предварительной версией для разработчиков Android M, вам понадобится бета-версия Android Studio 1.3 или выше.

Команда Android Studio выпускает обновления по нескольким каналам: стабильный , бета , dev и канальный канал. Несмотря на бета-тег, вы найдете бета-версию Android Studio 1.3 на канале.

Для подключения к канарскому каналу:

  • Откройте Android Studio.
  • На панели инструментов нажмите Android Studio и выберите « Настройки» .
  • Откройте меню « Внешний вид и поведение» , разверните « Параметры системы» и нажмите « Обновления» .

В окне «Настройки» откройте меню «Внешний вид», затем разверните «Настройки системы» и нажмите «Обновления».

  • Убедитесь, что установлен флажок Автоматически проверять обновления для .
  • Откройте раскрывающееся меню и выберите Canary Channel .
  • Нажмите кнопку « Проверить сейчас» .

Откройте раскрывающееся меню и выберите Канарские каналы

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

Затем откройте свой менеджер SDK и загрузите:

  • Android MNC Preview
  • Репозиторий поддержки Android (версия 15 или более поздняя)

В Android SDK Manager выберите Android M и Android Support Repository, а затем нажмите «Установить»

Вот и все. Ваша среда разработки теперь готова для Android.

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

Если вы хотите создать пример проекта Android M и попробовать некоторые фрагменты кода для себя, просто создайте новый проект Android как обычно, но установите минимальный SDK для MNC Android M (предварительный просмотр) .

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

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

Чтобы сделать привязку данных доступной для вашего проекта, вам нужно добавить зависимость библиотеки привязки данных в файл build.gradle вашего проекта. Откройте файл сборки Gradle верхнего уровня и добавьте следующее:

1
2
3
4
5
6
7
     
    dependencies {
        classpath «com.android.tools.build:gradle:1.3.0-beta4»
        classpath «com.android.databinding:dataBinder:1.0-rc0»
    }
}

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

1
2
apply plugin: ‘com.android.application’
apply plugin: ‘com.android.databinding’

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

1
2
3
4
5
6
public class Student {
    public final String firstName;
    public Student(String firstName) {
        this.firstName = firstName;
    }
}

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

1
2
<?xml version=»1.0″ encoding=»utf-8″?>
<layout xmlns:android=»http://schemas.android.com/apk/res/android»>

Этот новый <layout> преобразует ваш файл макета в файл макета привязки данных.

1
<data>

Между этими тегами <data> вы перечисляете все переменные, которые вы хотите связать с элементами вашего пользовательского интерфейса.

1
<variable name=»student» type=»com.databindingexample.Student»/>

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

1
</data>

После закрывающего <data> вы можете создать оставшуюся часть макета как обычно, единственное отличие состоит в том, что теперь вы можете установить для свойства student значение firstName в файле макета.

1
android:text=»@{student.firstName}»/>

Android Studio может отображать некоторые ошибки, пока вы не создадите свой проект. Это связано с тем, что библиотеке привязок данных необходимо создать класс, который содержит привязки из свойств макета и знает, как назначать значения для выражений привязки. Этот файл создается только при сборке проекта, поэтому откройте меню « Сборка» и выберите « Создать проект» .

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

Чтобы эта привязка работала, вам нужно добавить класс привязки в метод onCreate() вашего основного действия:

1
2
3
4
5
6
7
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
    Student student = new Student(«Test»);
    binding.setStudent(student);
}

Это очень простой пример привязки данных. Когда вы используете библиотеку привязки данных в своих собственных проектах, обычно имеет смысл уточнить этот базовый пример и дать вашим объектам данных возможность обновлять пользовательский интерфейс вашего приложения всякий раз, когда изменяется свойство этого объекта данных. Чтобы увидеть пример такого рода привязки данных в действии, ознакомьтесь с официальным Руководством по привязке данных Google.

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

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

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

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

Новая модель разрешений — хорошая новость для пользователей Android, которые заботятся о безопасности, но что это значит для разработчиков?

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

Проверка версии Android может показаться простой, но эта довольно рутинная задача становится немного более запутанной из-за природы Android M., предназначенной только для разработки. В настоящее время для того, чтобы проверить, установлено ли приложение в предварительном просмотре для разработчиков Android M, необходимо используйте кодовое название MNC.

1
return «MNC».equals(Build.VERSION.CODENAME);

Но согласно примерам кода Google , после завершения API ваше приложение должно использовать следующее:

1
return Build.VERSION.SDK_INT == Build.VERSION_CODES.MNC;

Так что "MNC".equals используйте "MNC".equals , но не удивляйтесь, если это изменится в какой-то момент перед финальным выпуском SDK. Также убедитесь, что вы дважды проверили этот фрагмент кода после появления окончательного Android M SDK.

Независимо от версии Android, к которой подключено ваше устройство, вы декларируете все разрешения в манифесте как нормальные. Затем, если ваше приложение установлено на устройстве под управлением чего-либо, кроме Android M, оно просто возвращается к старой модели разрешений и запрашивает все разрешения во время установки.

Обработка запросов на разрешение и ответов на Android M немного сложнее, но вы все равно декларируете разрешения точно так же, как в своем манифесте.

Единственная странность в том, что если вашему приложению требуется разрешение только на Android M, вы должны объявить его с помощью нового элемента <uses-permission-sdk-m> . В Android M <uses-permission-sdk-m> ведет себя точно так же, как и <uses-permission> , но все, что объявлено с помощью <uses-permission-sdk-m> , игнорируется на устройствах до Android М

Представьте, что ваше приложение проверило, что оно установлено на Android M, как вы делаете запросы на разрешение и обработку пользовательских ответов?

Это разные этапы:

  • Проверьте, есть ли у вашего приложения необходимые разрешения. Всякий раз, когда вашему приложению необходимо выполнить ограниченное действие, оно должно проверить, имеет ли оно в настоящее время доступ к требуемому разрешению. Вы должны выполнить этот шаг, даже если пользователь предоставил это разрешение ранее. Это потому, что пользователь может отозвать разрешение в любое время, и ваше приложение не будет уведомлено. Хорошей новостью является то, что проверка разрешений довольно проста, просто вызовите Context.checkSelfPermission(permission_name) .
  • Нет разрешения? Запросить это. Вы запрашиваете разрешения, используя новый метод Activity.requestPermissions(String[], int) . Когда вы вызываете этот метод, система отображает диалоговое окно, в котором пользователь может либо предоставить, либо отклонить разрешение. Вы можете заметить, что нет способа добавить String/@StringRes чтобы объяснить, почему вы делаете этот запрос, поэтому, если String/@StringRes зачем вашему приложению требуется определенное разрешение, вы можете предоставить пользователю некоторую информацию перед вызовом requestPermissions ,
  • Получение ответа пользователя . Как только пользователь предоставил или отказал в разрешении, система вызывает onRequestPermissionsResult(int, String[], int[]) вашей активности и передает ему результаты.
  • Обработка ответа пользователя. Последний шаг — проверка этих результатов и принятие соответствующих мер. Чтобы действовать с onRequestPermissionsResult() , ваша активность должна переопределить этот метод:
01
02
03
04
05
06
07
08
09
10
11
12
13
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case YOUR_REQUEST_CODE: {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
 
            } else {
 
            }
        }
        return;
    }
}

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

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

Вы также можете подумать, можете ли вы достичь таких же результатов, дав другому приложению указание выполнить задание с помощью намерения. Например, вместо запроса android.permission.CAMERA вы можете использовать намерение MediaStore.ACTION_IMAGE_CAPTURE .

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

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

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

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

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

Например, представьте, что вы щелкнули ссылку на профиль Twitter в результатах поиска Google. В Android M система проверяет, может ли какое-либо из ваших приложений обрабатывать этот URL-адрес Twitter, и включена ли автоматическая привязка. Android запустит официальное приложение Twitter без отображения диалога выбора приложений (при условии, что на вашем устройстве установлен Twitter).

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

Чтобы установить связь между вашим приложением и вашим собственным веб-доменом, вам нужно разместить файл JSON в хорошо известном месте вашего домена.

Если вы хотите, чтобы ваше приложение автоматически обрабатывало ссылки, связанные с вашим веб-сайтом (mywebsite.com), вам необходимо загрузить файл JSON в корень mywebsite.com.

Вот пример содержимого и макета файла Statement.json, в котором говорится, что Android всегда должен использовать ваше приложение (myapp) для отображения содержимого, относящегося к mywebsite.com :

01
02
03
04
05
06
07
08
09
10
http://<domain>:<optional port>/.well-known/statements.json
 
[{
    «relation»: [«delegate_permission/common.handle_all_urls»],
    «target»: {
        «namespace»: «android_app»,
        «package_name»: «<com.mywebsite.myapp>»,
        «sha256_cert_fingerprints»: [«6C:EC:C5:0E:34:AE….EB:0C:9B»]
    }
}]

Ключ package_name ссылается на имя пакета, которое вы объявили в манифесте вашего приложения. Значение ключа sha256_cert_fingerprints — это открытый отпечаток сертификата (SHA256) сертификата подписи вашего приложения.

Обратите внимание, что в первом предварительном выпуске M для разработчиков этот файл JSON проверяется по протоколу HTTP. В финальной версии M он будет проверен по зашифрованному протоколу HTTPS. Опять же, это одна из особенностей работы с предварительным просмотром для разработчиков, и вы должны следить за последующими выпусками.

Последний шаг — сообщить операционной системе Android, что не нужно запрашивать у пользователя ссылки определенного типа. Это означает добавление android:autoVerify="true" к каждому тегу <intent-filter> в манифесте вашего приложения.

1
<intent-filter android:autoVerify=»true»>

Когда атрибут android:autoVerify присутствует в манифесте вашего приложения, операционная система Android проверяет эти ссылки, когда пользователь впервые устанавливает ваше приложение. По сути, список уникальных имен хостов составляется из тегов <intent-filter> в пакете, и новый компонент Intent Filter Verifier Android M пытается извлечь файл JSON с каждого имени хоста. Затем эти файлы JSON проверяются по идентификатору приложения и сертификату установленного пакета, и менеджер пакетов Android сохраняет результат.

Конечно, если эта проверка не пройдена, поведение ссылки на приложение не будет доступно вашему приложению. Но при условии, что проверка прошла успешно, Android M автоматически запустит ваше приложение всякий раз, когда пользователь нажимает на любую ссылку, связанную с вашим веб-доменом.

В этом учебном пособии мы рассмотрели, как будут работать связывание приложений, новая модель разрешений и библиотека привязки данных в Android M. Мы также увидели, как вы можете начать экспериментировать с этими новыми функциями сегодня, настроив Android M предварительный просмотр разработчика в Android Studio 1.3 beta или выше.

Для получения дополнительной информации об Android M ознакомьтесь с официальной документацией Google . Здесь вы найдете больше информации о новых функциях, руководство по тестированию и, если вы хотите получить практический опыт работы с Android M с точки зрения пользователя, вы найдете системные образы, которые вы можете перенести на ваше устройство Android.