Список модулей в разных версиях api андроид. «Сердце робота»: Как использовать системный API Android в личных целях

Первая версия Android появилась в октябре 2008 года - всего 4 года назад, что не так много для операционной системы. За это время вышло уже более двух десятков обновлений. Основная часть обновлений включала в себя новые элементы программного интерфейса (API ), которыми приложения могли пользоваться для своих нужд. Чтобы та или иная версия Android знала, сможет ли она удовлетворить программные запросы того или иного приложения, была введена нумерация программных интерфейсов. Номер, характеризующий версию интерфейса, внедрялся в само приложение, и по нему система определяла совместимость этого приложения с собой. Этот номер назвали "уровень API" (API Level). Всего набралось уже 17 уровней, каждый последующий из которых включал в себя все функции предыдущего и добавлял новые.

Для написания приложения вместе с системой программирования на компьютер устанавливают SDK (software development kit ) — комплект средств разработки, основной частью которого является библиотека классов соответствующего API-уровня. Для каждого API-уровня существует своя библиотека, функциями которой пользуется приложение. Если мы возьмём для разработки своего приложения библиотеку первого API-уровня, то мы не получим в своё распоряжение функции, появившиеся позже. Если же мы возьмём библиотеку последнего уровня - мы рискуем сделать своё приложение несовместимым со старыми версиями Android, если вдруг используем функцию, неподдерживаемую ранее. Так как же осуществить выбор API-уровня?

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

В итоге получаем такую методику разработки приложения:

  1. Изучаем целевую аудиторию - какая версия Android установлена на их смартфонах. Если пишем для всех, то полезно будет ознакомиться с постоянно обновляемыми графиками использования той или иной версии системы на мобильных устройствах: http://developer.android.com/intl/ru/about/dashboards/index.html . На сегодняшний день видим, что основная масса уже сидит на уровне API 10, но также существуют немаленькие куски, сидящие на уровне 7 и 8. Различия в уровнях можно посмотреть тут (http://developer.android.com/intl/ru/guide/topics/manifest/uses-sdk-element.html), щёлкнув на номере соответствующего API в таблице.
  2. Если мы не хотим терять около 10% аудитории, выбираем минимальный уровень API 7. Иначе можем выбрать уровень API 10, на котором сидит сегодня почти половина пользователей. Устанавливаем соответствующий выбранному минимальному уровню SDK.
  3. Устанавливаем целевой уровень, равный минимальному, пишем и компилируем под него программу. Запускаем и тестируем её на эмуляторе смартфона с установленным API минимального уровня.
  4. После написания и отладки программы повышаем целевой уровень на единицу, компилируем программу под SDK нового целевого уровня и тестируем её в новом эмуляторе смартфона с соответствующим уровнем. Далее продолжаем повышать целевой API-уровень, компилировать и тестировать программу, пока не достигнем самого высокого API-уровня.
  5. Всё, теперь можно публиковать программу. При выходе новой версии Android с новым API-уровнем наша программа включится в нём в режиме совместимости и будет работать, как раньше. Чтобы программа заработала напрямую, а не в режиме совместимости, берём наш проект, скачиваем новое SDK последнего API-уровня, и компилируем приложение под ним. Теперь приложение запустится на новой системе в обычном режиме, и, возможно, станет выглядеть немного иначе, в традициях новой версии операционной системы. В то же время на старых версиях системы приложение остается таким, как было.
В итоге, поразмыслив, для себя я остановился на уровне API 7. Кроме того, при использовании некоторых новых функций, появившихся в гораздо более поздних API (например, фрагментов), среда разработки сама мне предложила задействовать специальный пакет совместимости, и добавила его в проект. В результате я получил возможность использовать некоторые новые функции из новых API в старом. Впрочем, это уже другая тема.

Поделитесь пожалуйста пустым проектом, готовым к публикации для TV устройств.
что-то никак не получается опубликовать, сейчас отклонили с такими ошибками:
APK:8
No Now Playing notification "
Your App does not contain a “Now Playing” notification for when the user has selected the HOME button within the app. Please refer to our Displaying a Now Playing Card documentation for more details.
APK:8
Play/Pause key event is not respected during playback
Your media apps that play video or music content must respect the play/pause key during playback. Please refer to our Media Play/Pause documentation and Update the Playback State documentation for details.
Missing DPad functionality
Your app requires user interaction for menus or app navigation. Please make sure that all menus and app navigation are fully functional using a DPad. Please refer to our DPAD Control and Hardware Declaration documentation.
ну и баннер не прилепил
No full-size app banner
Your app does not contain a full-size app banner or is it not visible in the launcher. We are targeting 1080P, which we consider xhdpi. Apps should include the banner in the xhdpi (320 dpi) drawables folder with a size of (320px × 180px). Please refer to our Home Screen Banner and UI Patterns documentation.
The title should help users identify apps in the launcher. Please refer to our Visual Design and User Interaction documentation for more information.
был бы очень благодарен за рабочий пустой костяк с манифестом.

От

В процессе разработки столкнулся с очень странной ситуацией, корни которой до сих пор неясны, но решение нашлось.
Итак. Делфи 10.3.3. Чистое приложение - пустая форма и кнопка. Отлично работает на разных устройствах кроме Samsung Galaxy Tab A (2016). Android 5.1.1
Программа падает, не успев даже загрузиться. Любая. При этом она же, скомпилированная на другом компе, запускается нормально. И даже после изменения SDK/NDK на нем, ничего не падает.
LogCat дает крайне странную картину
java.lang.IllegalArgumentException: Unable to load native library: /data/app-lib/com.embarcadero.Project1-1/libProject1.so
Начинаем экспериментировать с SDK, NDK и т.д. Поставил также хотфиксы для 10.3.3.
Сразу скажу, SDK/NDK ставились отдельно через Android studio, не скачивались вместе с Delphi. Не торопитесь бросать чтение на этом месте!)) На другом компе, где все работает, все ставилось точно так же.
Короче, очень много комбинаций версий SDK/NDK проверено.
Результат такой. При постепенном понижении версии NDK все взлетело при NDK v22.

При этом версия SDK видимо такого большого влияния не имеет, потому что этот вариант нормально работает

Повторюсь. На других устройствах все работало и на более новых Ndk. Xiaomi Mi Pad4 , Samsung Galaxy Tab A (2019), Xiaomi Redmi 5 и 5Plus

Спасибо за участие и помощь в разборе завалов @Andrey Efimov

От

У меня в работе два приложения, и оба они не предназначены для Play market, так как имеют ограниченный круг использования, по сути, чисто внутрикорпоративные. Так что нежелательно и выкладывание их и на альтернативные магазины приложений.
Автоматически возникает вопрос обновления. Если в первый раз мы можем установить приложение сами при помощи админов, то обновлять их не так просто. А контингент пользователей не справится с "скачайте APK по ссылке, найдите, куда его скачал браузер, и запустите вручную именно последний скачанный, а не какой попало"...
Простейший способ - дать приложению скачать свежую копию с сайта и натравить на полученный файл системный инсталлер.
Вот только свежие Andoird делать это напрямик запрещают. Нужен filepropvider. Целый день шуровал по мануалам и YT,
Вот то что получилось в результате.
Если у вас 10.3.3 как у меня, уже можно не вносить ... в манифест и свой файл file_paths.xml (или как вам его советуют назвать в интернетах) в деплой.
Теперь все это делается хоть несколько странно и однобоко, но автоматически, путем установки галочки Secure File Sharing

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

Теперь остается отгадать, какой путь реально подставится вместо "."
Как показала практика, все пути выглядят не так, как кажется, если исходить из простого здравого смысла. Целый день использования GetHomeDir и других полезных методов TPath завел меня совсем в тупик.
Оказалось все проще (?)
st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; ... OutputDir:= TAndroidHelper.Context.getExternalCacheDir(); path:= JStringToString(OutputDir.getAbsolutePath); filename:= path+"/ASDroid2.apk"; ApkFile:= TJfile.JavaClass.init(StringToJstring(filename)); FApkUri:= TAndroidHelper.JFileToJURI(ApkFile); st.Position:= 0; st.SaveToFile(filename); обратите внимание, в provider_paths мы задаем external-paths, а в коде ищем ExternalCacheDir.!!! (For.Unbelievably.Creative.Knowers!)
Потом все просто. FApkUri передаем в интент и запускаем
итоговый код примерно таков. (скачивание в потоке с использованием небольшого собственного API, но там ничего важного, можно не обращать внимания)
procedure TasdSettingsFrame.bDownloadClick(Sender: TObject); begin {$IFDEF ANDROID} bDownload.Enabled:= False; DownloadAndRun(); {$ENDIF} end; {$IFDEF ANDROID} procedure TasdSettingsFrame.DownloadAndRun(); begin ttask.Run(procedure var aapi:TasdAPI; st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; begin st:= TMemoryStream.Create; aapi:= TasdAPI.Clone(_API); try aapi.OnReceiveData:= OnReceiveData; aapi.getApk(st); if aapi.Err.Code=0 then begin OutputDir:= TAndroidHelper.Context.getExternalCacheDir(); path:= JStringToString(OutputDir.getAbsolutePath); filename:= path+"/ASDroid2.apk"; ApkFile:= TJfile.JavaClass.init(StringToJstring(filename)); FApkUri:= TAndroidHelper.JFileToJURI(ApkFile); st.Position:= 0; st.SaveToFile(filename); TThread.Synchronize(nil,procedure begin bDownload.Enabled:= true; StartActivity(FApkUri); end); end; finally st.Free; aapi.Free; end; end); end; procedure StartActivity(ApkUri: Jnet_Uri); var Intent: JIntent; begin Intent:= TJIntent.Create(); Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP or TJIntent.JavaClass.FLAG_GRANT_WRITE_URI_PERMISSION or TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION); Intent.setDataAndType(apkuri, StringToJString("application/vnd.android.package-archive")); TAndroidHelper.Activity.startActivity(Intent); end; procedure TasdSettingsFrame.OnReceiveData(const Sender: TObject; AContentLength: Int64; AReadCount: Int64; var Abort: Boolean); begin tthread.Synchronize(nil, procedure begin pb1.Max:= AContentLength; pb1.Value:= AReadCount; end); end; {$ENDIF} Вопросы остались конечно, почему так странно с каталогами, но выяснять пока нет желания. Работает - не трожь.
Всем удачи.
UPD.
Для того, чтобы системный инсталлер запускался, нужно не забыть отметить еще одну галочку

От

Приветствую. На просторах интернета нашел BASS-библиотеку для Android и соответственно обертку для нее под Delphi.

Вроде бы все работает нормально, но вот при настройке библиотеки при помощи методов
BASS_GetConfigPtr, BASS_SetConfigPtr для работы со строковыми параметрами возникает проблема.
На Windows с этим я легко работал, там достаточно использовать такую конструкцию

PAnsiChar(BASS_GetConfigPtr(configId)) и получаем значение. BASS_SetConfigPtr(configId, PAnsiChar(value)) и задаем значение. Но вот под Android такой способ не проходит, как минимум по одной причине - он не понимает, что такое PAnsiChar. На docwiki.emarcadero.com, есть вот такая статейка. В которой написано, что PAnsiChar нужно заменить одним из трех: System.String, System.MarshalledString или System.SysUtils.TStringBuiler
Только вот, если использовать MarshalledString, то при попытке получить значение приложение просто намертво зависает и все.
Потом я подумал, так как библиотека написана на Java (вероятно), то может стоит попробовать использовать JNI в работе с ней, так как в Java файле, который прилагался вместе с библиотекой. Там я нашел объявления этих функций и заметил, что тип возвращаемого значения Object (ну, не зная Java я просто предположил, что это тоже просто ссылка на значение, например как PAnsiChar в Delphi на Windows).

Но, при попытке как-либо использовать это натыкаюсь на проблемы в виде ошибки компиляции, либо очередном зависании приложения.
Так как возвращается Object, то решил попробовать вариант с JObject и JString, но ни один вариант не хочет работать, опять ошибки на стадии компиляции, либо зависание приложение. Может быть, я что-то не так делаю.

В общем, буду признателен за помощь!

От

Доброго времени!
Есть идея сделать возможность резервирования данных приложения на Google drive под текущим аккаунтом пользователя. Ничего подобного я на форуме не нашел, может быть кто-то уже пытался решать подобную задачу? Интересует работа с Gdrive в первую очередь.

От

Ну всё в принципе как всегда, либо я барашка, либо лыжи не едут)
А всё просто - я хочу, чтобы пока данные с сервера загружались по клику кнопки, пользователю элементарно был отклик в виде крутящейся какой нибудь фигни и он видел, что процесс идёт и что прога не зависла и никуда лишний раз не тыкал.
Пока что для тестов сделала элементарно кнопку Update (speedbutton с image), данные элементарно грузятся и отображаются в GridPanel, а поверх него, чтоб пользователь и не смог куда либо тыкнуть, замостила панелькой с Image, вращаемой по таймеру (всё это дело наверху Visible:=false). И когда клацаем по кнопке Update, то панельку сверху грида делаю отображаемой и запускаю таймер, потом этот же обработчик/процедура грузит данные, а по окончанию останавливаем таймер и скрываем полупрозрачну, еще кстати, панельку. Аля вот так:
procedure TForm1.SB_DataUpdateClick(Sender: TObject); begin //отображаем лого загрузки P_showLoad.Visible:= true; Timer_load_rotate.Enabled:= true; //с запуском таймера GetDeD_List(DE_set.Date); //процедура загрузки и отображения чего нам надо, которая весьма долго выполняется //и скрывае лого загрузки Timer_load_rotate.Enabled:= false; //уже в обратном порядке P_showLoad.Visible:= false; end; иии... ни черта не происходит как я хочу(
Это лого вообще в итоге не отображается, а если убрать его скрытие, то оно у нас отобразится уже только тогда, когда всё загрузится. Логика мне стала подсказывать, что следовало его как то отобразить выполнив в параллельном асинхронном потоке аля так:
procedure TForm1.SB_DataUpdateClick(Sender: TObject); begin TThread.Queue(TThread.Current, //TThread.Queue TThread.Synchronize ForceQueue procedure() begin P_showLoad.Visible:= true; Timer_load_rotate.Enabled:= true; end); GetDeD_List(DE_set.Date); //процедура загрузки и отображения чего нам надо, которая весьма долго выполняется end; И опять оно отображается только после того, как всё загрузится и проработает вся процедура. И уже чего только не пробовала и Synchronize и ForceQueue; и через TTask.Run и |task:= TTask.Create(procedure () ... и т.д.| ничего не подходит, вот хоть убейся это всё дело будет отображаться только после полной отработки процедуры клика. Может я не в том направлении вообще рою и это как то по другому делается? Может я еще пока отлаживаю на Win32, а не всё на android, а там вот пара вариантов и норм на нём работают? Но чтот я никак не могу понять, что к чему... должно же быть как то просто, а я чтот никак не могу понять как(

От

Goоgle Play перестает поддерживать 32-bit Android-приложения c 01.08.2019.
А выкладывать в Goоgle Play новые УЖЕ нельзя.
Последние же Delphi XE не позволяют создать 64-bit Android-приложения.
Кто знает, когда появится новая версия с поддержкой 64 - bit? Говорили, что в конце лета, но лето кончилось

  • Последние посетители 0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • СОДЕРЖИТСЯ В: ОПИСАНИЕ:

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

    АТРИБУТЫ: android:minSdkVersion

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

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

    Android:targetSdkVersion

    Целое число, указывающее версию API, на которую нацелено приложение. Если атрибут не указан, используется значение, эквивалентное minSdkVersion .

    Атрибуте сообщает системе, что вы протестировали приложение в указанной версии и система не должна разрешать работать приложению в режиме совместимости. С выходом новых версий, меняется поведение и внешний вид системы. Однако, если уровень API платформы выше версии, указанной в данном атрибуте, система разрешает использовать режим совместимости, чтобы приложение работало так, как вы ожидаете. Вы можете отключить такое поведение, указав в качестве targetSdkVersion версию платформы, на которой работает приложение. Например, установка значения 11 и больше позволит системе применить тему Xono, при запуске на Android 3.0 и выше, а также отключает режим совместимости экрана при запуске на больших экранах (потому что API 11 неявно поддерживает большие экраны).

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

    Добавлено в API 4.

    Android:maxSdkVersion

    Целое число, указывающее максимальный уровень API, в котором приложение может работать.

    В Android 1.5, 1.6 и 2.0.1 система проверяла значение атрибута при установке и проверке приложения после обновления системы. В любом случае, если значение атрибута ниже, чем уровень API системы, система не позволит установить приложение. В случае проверки приложения после обновления системы и несоответствии версий, приложение удаляется с устройства.

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

    Для приложения значение атрибута maxSdkVersion=5 . Пользователь устройства с Android 1.6 (API 4) скачал и установил приложение. Через несколько недель пользователь обновил версию Android до 2.0 (API 5). После обновления система вновь проверяет атрибут и оставляет приложение на устройстве. Приложение нормально работает. Однако, спустя некоторое время, устройство обновляется до версии Android 2.0.1 (API 6). После обновления, система не может подтвердить работу приложения, поскольку уровень API системы (6) выше, чем установленный в качестве максимального для приложения (5). Система удаляет приложение.

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

    Добавлено в API 4.

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

    ДОБАВЛЕНО: уровень API 1

    Что такое уровень API?

    Уровень API это целое число, которое идентифицирует уникальную ревизию API платформы Android.

    Платформа Android предоставляет API, которое приложения могут использовать для взаимодействия с основной системой и включает в себя:

    • набор пакетов и классов ядра.
    • набор XML элементов и атрибутов для файла манифеста.
    • набор XML элементов и атрибутов для объявления ресурсов.
    • набор намерений.
    • набор разрешений, которые требуют приложения, а также включены в системы.

    Каждая последующая версия Android может включать обновление системных приложений.

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

    Фреймворк, который использует платформа Android задается с помощью целого числа, который называется уровень API. Каждая версия Android поддерживает ровно один уровень API, хотя он включает также все более ранние версии (вплоть до API 1). Первый выпуск Android соответствует API 1.

    Platform Version API Level VERSION_CODE Notes
    Android 5.0 LOLLIPOP Platform Highlights
    Android 4.4W KITKAT_WATCH KitKat for Wearables Only
    Android 4.4 KITKAT Platform Highlights
    Android 4.3

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

    • API Android SDK - APIбиблиотеки Android, предоставляемые для разработки приложений.
    • Документация SDK- включает обширную справочную информацию, детализирующую, что включено в каждый пакет и класс и как это использовать при разработке приложений.
    • AVD (Android Virtual Device)- интерактивный эмулятор мобильного устройства Android. Используя эмулятор, можно запускать и тестировать приложения без использования реального Androidycтpoйcтвa.
    • Development Tools - SDK включает несколько инструментальных средств для разработки, которые позволяют компилировать и отлаживать создаваемые приложения.
    • Sample Code - Android SDK предоставляет типовые приложения, которые демонстрируют некоторые из возможностей Android, и простые программы, которые показывают, как использовать индивидуальные особенности API в вашем коде.

    Версии SDK и Android API Level

    Перед началом разработки приложений для Android полезно понять общий подход платформы к управлению изменением API. Также важно понять Android API Level (Идентификатор уровня API) и его роль в обеспечении совместимости вашего приложения с устройствами, на которых оно будет устанавливаться.

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

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

    Уровень API, который использует приложение для Android, определяется целочисленным идентификатором, который указывается в файле конфигурации каждого Android-приложения.

    Таблица определяет соответствие уровня API и версии платформы Android.

    Соответствие версии платформы и уровня АРI

    Инструменты для разработки и отладки приложений

    Кроме эмулятора, SDK также включает множество других инструментальных средств для отладки и установки создаваемых приложений. Если вы разрабатываете приложения для Android с помощью IDE Eclipse, многие инструменты командной строки, входящие в состав SDK, уже используются при сборке и компиляции проекта. Однако кроме них SDK содержит еще ряд полезных инструментов для разработки и отладки приложений:

    • android - важный инструмент разработки, запускаемый из командной строки, который позволяет создавать, удалять и конфигурировать виртуальные устройства, создавать и обновлять Androidпроекты (при работе вне среды Eclipse) и обновлять Android SDK новыми платформами, дополнениями и документацией;
    • Dalvik Debug Monitor Service (DDMS) - интегрированный с Dalvik Virtual Machine, стандартной виртуальной машиной платформы Android, этот инструмент позволяет управлять процессам и на эмуляторе ил и устройстве, а также помогает в отладке приложений. Вы можете использовать этот сервис для завершения процессов, выбора определенного процесса для отладки, генерирования трассировочных данных, просмотра "кучи" или информации о пото ках, делать скриншоты эмулятора ил и устройства и многое другое;
    • Hierarchy Viewer - визуальный инструмент, который позволяет отлаживать и оптимизировать пользовательский интерфейс разрабатываемого приложения. Он показывает визуальное дерево иерархии представлений, анализирует быстродействие перерисовки графических изображений на экране и может выполнять еще много других функций для анализа графического интерфейса приложений;
    • Layoutopt - инструмент командной строки, который помогает оптимизировать схемы разметки и иерархии разметок в создаваемом приложении. Необходим для решения проблем при создании сложных графических интерфейсов, которые могут затрагивать производительность приложения;
    • Draw 9-patc h - графический редактор, который позволяет легко создавать NinеРаtсhграфику для графического интерфейса разрабатываемых приложений;
    • sqlite3 - инструмент для доступа к файлам данных SQLite, созданных и используемых приложениями для Android;
    • Traceview - этот инструмент выдает графический анализ трассировочных логов, которые можно генерировать из приложений;
    • mksdcard - инструмент для создания образа диска, который вы можете использовать в эмуляторе для симуляции наличия внешней карты памяти (например, карты SD).
    • Наиболее важный из них- эмулятор мобильного устройства , однако в состав SDK входят и другие инструменты для отладки, упаковки и инсталляции ваших приложений на эмулятор.

    Android Virtual Device

    Android Virtual Device (Виртуальное устройство Android )- это эмулятор, который запускается на обычном компьютере. Эмулятор используется для проектирования, отладки и тестирования приложений в реальной среде выполнения.

    Прежде чем вы сможете запускать Androidэмулятор устройства, необходимо создать Android Virtual Device (AVD) . AVD определяет системное изображение и параметры настройки устройства, используемые эмулятором.

    Создавать эмулятор устройства можно двумя способами:

    1. В командной строке утилитой android, доступной в каталоге, куда вы установили Android SDK, в папке tools.
    2. Визуально с помощью Android SDK and AVD Manager в IDE Eclipse , выбрав пункт меню Window | Android SDK and AVD Manager. Появится окно Android SDK and AVD Manager, с помощью которого можно создавать и конфигурировать эмуляторы мобильного устройства, а также загружать обновления Android SDK.

    Окно Android SDK and AVD Manager также появится, если в командной строке вызвать android.exe без параметров.

    iAndroid SDK and AVD Manager

    Окно Android SDK and AVD Manager

    В правой части панели List of existing Android Virtual Devices нажмите кнопку New, при этом откроется окно Create new AVD.

    В этом окне задайте нужную конфигурацию для создаваемого эмулятора устройства:

    • Name - имя создаваемого устройства;
    • Target - версия Android SDK, поддерживаемая устройством. Устройство имеет обратную совместимость со старыми версиями SDK, т. е. если выбрана версия Android 2.0, эмулятор будет поддерживать версии SDK 1.6, 1.5, 1.1;
    • SD Card - устанавливает виртуальную карту SD;
    • Skin -тип экрана устройства. Загружаемая платформа включает ряд скинов для эмулятора, которые можно использовать для моделирования работы приложения в устройствах с разными размерами и разрешением экрана. Набор скинов для эмулятора в зависимости от установленной версии SDK, указанной в поле Target, содержит различные типы и размеры экрана, например:
    • HVGA (Halfsize VGA Video Graphics Array ), размер 320x480, средняя плотность, нормальный экран;
    • WVGA800 (Wide Video Graphics Array ), размер 480x800, высокая плотность, нормальный экран;
    • WVGA854 (Wide Video Graphics Array ), 480x854, высокая плотность, нормальный экран;
    • QVGA (Quarter Video Graphics Array ), размер 240x320, низкая плотность, малый экран;
    • WQVGA (Wide Quarter Video Graphics Array ), размер 240x400, низкая плотность, нормальный экран;

    • Hardware - имитация оборудования, установленного на устройстве. При необходимости нажатием кнопки New можно вызвать окно для добавления дополнительного виртуального оборудования.

    Окно для добавления дополнительного виртуального оборудования

    После задания конфигурации и нажатия кнопки Create AVD менеджер создаст новое виртуальное устройство, название и версия API которого появятся в списке List of existing Android Virtual Devices .

    Для более тонкой настройки лучше использовать инструмент командной строки andnoid.exe. Он имеет более широкие возможности, чем визуальный AVD Мапа9ег, и удобен для конфигурации сети, портов и виртуального оборудования эмулятора. К сожалению, изза ограниченного объема книги нет возможности рассмотреть подробнее этот инструмент.

    В зависимости от поддерживаемой версии API внешний вид виртуального устройства будет отличаться.

    Окно эмулятора оформлено в виде телефона с дополнительной клавиатурой. После загрузки системы появляется Home screen - рабочий стол Android. Для доступа к нему используется кнопка со значком домика. Эмулятор также имитирует сенсорный экран реального мобильного устройства- в эмуляторе на экран нажимают левой кнопкой мыши.

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

    Внешний вид AVD версии 1.5

    Внешний вид AVD версии 2.0

    Для тестирования внешнего вида создаваемого приложения при разных положениях экрана комбинацией клавиш + можно изменять расположение экрана с вертикального на горизонтальный и наоборот.

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

    Маркер внизу экрана позволяет открыть окно запуска установленных в системе приложений- Application Launcher. Окно выдвигается при нажатии на маркер.

    Эмулятор, тем не менее, не поддерживает некоторые функциональности, доступные на реальных устройствах:

    • входящие и исходящие сообщения. Однако можно моделировать обращения по телефону через интерфейс эмулятора;

    Панель запуска установленных приложений Application Launcher

    • соединение через USB;
    • видеокамера (однако есть имитатор работы видеокамеры);
    • подключение наушников;
    • определение статуса соединения;
    • определение уровня заряда аккумуляторной батареи; D определение вставки или изъятия карты SD;
    • соединение по Bluetooth.

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