Версії android api. "Серце робота": Як використовувати системний API Android в особистих цілях. Інструменти для розробки та налагодження програм

04.11.2020 Цікаве

Більше інформації про те, як API рівнів роботи є можливим в What is API Level?

App Components

Isolated services

App stack navigation

Android 4.1 робить це дуже простий, щоб реалізувати спільний дизайн patterns for Up navigation. Всі необхідні для того, щоб отримати до android:parentActivityName до кожного елемента в вашому файлі manifest. Система використовує цю інформацію до Open appropriate activity when the user presses the Up button in the action bar (while also finishing the current activity). So if you declare the android:parentActivityName для кожної діяльності, ви не повинні використовувати на OptionsItemSelected() метод натисніть кнопку, щоб скористатися функцією bar's app icon—система новим handles, що виконають, і resumes or creates the appropriate activity.

Це є особливо потужним для сценаріїв в яких користувачі мають одну з ваших app"s activities через "deep dive" intent such as from notification or an intent from different app (as described in the design guide for Navigating Between Apps). Увімкнути вашу активність цього способу, ваш app не може бути природно має back stack of activities, що може бути resumed as user navigates up. app already contains back stack of parent activities and, if not, constructs a synthetic back stack that contains all parent activities.

Note:Якщо користувачі встановлюють глибоку діяльність у вашому додатку і його створюють новий task for your app, система фактично inserts stack of parent activities into task. Як так, pressing Back button as navigates back through the stack of parent activities.

Коли система створюється synthetic back stack для вашого app, його будова є основним Intent для створення нової точки зору їх parent activity. Якщо ви не збираєтеся державою для parent activity, як ви бачите, що користувач природно переміщується через її діяльність. Якщо в будь-якій діяльності, як правило, показують UI, що "залежить від користувача" context, що контекст інформаційного стану буде поставлено і ви повинні розширити його, коли користувачі навігації back через stack. Для прикладу, якщо користувачі переглядають album в музичному додатку, переміщаються в короткий час, щоб діяти, що листи всіх albums в chosen music genre. У цьому випадку, якщо друк мусить бути створений, він "необхідний, щоб ви помітили, що дійсна дія what generat the current album belongs to so that parent can display the proper list is the user actually came from that activity. To deliver such Інформація про synthetic parent activity, ви повинні override the метод. ofPrepareNavigateUpTaskStack() , Ви можете змінити відповідність Intent to add extra data , що parent activity може бути встановлений для відповідного контексту і відображення відповідного UI.

Якщо ваш app structure є більшим комплексом, є several інші API доступні, щоб дозволити вам, щоб рухатися вгору навігації і повністю customize synthetic back stack. Один з APIs, що дає вам інший контроль, включаючи:

onNavigateUp() Завершить це, щоб вирішити custom action when the user presses the Up button. navigateUpTo(Intent) Call this to finish the current activity and go to the activity indicated by the supplied Intent . Якщо активності існують в back stack, але не є загальним parent, вони всі інші діяльності між поточною діяльністю і діяльністю, спрямованою на мету, що продовжується як добре. getParentActivityIntent() Call this to get the Intent that will start the logical parent for the current activity. shouldUpRecreateTask(Intent) Завантажити це потрібно, щоб synthetic back stack повинен бути створений в ордер на навколишній. Відновити true if synthetic stack must be created, false if the appropropriate stack already exists. finishAffinity() Зображення цього досліджує поточну діяльність і всі parent activity with the same task affinity that are chained to the current activity. Якщо ви зазнаєте більшу кількість рухів так, як на NavigateUp() , ви повинні скористатися цим методом, коли ви створили synthetic back stack upon Up navigation. onCreateNavigateUpTaskStack Завершення цього, якщо ви потребуєте, щоб повністю контролювати, що synthetic task stack is created. Якщо ви збираєтеся скористатися деякими іншими даними для намірів для вашого back stack, ви повинні скористатися навігацією наPrepareNavigateUpTaskStack()

However, most apps не потрібні для використання цих API або implementation наPrepareNavigateUpTaskStack() , але може бути поставлено як правильний behavior simply by adding android:parentActivityName до кожного елемента.

Multimedia

Media codecs

You can handle encrypted media data у the codecs by calling queueSecureInputBuffer() в conjunction with the MediaCrypto APIs, досліджує звичайний queueInputBuffer() .

Для більш детальної інформації про те, як використовувати codecs, див. MediaCodec documentation.

Record audio on cue

Audio effects

Note:Це не гарантоване, що всі пристрої підтримують ці ефекти, тому що ви повинні бути першими, щоб здійснити контроль варіації може бутивихідний() на відповідному класі звукового ефекту.

Gapless playback

Ви можете зараз виконувати gapless playback між двома окремими MediaPlayer objects. У будь-якому часі до свого першого MediaPlayer продовжується, call setNextMediaPlayer() і Android вірять, щоб запустити другий гравець моменту, коли перші 1 stops.

Media router. Нові API MediaRouter, MediaRouteActionProvider, і MediaRouteButton забезпечує стандартні mechanisms and UI for choosing where to play media.

Camera

Auto focus movement

Connectivity

Android Beam

Android Beam™ зараз підтримує велику плату за перевезення через Bluetooth. When you define the data to transfer з either the new setBeamPushUris() метод або новий callback interface NfcAdapter.CreateBeamUrisCallback , Android hands off the data transfer до Bluetooth або інший альтернативний транспорт до achieve faster transfer speeds. Це є особливо корисним для великої плати loads так як зображення і звукові файли і потреби не visible pairing between the devices. Недостатня робота не потребує вашого застосування, щоб отримати передачу через Bluetooth.

Якщо ви використовуєте callback interface, система call the interface"s createBeamUris() метод when the user executes a share with android beam is that you can define the URIs to share at share-time. This is useful if the URIs to share might vary depending on the user context within activities, whereas calling setBeamPushUris() is useful when the URIs share are unchanging and you can safely define them ahead of time.

Network service discovery

Android 4.1 adds support for multicast DNS-based service discovery, які дозволяють вам функціонувати і підключатися до послуг, що знаходяться на периферійних пристроїв через Wi-Fi, так само як мобільні пристрої, printers, cameras, media players, і інші, що є на сайті network.

Після того, як ви можете запустити сервісні послуги на місцевих пристроях, ви також повинні call addServiceRequest() . Якщо WifiP2pManager.ActionListener ви збираєтеся за допомогою цього методу отримувати успішний callback, ви можете почати ремонт послуг на локальних пристроях за допомогою calling discoverServices() .

Якщо місцеві послуги є заздалегідь, ви будете отримувати callback до їх WifiP2pManager.DnsSdServiceResponseListener або WifiP2pManager.UpnpServiceResponseListener , залежно від того, де ви реєструєтеся для використання Bonjour або Upn Device object representing the peer device.

Network usage

Accessibility services can also perform actions on before of the user, including clicking, scrolling and stepping through text using performAction and setMovementGranularities . Створення GlobalAction() методу також дозволяє здійснювати рішення для виконання таких завдань, як Back, Home, і Open Recent Apps and Notifications.

Customizable app navigation

Якщо будувати на Android app, ви можете вивчити навколишні системи за допомогою фокусних елементів і введення widgets з використаннямFocus() і focusSearch() , , і фокусування, використовуючи setAccessibilityFocused() .

Більш accessible widgets

Новий android.view.accessibility.AccessibilityNodeProvider class дозволить вам зайнятися комплексом custom views до accessibility послуги з їх можливою інформацією в більш accessible way. android.view.accessibility.AccessibilityNodeProvider дозволяє користувачеві widget з розширеним вмістом, так як календар grid, до існуючих логічних semantic structure для accessibility services, що є повністю separate з widget's layout structure. Ця семантична структура дозволяє accessibility services до сучасного багатофункціонального моделювання моделі для користувачів, які звичайно impaired.

Copy and Paste

Copy and paste with intents

Renderscript

Renderscript computation functionality has been enhanced with the following features:

  • Support for multiple kernels withone script.
  • Support for reading from allocation with filtered samplers from compute in a new script API rsSample .
  • Support for different levels of FP precision in #pragma .
  • Додатково для отримання додаткової інформації від RS об'єктів від комп'ютера.
  • Численні результати виконання.

New pragmas є також доступні для визначення floating point precision, що вимагаються за вашим комп'ютером Renderscripts. Цей рік ви можете скористатися NEON як функція така як швидкий вектор стратегії роботи на CPU path, що не може бути можливим з повним IEEE 754-2008 standard.

Note:Досвідчений Renderscript graphics engine is now deprecated.

Animation

Activity launch animations

Remote views

  • "sans-serif" для regular Roboto
  • "sans-serif-light" для Roboto Light
  • "sans-serif-condensed" для Roboto Condensed

Vibrate for input controllers

Якщо з'єднаний вхідні прилади мають свої власні vibrate capabilities, ви не можете контролювати vibration of this devices з використанням існуючих Vibrator APIs simplely by calling getVibrator() on the InputDevice .

Permissions

...

Ця особливість defines "телебачення", щоб бути типовим living room телебачення досвіду: відображається на великому екрані, де його user setting far away і dominant form of input is be something як d-pad, і взагалі не через Touch або mouse/pointer-device.

Будь-хто, хто писав більш менш серйозний софт для різних мобільних ОС, знає, що Android - найбільш відкрита для розробника ОС. Доступний для сторонніх додатків API тут набагато ширша, сама система гнучкіша, а правила розміщення додатків у маркеті дуже ліберальні. Однак і в Android є низка системних API, прихованих від сторонніх додатків і доступних тільки софту. У цій статті ми спробуємо розібратися, як отримати доступ до цих API та які можливості вони відкривають.

Трохи теорії

Як ми всі знаємо, в Android є таке поняття. повноваження додатків(Permissions, дозволи). Повноваження прописуються у файл Manifest.xml кожної програми та визначають те, до яких функцій API зможе отримати доступ додаток. Хочеш працювати з камерою - додай у Manifest.xml рядок . Потрібен доступ до картки пам'яті - android.permission.READ_EXTERNAL_STORAGE. Все просто і логічно, до того ж всі доступні додатки повноваження добре документовані.

Є, однак, у цій стрункій схемі одна дуже важлива деталь, яку самі творці Android називають рівень доступу(Protection level). Щоб зрозуміти, що це таке, спробуй додати до Manifest.xml будь-якої своєї програми наступний рядок:

За ідеєю, це повноваження має відкрити доступ до API, що дозволяє переводити смартфон у режим польоту, включати/вимикати GPS та робити інші корисні речі. Але IDE так не вважає і тому відразу підкреслює рядок як помилку з формулюванням "Permission is only granted to system apps". Це і є попередження про порушення того самого рівня доступу. IDE як би каже нам: так, ти можеш спробувати дати своєму додатку повноваження WRITE_SECURE_SETTINGS , але Android все одно не дозволить тобі використовувати закріплений за ним API доти, доки ти не зробиш свою програму системною. А що означає «системним» у цьому випадку? Це означає: підпишеш його тим же цифровим ключем, яким підписана сама прошивка (йди спробуй роздобути такий ключ у якоїсь Samsung або LG!).

Офіційно в Android існує чотири рівні доступу:

  • normal- "звичайні" повноваження, що дають додатку доступ до нешкідливих функцій, які не вдасться шкідливо використовувати (приклади: SET_ALARM, ACCESS_NETWORK_STATE, VIBRATE). Система навіть не скаже тобі, що програма взагалі їх використовує;
  • dangerous- «небезпечні» повноваження, користувач буде інформований про них при встановленні програми або побачить віконце з попередженням в Android 6.0 (приклади: READ_SMS, SEND_SMS, CALL_PHONE, READ_CALL_LOG);
  • signature- доступні лише додаткам, підписаним ключем прошивки (приклади: GET_TASKS, MANAGE_USERS, WRITE_SETTINGS, MOUNT_UNMOUNT_FILESYSTEMS);
  • privileged- Доступні додаткам, що розташовуються в каталозі /system/priv-app.

У більшості випадків рівні доступу signature і privileged рівноцінні. Наприклад, щоб отримати повноваження MANAGE_USERS, програма має бути або підписана ключем прошивки, або розміщена в каталозі /system/priv-app . Але є й винятки: наприклад, повноваження MANAGE_DEVICE_ADMIN має рівень доступу signature, тобто єдиний спосіб його отримати – підписати додаток ключем прошивки.

Є також набір внутрішніх рівнів доступу, введених в Android для вирішення певних проблем: installer, development, preinstalled, appop, pre23. По суті, це милиці, і на даному етапі ти можеш про них не думати, проте до рівня доступу development ми ще повернемося, і він нам дуже стане в нагоді. А поки що поговоримо про те, як отримати потрібні нам рівні доступу і що вони дають.

Рівень доступу privileged

Privileged не найвищий рівень доступу і дозволяє використовувати далеко не весь API Android. Однак у більшості випадків він виявляється цілком достатнім, тому що дозволяє встановлювати та видаляти програми та користувачів (INSTALL_PACKAGES, DELETE_PACKAGES, MANAGE_USERS), керувати статусним рядком (STATUS_BAR), керувати деякими налаштуваннями живлення (WRITE_SECURE_SETTINGS), налаштування Wi-Fi(READ_WIFI_CREDENTIAL, OVERRIDE_WIFI_CONFIG), відключати додатки та їх компоненти (CHANGE_COMPONENT_ENABLED_STATE) та багато іншого.

Щоб програма отримала рівень доступу privileged, вона має бути встановлена ​​в каталог /system/priv-app , а це означає - поставлятися встановленим у складі прошивки. Однак, маючи root, ми можемо помістити свою програму в даний каталог за допомогою двох функцій:

// Підсобна функція, яка просто виконує shell-команду static public boolean runCommandWait(String cmd, boolean needsu) ( try ( String su = "sh"; if (needsu) ( su = "su"; ) Process process= Runtime.getRuntime().exec(new String(su, "-c", cmd)); int result = process.waitFor(); return (result == 0); ) catch (IOException e) ( throw new RuntimeException(e); ) catch (InterruptedException e) ( throw new RuntimeException(e); ) ) // Функція робить вказаний додаток системним і відправляє смартфон в м'яке перезавантаження static public void makeAppSystem ) ( String systemPrivAppDir = "/system/priv-app/"; String systemAppDir = "/system/app/"; String appPath = "/data/app/" + appName; // Підключаємо /system в режимі читання-запису if (!runCommandWait("mount -o remount,rw /system", true)) ( Log.e(TAG, "makeAppSystem: Can"t mount /system"); return; ) int api = Build.VERSION.SDK_INT; String appDir = systemPrivAppDir; // Копіюємо додаток в /system/priv-app або /system/app залежно від версії Android if (api >= 21) ( runCommandWait("cp -R " + appPath + "* " + appDir, true ); runCommandWait("chown -R 0:0 " + appDir + appName + "*", true); runCommandWait("rm -Rf " + appPath + "*", true); ) else ( if (api< 20) { appDir = systemAppDir; } runCommandWait("cp " + appPath + "* " + appDir, true); runCommandWait("chown 0:0 " + appDir + appName + "*", true); runCommandWait("rm -f " + appPath + "*", true); } // Отправляем смартфон в мягкую перезагрузку Shell.runCommand("am restart", true); }

Функцію runCommandWait я описувати не буду, вона просто виконує shell-команду і чекає на її завершення (докладніше читай у моїй статті про написання додатків з правами root). Функція makeAppSystem, у свою чергу, приймає повне ім'я програми (це те саме com.example.app, яке ти вказуєш при створенні нового проекту в Android Studio) і переносить його в /system/priv-app або /system/app, залежно від використовуваної версії Android. Код може здатися тобі дещо дивним, насправді він абсолютно коректний і враховує два фактори:

  • до Android 4.4 (API Level: 20) каталогу /system/priv-app не існувало і все системні програмирозміщувалися в /system/app;
  • починаючи з Android 5.0 (API Level: 21) пакети з додатками не просто складуються в /data/app та /system/priv-app , а розміщуються всередині своїх відокремлених підкаталогів.

Як використовувати цей код? Дуже просто: ти визначаєш у Manifest.xml свого додатку всі privileged-повноваження, які йому потрібні, не зважаючи на помилки IDE. Потім на початок коду програми вставляєш виклик makeAppSystem з ім'ям самого додатка в якості аргументу, компілюєш і запускаєш. Після запуску програма переміщає саму себе в /system/priv-app, перезавантажує смартфон, і йому відкриваються всі privileged API.

Список privileged-повноважень можна переглянути у вихідних кодах Android . Просто шукай за словом privileged. Про те, як їх використовувати - трохи пізніше.

Рівень доступу signature

Підпис ключем прошивки дозволяє отримати найвищий рівень доступу до API - signature. Додаток, що має такий доступ, може робити практично все, що завгодно: маніпулювати будь-якими налаштуваннями Android (WRITE_SETTINGS, WRITE_SECURE_SETTINGS), наділяти програми правами адміністратора (MANAGE_DEVICE_ADMINS), програмно натискати кнопки і вводити дані в будь-яке вікно (INJECT_).

Отримати такий рівень доступу на стокове прошивкамайже неможливо. Жоден виробник смартфонів не надасть тобі ключа для підпису своїх прошивок. Але якщо йдеться про кастомної прошивки, то все стає трохи простіше. Наприклад, нічні збірки того ж CyanogenMod (а я нагадаю, що користувачів у неї більше, ніж користувачів усіх версій Windows Phone, разом узятих) підписуються тестовим ключем, а його особливість у тому, що він є у відкритому доступі.

Але це ще не все, в CyanogenMod є механізм безпеки, який, на відміну від чистого Android, дозволяє отримувати рівень доступу signature не всім додаткам, підписаним ключем прошивки, а тільки тим, що розміщені в /system/priv-app . Тому, щоб отримати рівень доступу signature в CyanogenMod (не в Cyanogen OS, я підкреслюю), необхідно:

  1. Додати до Manifest.xml програми необхідні повноваження.
  2. Додати в програму виклик функції makeAppSystem(), описаної в попередньому розділі.
  3. Підписати релізну версію програми ключем platform із репозиторію CyanogenMod.

Рівень доступу development

В Android є спеціальний рівень доступу development, відмінність якого полягає в тому, що програми отримують його не за фактом розміщення в /system/priv-app або використання цифрового підпису прошивки, а динамічно. Тобто система може дати такий рівень доступу будь-якому додатку, а може відкликати назад. Але найважливіше, що, маючи права root, програма може наділити себе таким рівнем доступу самостійно.

Щоб це зробити, достатньо використовувати приблизно такий код:

RunCommandWait("pm grant" + appName + "android.permission.WRITE_SECURE_SETTINGS", true);

У цьому випадку appName отримає повноваження WRITE_SECURE_SETTINGS незалежно від того, де він розміщений і яким ключем підписано. Круто? Без сумніву, проте WRITE_SECURE_SETTINGS - фактично єдине корисне повноваження з рівнем доступу development. Інші чотирнадцять - це повноваження для налагодження та тестування (читання логів, дампи пам'яті тощо).

Як використовувати системний API?

Основна проблема, з якою ти зіткнешся під час роботи з системним API, - це повна (за невеликими винятками) відсутність документації. Ні в офіційних посібниках, ні в неофіційних ти не знайдеш майже жодних згадок про це. Інформацію доведеться збирати по крихтах, прошаркуючи сотні сторінок форумів і читаючи тисячі сторінок вихідних джерел Android. Однак хоч і невелику, але відправну точку у вигляді парочки корисних прикладів ми дамо тобі.

WRITE_SECURE_SETTINGS

Повноваження WRITE_SECURE_SETTINGS з'явилося Android 4.2 для захисту деяких критично важливих налаштувань Android. Серед таких налаштувань: увімкнення/вимкнення режиму польоту, керування налаштуваннями розташування та передачі даних. Воно захищене відразу трьома рівнями доступу: signature, privileged і development. Тобто ти можеш використовувати будь-який із перерахованих вище способів отримання рівня доступу, щоб наділити свою програму повноваженням WRITE_SECURE_SETTINGS.

Як використовувати можливості, що відкрилися? Наприклад, так:

// Читаємо поточне значення налаштування boolean isEnabled = Settings.System.getInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1; // Перемикаємо налаштування Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0: 1); // Відправляємо інтент для перемикання Intent intent = new Intent (Intent.ACTION_AIRPLANE_MODE_CHANGED); intent.putExtra("state", !isEnabled); sendBroadcast(intent);

Це дуже простий код, який тупо перемикає смартфон у режим польоту або навпаки, залежно від поточного стану. Все просто та лаконічно.

INSTALL_PACKAGES

Як зрозуміло з назви, повноваження INSTALL_PACKAGES дозволяє «тишком» встановлювати в систему APK-пакети. Використовувати цю можливість можуть підписані ключем прошивки програми (signature), або встановлені в /system/priv-app . При цьому навіть не обов'язково використовувати Java API, достатньо викликати консоллю команду pm (Package Manager) з потрібними параметрами:

RunCommandWait("pm install" + apkPath, false);

Після відпрацювання команди пакет apkPath буде встановлений у систему. Ти можеш заперечити, що те саме можна зробити і з правами root, і будеш правий: в даному випадку достатньо змінити останній аргумент функції runCommandWait() на true. Однак варто мати на увазі, що програми з правами root, по-перше, призводять до появи вікна запиту відповідних повноважень у користувача, а по-друге, логуються тим самим SuperSU. А так досить один раз прописати свою софтину в /system/priv-app, і вона зможе встановлювати скільки завгодно софт без будь-яких питань.

Замість висновків

От і все. Доступ до закритого API в Android не так вже й складно отримати. З іншого боку, з легітимним софтом використовувати його в більшості випадків немає сенсу, простіше отримати права root і викликати відповідні консольні команди: settingsдля зміни налаштувань, pmдля встановлення/видалення додатків, setpropдля зміни низькорівневих налаштувань і таке інше. Однак якщо йдеться про не зовсім звичайне програмне забезпечення...

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

  • API Android SDK - API бібліотеки Android, що надаються для розробки програм.
  • Документація SDK- включає велику довідкову інформацію, що деталізує, що включено в кожен пакет і клас і як це використовувати при розробці програм.
  • AVD (Android Virtual Device) - інтерактивний емулятор мобільного пристрої Android. Використовуючи емулятор, можна запускати й тестувати програми без використання реального Android пристрою.
  • 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, у папці інструментів.
  2. Візуально з допомогою Android SDK and AVD Manager в IDE Eclipse , вибравши пункт меню Window Android SDK та AVD Manager. З'явиться вікно Android SDK та 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розроблений дуже якісно та близький за функціональністю до реального пристрою.

МІСТЬ У: ОПИС:

Дозволяє вказати сумісність програми з однією або декількома версіями платформи за допомогою рівнів 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 VersionAPI LevelVERSION_CODENotes
Android 5.0 LOLLIPOP Platform Highlights
Android 4.4W KITKAT_WATCH KitKat for Wearables Only
Android 4.4 KITKAT Platform Highlights
Android 4.3