Що означає програмувати на Android. Чотири способи як зробити додаток для Андроїд самому. IbuildApp - потужний двигун для розробки власних проектів

У будь-якій справі найскладніше – це початок. Часто буває важко увійти в контекст, з чим зіткнувся і я, вирішивши розробити свій перший Android-додаток. Ця стаття для тих, хто хоче почати, але не знає з чого.

Стаття торкнеться всього циклу розробки програми. Разом ми напишемо просту гру "Хрестики-Нолики" з одним екраном (в ОС Android це називається Activity).

Відсутність досвіду розробки на мові Java не повинна перешкоджати освоєнню Android. Так, у прикладах не будуть використовуватися специфічні для Java конструкції (або вони будуть мінімізовані на стільки, наскільки це можливо). Якщо Ви пишете, наприклад, на PHP і знайомі з основними принципами розробки ПЗ, ця стаття буде вам найбільш корисна. У свою чергу, оскільки я не є експертом з розробки на Java, можна припустити, що вихідний код не претендує на лейбл “найкращі практики розробки на Java”.

Встановлення необхідних програм та утиліт

Перелічу необхідні інструменти. Їх 3:

  1. IDE з підтримкою розробки для Android:
    • Eclipse + ADT plugin;
    • IntelliJ IDEA Community Edition;
    • Netbeans + nbandroid plugin;

Утиліти встановлюються у визначеному вище порядку. Ставити всі перелічені IDE сенсу немає (хіба що якщо Ви відчуваєте труднощі з підходящим вибором). Я використовую IntelliJ IDEA Community Edition, одну з найрозвиненіших на даний момент IDE для Java.

Запуск віртуального пристрою

Запустивши AVD Manager та встановивши додаткові пакети (SDK різних версій), можна розпочати створення віртуального пристрою з необхідними параметрами. Розібратися в інтерфейсі не повинно бути складно.

Список пристроїв

Створення проекту

Мені завжди не терпиться розпочати роботу, мінімізуючи підготовчі заходи, до яких належить створення проекту в IDE, особливо коли проект навчальний і на продакшн не претендує.

Отже, File->New Project:

Після натискання кнопки F6 проект збереться, відкомпілюється і запуститься на віртуальному девайсі.

Структура проекту

На попередньому скріншоті видно структуру проекту. Оскільки в цій статті ми переслідуємо суто практичні цілі, зверніть увагу лише на ті папки, які будемо використовувати в процесі роботи. Це такі каталоги: gen, resі src.

В папці genзнаходяться файли, які генеруються автоматично під час складання проекту. Вручну їх міняти не можна.

Папка res призначена для зберігання ресурсів, таких як картинки, тексти (у тому числі переклади), за замовчуванням, макети (layouts).

src- це папка у якій відбуватиметься переважна більшість роботи, бо тут зберігаються файли з вихідними текстами нашої програми.

Перші рядки

Як тільки створюється Activity (екран програми), викликається метод onCreate(). IDE заповнила його 2 рядками:
super.onCreate(savedInstanceState); setContentView(R.layout.main);
Метод setContentView (рівно this.setContentView) встановлює xml-макет для поточного екрану. Далі xml-макети називатимемо «layout», а екрани – «Activity». Layout у додатку буде наступним:

Для цієї програми ідеально підійде TableLayout. Id можна привласнити будь-якому ресурсу. У даному випадку, TableLayout присвоєно id = main_l. За допомогою методу findViewById() можна отримати доступ до виду:
private TableLayout layout; // це властивість класу KrestikinolikiActivity public void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.main); layout = (TableLayout) findViewById(R.id.main_l); buildGameFiel

Тепер необхідно реалізувати метод buildGameField(). Для цього потрібно згенерувати поле у ​​вигляді матриці. Цим займатиметься клас Game. Спочатку потрібно створити клас Square для осередків та клас Player, об'єкти якого будуть заповнювати ці осередки.

Square.java

package com.example; public class Square (private Player player= null; public void fill(Player player) ( this.player = player; ) public boolean isFilled() ( if (player != null) ( return true; ) return false; ) public Player getPlayer() ( return player; ) )

Player.java

package com.example; public class Player ( private String name; public Player(String name) ( this.name = name; ) public CharSequence getName() ( return (CharSequence) name; )

Всі класи нашої програми знаходяться у папці src.

Game.java

package com.example; public class Game ( /** * поле */ private Square field; /** * Конструктор * */ public Game() ( field = new Square; squareCount = 0; // заповнення поля for (int i = 0, l = field.length;i

Ініціалізація Game в конструкторі KrestikinolikiActivity.
public KrestikinolikiActivity() ( game = new Game(); game.start(); // буде реалізований пізніше )

Метод будівництваGameField() класу KrestikinolikiActivity. Він динамічно додає рядки та колонки в таблицю (ігрове поле):
private Button buttons = New Button; //(....) private void buildGameField() ( Square field = game.getField(); for (int i = 0, lenI = field.length; i
У рядку 8 створюється об'єкт, який реалізує інтерфейс View.OnClickListener. Створимо вкладений клас Listener. Він буде видно тільки з КрестікінолікіActivity.
Public class Listener implements View.OnClickListener ( private int x = 0; private int y = 0; public Listener(int x, int y) ( this.x = x; this.y = y; ) public void onClick(View view) ( Button button = (Button) view; ) )
Залишилось реалізувати логіку гри.
public class Game ( /** * гравці */ private Player players; /** * поле */ private Square field; /** * розпочата чи гра? */ private boolean started; /** * поточний гравець */ private Player activePlayer;/** * Вважає кількість заповнених осередків */ private int filled; /** * Усього осередків */ private int squareCount; // Заповнення поля for (int i = 0, l = field.length; i

Визначення переможця

К. О. підказує, що в хрестики-нуліки вириває той, хто вибудує X або O в лінію довжиною, що дорівнює довжині поля по-вертикалі, або по-горизонталі, або по-діагоналі. Перша думка, яка спадає на думку - це написати методи для кожного випадку. Думаю, у цьому випадку добре підійде патерн Chain of Responsobility. Визначимо інтерфейс
package com.example; public interface WinnerCheckerInterface ( public Player checkWinner(); )
Оскільки Game має обов'язок виявляти переможця, він реалізує цей інтерфейс. Настав час створити віртуальних «лайнсменів», кожен із яких перевірятиме свій бік. Всі вони реалізують інтерфейс WinnerCheckerInterface.

WinnerCheckerHorizontal.java

package com.example; Public class WinnerCheckerHorizontal implements WinnerCheckerInterface ( private Game game; public WinnerCheckerHorizontal(Game game) ( this.game = game; ) Public Player checkWinner() ( Square field = game.getField(); Player currPlayer; Player lastPlay i = 0, len = field.length;

WinnerCheckerVertical.java

package com.example; Public class WinnerCheckerVertical implements WinnerCheckerInterface ( private Game game; public WinnerCheckerVertical (Game game) ( this.game = game; ) Public Player checkWinner() ( Square field = game.getField(); i = 0, len = field.length;

WinnerCheckerDiagonalLeft.java

package com.example; Public class WinnerCheckerDiagonalLeft implements WinnerCheckerInterface ( private Game game; public WinnerCheckerDiagonalLeft(Game game) ( this.game = game; ) Public Player checkWinner() ( Square field = game.getField(); Player currPlayer; Player ; 1; for (int i = 0, len = field.length; i

WinnerCheckerDiagonalRight.java

package com.example; Public class WinnerCheckerDiagonalRight implements WinnerCheckerInterface ( private Game game; public WinnerCheckerDiagonalRight(Game game) ( this.game = game; ) Public Player checkWinner() ( Square field = game.getField(); Player currPlayer ; 1; for (int i = 0, len = field.length; i
Проініціалізуємо їх у конструкторі Game:
//(....) /** * "Судді" =). Після кожного ходу вони перевірятимуть, * чи немає переможця */ private WinnerCheckerInterface winnerCheckers; //(....) public Game() ( //(....) winnerCheckers = new WinnerCheckerInterface; winnerCheckers = new WinnerCheckerHorizontal(this); winnerCheckers = new WinnerCheckerVertical(this); winnerCheckers = new WinnerCheckerDiag winnerCheckers = new WinnerCheckerDiagonalRight(this); //(....) )
Реалізація checkWinner():
public Player checkWinner() ( for (WinnerCheckerInterface winChecker: winnerCheckers) ( Player winner = winChecker.checkWinner(); if (winner != null) ( return winner; ) ) return null; )
Переможця перевіряємо після кожного ходу. Додамо код у метод onClick() класу Listener
public void onClick(View view) ( Button button = (Button) view; Game g = game; Player player = g.getCurrentActivePlayer(); if (makeTurn(x, y)) ( button.setText(player.getName()) ; ) Player winner = g.checkWinner(); if (winner != null) ( gameOver(winner); ) if (g.isFieldFilled()) ( // у випадку, якщо поле заповнене gameOver(); ) )
Метод gameOver() реалізований у 2-х варіантах:
private void gameOver(Player player) ( CharSequence text = "Player \"" + player.getName() + "\" won!"; Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); game.reset (); refresh(); ) private void gameOver() ( CharSequence text = "Draw"; Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); game.reset(); refresh(); )
Для Java, gameOver(Player player) та gameOver() - різні методи. Скориставшись Builder"ом Toast.makeText, можна швидко створити та показати повідомлення. refresh() оновлює стан поля:
private void refresh() ( Square field = game.getField(); for (int i = 0, len = field.length; i

Готово! Сподіваюся, ця стаття допомогла Вам освоїтись у світі розробки під OS Android. Дякую за увагу!

Відео готової програми

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

А ще нові Хромбуки відтепер і назавжди обзавелися підтримкою Android-додатків: їх можна завантажувати, встановлювати і запускати, як у рідному середовищі. Ринок Android-програм лише зростає. Не слід думати, що час минув – ще зовсім не пізно розпочати. Все, що потрібно для старту: приготуватися, зробити глибокий вдих, підібрати відповідна мовапрограмування – і розпочати свою подорож.

Але яка мова програмування буде найкращою саме для вас? Вибір відповідного інструменту розробки – перше завдання, з яким ніхто не впорається краще за вас. Багато залежить від досвіду в програмуванні (або від відсутності досвіду в конкретних середовищах розробки), від особистого комфорту при використанні тієї чи іншої мови. На щастя, вибір пристойний. У цій статті розглянуто добірку кращих мовпрограмування для Android.

Коли справа стосується програм для Android, мова Java ніяк не може стати неправильним вибором. Крім того, що це Офіційна мовапрограмування даної ОС, він ще й другий за поширеністю на ресурсі GitHub, і настільки популярний він уже понад 20 років. Це означає, що інструкцій та підручників з Java існує безліч, та й турбуватися про старіння цієї мови в найближчому майбутньому зовсім не слід.

Так як мова Java широко поширилася по десятках галузей програмування, ми рекомендуємо почати її вивчення з книг, присвячених Java у контексті екосистеми Android. Зрозуміло, Java один і той же у всіх середовищах, але окремі парадигми і вирази допоможуть допитливому розуму швидше вникнути в суть розробки Android-додатків. Саме таке завдання ставлять перед собою більшість книг на цю тему.

Варто зазначити, що через поважний вік Java йому не вистачає деяких характерних рис, властивих молодшим мовам. Початківцям це не так важливо, проте для досвідченіших програмістів, що переходять цією мовою, скажімо, зі Swift, Java може спочатку викликати напади клаустрофобії.

Мова програмування Kotlin була створена спеціально для роботи на віртуальних машинах Java. Це означає, що програми Kotlin компілюються в код Java, що дозволяє їм запускатися на будь-яких машинах із підтримкою Java-середовища. Оскільки підтримкою Java володіє більшість машин, то використання Kotlin – порівняно простий спосіб розробки крос-платформного ПЗ.

Використання Kotlin – це застосування в програмному продуктівсіх найкращих сторін Java, без його недоліків. Синтаксис та інші особливості програмування Kotlin сучасні, зрозумілі, швидкі. Це справді зручне середовище для розробки. Там, де Java здається громіздким, незграбним і старим мовою, Kotlin виглядає комфортно, свіжо і навіть красиво. Певною мірою можна вважати, що Kotlin був спеціально створений для розробки програм Android.

Зворотній бік медалі? Kotlin – дуже молода мова. Його перші версії були випущені у 2011 році, а офіційний реліз відбувся лише у 2016 році. гарні новини: Kotlin – безкоштовний та з відкритим вихідним кодом. Варто очікувати, що він розвиватиметься семимильними кроками. Але в будь-якому випадку має пройти кілька років, перш ніж ця мова зарекомендує себе по-справжньому надійним вибором.

C# - неймовірна мова програмування! Він узяв від Java все найкраще, залишивши за бортом найгірші особливостіцієї мови. І розвивався він у тому ж правильному руслі. Схоже, що в Microsoft розглянули потенціал Java і вирішили розробити власну, кращу версію.

Довгий час серйозним недоліком використання C# було те, що він працював лише в системах Windows: ця мова ґрунтується на .NET Framework. Але у 2014 році ця обставина змінилася: Microsoft відкрила вихідні коди .NET Framework. Більше того, у 2016 році корпорація придбала компанію Xamarin – розробника Mono (проект, що дозволяє програмам C# працювати на різних платформах).

Підсумком цих славних справ стало те, що сьогодні можна використовувати середовища Xamarin.Android та Xamarin.iOS для створення мобільних додатків у Visual Studio або Xamarin Studio. Відмінний спосіб для початку розробки, адже надалі можна буде використовувати засоби цієї мови в інших галузях – скажімо, створення складних ігор за допомогою Unity та C#. Наочні приклади додатків, створених у Xamarin? MarketWatch – ні більше, ні менше.

Зрештою, зазначимо, що ще недавно за роботу в Xamarin була потрібна плата. Але Microsoft зробила це середовище безкоштовним!

Хоча Android не має нативну підтримку Python, існують інструменти, що дозволяють писати програми на Python, а потім конвертувати їх в «рідні» для Android додатки APK. Чудовий приклад життєздатності Python як дійсно ефективної мови. Шанувальники мови Python, що бажають спробувати себе в розробці Android-додатків, обов'язково оцінять цю можливість - не вникаючи при цьому в нетрі Java.

Серед найбільш популярних рішень для конвертації коду Python у APK – проект Kivy. І справа навіть не в його природі open source, і не тільки в підтримці Windows, Mac, Linux та iOS на додаток до Android. Kivy спроектований таким чином, щоб справді прискорює розробку додатків. Принаймні, можна використовувати його як інструмент для прототипування. Скільки всього можна зробити лише кількома рядками коду!

Втім, без Python нативної підтримки, не вийде скористатися і перевагами рідної для Android середовища. Програми, написані з Kivy, зазвичай компілюються в більш об'ємні APK, повільний старт і, в цілому, продуктивність нижче середнього. Однак кожен знову випущений реліз по-справжньому кращий за попередній, а мобільні пристрої сьогоднішнього дня настільки потужні, що неоптимальна продуктивність додатків означає не так багато. Нехай цей фактор не буде на заваді.

Пара прикладів додатків на Android, написаних у Kivy: Kognitivo та Barly.

  1. HTML5 + CSS + JavaScript

Ця трійка мов, колись створених для розробки фронт-енд додатків у веб-середовищі, відтоді переросла на щось більше. Тепер інструментів HTML5, CSS і JavaScript цілком достатньо для створення самих різних додатківі для мобільних пристроїв, та для класичних ПК. По суті, програміст створює веб-додаток, здатний використовувати всю міць та магію офлайн-платформ.

Для створення Android-додатків у цей спосіб можна використовувати можливості Adobe Cordova – це фреймворк з відкритим вихідним кодом, який також підтримує операційні системи iOS, Windows 10 Mobile, Blackberry, Firefox та багато інших. Однак, якою б корисною не була Cordova, для створення в ній пристойного застосування потрібна серйозна робота. Тому багато програмістів віддають перевагу проекту Ionic Framework (який використовує Кордову для розгортання на різних платформах).

Приклади додатків для Android, написані на HTML5, JavaScript та CSS: Untappd та TripCase.

Є й інша можливість використання бібліотеки React Native. Її можна розгорнути на Android, iOS та платформі «Універсальних додатків Windows». Цю бібліотеку використовують фахівці Facebook, Instagram та інших великих компанійтому можна покластися на її надійність. Навчання не найпростіше, але коли воно підійде до фіналу, у ваших руках буде вся міць, гнучкість та зручність, які тільки можна побажати.

Lua – стара скриптова мова, яка спочатку створювалася як додаток для програм, написаних на більш складних мовах: C, VB.NET і т.д. У цій мові є деякі особливості, які виділяють Lua з ряду подібних до нього – наприклад, початок масивів з 1 замість 0, або відсутність нативних класів.

Таким чином, для певних завдань Lua можна використовувати як основну мову програмування. Найкращий приклад – SDK Corona. За допомогою Corona можна створювати потужні, багаті за функціональністю програми з можливістю розгортання на Windows, Mac, Android, iOS, і навіть Apple TV + Android TV. У Corona також вбудовані можливості для монетизації, плюс - це пристойний за обсягами ринок, де можна знайти корисні в роботі плагіни.

Найчастіше Corona використовують для створення ігор (серед прикладів – Fun Run 2 та HoPiko), проте є і зразки утиліт, а також бізнес-додатків (My Days та Quebec Tourism).

  1. C/C++

Для створення програм Android, Google офіційно надає два середовища розробки:

  • SDK (використовує Java);
  • і NDK (використовує нативні мови, на кшталт C і C++).

Зазначимо, що для створення програми повністю використовувати C, C++ і «голий» Java не вийде. Натомість NDK дозволяє створювати бібліотеки, до функцій яких можуть звертатися частини Java-коду з програми.

Як правило, немає потреби використовувати NDK. Це середовище не варто використовувати як основне хоча б тому, що доведеться більше займатися кодингом на C/C++, а не на Java. Існування NDK виправдане в тих завданнях, коли потрібно вичавити якнайбільше продуктивності при виконанні складних обчислювальних завдань. Також NDK дозволяє впроваджувати додаток бібліотеки C та C++.

Але в інших випадках варто дотримуватись Java скрізь, де можливо. Розробка Android-додатків на C/C++ у рази складніша, ніж на Java. І найчастіше виграш у продуктивності надто незначний.

Якими програмами ви хотіли б зайнятися?

Месенджери, ігри, калькулятори, блокноти, плеєри. Можливості безмежні! Багато в чому вони безмежні завдяки перерахованим вище мовам програмування та фреймворкам. Не потрібно вивчати їх усіх підряд – лише ті, які стануть у нагоді саме у вирішенні вашого завдання. Якщо в майбутньому потрібно розширити власні знання, то можна зайнятися самоосвітою, коли настане час.

Насамкінець рекомендуємо почитати блоги, присвячені розробці мобільних додатків. Вони дозволять визначитися з інгредієнтами, потрібними для приготування успішного мобільного додатка та допоможуть подолати безліч труднощів, які неминуче виникають на шляху всіх програмістів.

Цей урок навчить вас основам того як написати програму для Android використовуючи середовище розробки Android Studio. Пристрої Андроїд стають все більш поширеними, попит на нові програми весь час тільки збільшується. Android Studio безкоштовна, проста у використанні середовище розробки.

Для цього уроку найкраще, якщо у вас є хоча б поверхневі знання мови Java так як це мова використовується Android. В уроці не буде занадто багато коду так як я виходжу з того, що ви трохи знайомі з Java або готові знайти те, що ви ще не знаєте. Створення програми займе 30-60 хвилин, залежить від того, як швидко ви завантажите і встановите всі необхідні програми. Після знайомства з цим уроком зі створення свого першого додатка для Андроїд, можливо ви знайдете собі нове веселе хобі або навіть почнете кар'єру багатообіцяючого розробника мобільних додатків.

Етап 1: Встановлюємо Android Studio

  1. Необхідно встановити JDK ( Java Development Kit) та JRE (Java Runtime Environment). Завантажити можна за цим посиланням. Вибираєте там версію для вашої ОС, приймаєте ліцензійну угоду, завантажуєте та встановлюєте.
  2. Тепер йдемо сюди http://developer.android.com/sdk/index.html і завантажуємо (обережно, доведеться завантажити близько 3 гігабайт).
  3. Запускаємо установку та дотримуємося інструкцій.

Етап 2: Створюємо новий проект

  1. Відкрийте Android Studio.
  2. В меню " Quick Start", Виберіть " Start a new Android Studio проект».
  3. У вікні " Create New Project» (Вікно яке відкрилося), назвіть ваш проект « HelloWorld».
  4. Назва компанії за бажанням.
  5. Натисніть « Next».
  6. Переконайтеся, що галочка стоїть тільки на Phone and Tablet».
  7. Якщо ви плануєте тестувати свою першу програму на вашому телефоні, то переконайтеся, що вибрана правильна версіяАндроїд (не старше за ту, що на телефоні).
  8. Натисніть « Next».
  9. Виберіть " Blank Activity».
  10. Натисніть « Next».
  11. Залиште всі інші поля як вони є.
  12. Натисніть « Finish».

*Типова назва компаній для андроїд проектів "example.name.here.com".

Етап 3: Редагуємо привітання

  1. Перейдіть на вкладку Діяльність_main.xmlшвидше за все вона вже активна.
  2. Переконайтеся, що внизу екрана активна вкладка Design(швидше за все це так).
  3. Перетягніть мишею фразу « Hello, World! » з лівого верхнього кутателефону в центрі екрану.
  4. У лівій частині екрану знаходиться дерево папок. Відкрийте папку під назвою « values».
  5. У цій папці двічі клацніть файл « strings.xml».
  6. У цьому файлі знайдіть рядок, що містить текст « Hello world!» та додайте до цього тексту « Welcometomyapp! ».
  7. Поверніться на вкладку « Діяльність_main.xml».
  8. Переконайтеся, що текст знаходиться в центрі екрана телефону і містить текст « Helloworld! Welcometomyapp! ».

Етап 4: Додаємо Кнопку

  1. На вкладці « Діяльність_main.xml» виберіть внизу вкладку « Design».
  2. У колонці ліворуч від вікна, де знаходиться телефон, знайдіть папку під назвою « Widgets». Там є різні кнопки.
  3. Візьміть кнопку « Button» та перетягніть її на екран телефону. Вона повинна знаходитися в центрі екрана прямо під вашим текстом.
  4. Переконайтеся, що кнопка все ще вибрана (синя рамка навколо неї).
  5. У правому нижньому кутку є віконце з властивостями обраного об'єкта. Промотайте вниз і знайдіть рядок під назвою « text».
  6. Поміняйте текст « New Button» на « Next Page».

Етап 5: Створюємо Second Activity

  1. У верхній частині дерева файлової системипроекту, клацніть правою кнопкою миші на папці під назвою « app».
  2. Виберіть New > Activity > Blank Activity.
  3. У вікні, що з'явилося в верхньому рядкувведіть « SecondActivity».
  4. Натисніть « Finish».
  5. Перейдіть на вкладку « Діяльність_second.xml» і переконайтеся, що внизу вибрано вкладку « Design».
  6. Перемістіть текст із верхнього лівого кута телефону до центру екрана, як ми робили на попередніх кроках.
  7. Переконайтеся, що текстовий блок все ще вибраний (синя рамка) і в правому нижньому куті властивостей об'єкта знайдіть рядок « id» та введіть туди « text2 ».
  8. У верхньому лівому кутку (у дереві проекту) знову оберете подвійним натисканням « strings.xml».
  9. Під рядком Hello world! Welcome to my app!

    додайте наступний рядок

    Welcome to the second page!

  10. Поверніться на вкладку « activity_second.xml».
  11. Виберіть текстовий блок знову.
  12. У нижньому правому кутку у властивостях об'єкта знайдіть рядок « text» та введіть туди «@ string/second_page».
  13. Переконайтеся, що в текстовому полі тепер написано Welcometothesecondpage! » і блог розташований у центрі екрана.

Етап 6: Прописуємо дію для кнопки


Етап 7: Тестуємо додаток

  1. На панелі інструментів у верхній частині вікна Android Studio натисніть зелений символ відтворення.
  2. У вікні " ChooseDevice» виберіть пункт « Launchemulator» та виберіть пристрій.
  3. Натисніть на кнопку " OK».
  4. Коли емулятор запуститься (це може тривати тривалий час) програма автоматично відкриється на віртуальному пристрої.
  5. Переконайтеся, що весь текст відображається правильно і натискання кнопки призводить до наступної сторінки.

Увага: Якщо ви отримуєте повідомлення « HAX kernel module is not installed!», то тут можливі два варіанти. Справа в тому, що цю віртуалізацію підтримують лише сучасні процесори Intel і вам потрібно лише включити її в BIOS. Якщо ж у вас процесор, який не підтримує цю функцію, вам доведеться протестувати програму на реальному телефоні або скористатися не вбудованим, а стороннім емулятором.

Як отримати файл.apk в Android Studio

На мій погляд, це питання добре висвітлено в цій статті, так що не повторюватимуся. Найпростішим для першого уроку мені здався Ручний спосіб.

Коли ви отримаєте файл, можете скопіювати його на свій телефон і встановити програму.

Етап 8: Результат

Вітаю! Ви тільки що завершили написання свого першого Android-програми з деякими основними функціональними можливостями. Готовий додаток повинен мати сторінку привітання користувача та кнопку, яка приведе користувача на другу сторінку.

Ви познайомилися з розробкою додатків для андроїд і можливо пробудили в собі бажання вивчити все, що необхідно, щоб надалі розвиватися в цьому напрямі.

У статті описано основні труднощі створення програм під Android.
Розглядаються базові поняттяпрограмування Android.
Для прикладу описано створення гри Sudoku із книги Hello, Android – Ed Burnette.
Обережно багато скріншотів.

1. Проблеми розробки

Android це унікальна операційна система. Розробник додатків повинен знати її особливості та нюанси для отримання гарного результату. Існують деякі труднощі, які потрібно враховувати під час розробки (). Перерахуємо їх коротко:
1) Додаток вимагає для встановлення в два рази (або навіть у чотири) більше місця, ніж оригінальний розмірпрограми.
2) Швидкість роботи з файлами на вбудованій флешці зменшується в десятки разів при зменшенні вільного місця.
3) Кожен процес може використовувати до 16 Мб (іноді 24 Мб) оперативної пам'яті.

2. Принципи розробки продуктивних програм під Android

Для роботи потрібен Android SDKта Eclipse. Про те, як все встановити і почати написано.

Для завантаження проекту в Eclipse можна виконати таку послідовність дій:
1) Розархівувати проект окрему папку в робочому просторі Eclipse.
2) Вибрати пункт меню File->New->Android Project.
3) У діалозі New Android Project вибрати опцію Create project from existing source.
4) У полі Location вказати шлях до папки з проектом. Натиснути Next.

Меню програми

Ігрове меню описано у файлі res/layout/main.xml. Опис інтерфейсу можна редагувати у вигляді XML або візуалізованого інтерфейсу. Для перемикання служать вкладки внизу області відображення вмісту.

Зазвичай елементи керування містяться всередині контейнера, у нашому випадку це LinearLayout. Він має всі елементи у вигляді однієї колонки.

Ресурси

Зауважте, що всі текстові написи (android:text) беруть дані з ресурсів. Наприклад, запис android:text="@string/main_title" вказує, що текст потрібно шукати у файлі res/values/string.xml у вузлі з ім'ям main_title (Android Sudoku). Колір фону також міститься в ресурсах (android:background="@color/background") та у файлі color.xml (#3500ffff). При відкритті файлів ресурсів у редакторі може виникнути помилка. Але завжди можна перейти до відображення XML.

Елементи управління до яких потрібно отримати доступ із коду повинні мати id. У кнопок є id (android:id="@+id/continue_button") для того, щоб було можна приєднати до кнопки обробник натискання. Знак плюс вказує на те, що для кнопки потрібно створити ідентифікатор у файлі /gen/org.example.sudoku/R.java (public static final int continue_button=0x7f0b000b;). Цей файл генерується автоматично та не рекомендується його змінювати. Файл містить клас R через нього можна звернутися до будь-якого елемента інтерфейсу та інших ресурсів.

Створення вікон

Розглянемо створення вікна з інформацією про програму. Розмітка цього вікна знаходиться у файлі /res/layout/about.xml. Activity клас описаний у файлі /src/org.example.sudoku/About.java. Activity пов'язана із розміткою у файлі AndroidManifest.xml. Цей файл можна переглядати через редактор або у вигляді XML. На різних вкладках редактора можна вибрати різні розділи файлу. У розділі Application є параметри Activity. Зауважте, що параметр Theme має значення :style/Theme.Dialog. Завдяки цьому стиль вікна більше нагадує модальний діалог.

Виклик вікна з інформацією про програму здійснюється із класу Sudoku за натисканням кнопки About. Клас Sudoku написаний отже сам обробляє подію Click (public class Sudoku extends Activity implements OnClickListener). У методі public void onClick(View v) визначається, яка кнопка викликала подію і виконується відповідний код. Для відображення вікна About викликається відповідний Intent.
case R.id.about_button:
Intent i = new Intent(this, About.class);
startActivity(i);
break;

Обробники подій також можуть встановлюватися на конкретні елементиуправління. Наприклад, у класі Keypad під час створення класу у методі setListeners() встановлюються обробники окремих кнопок.

Простий діалог

Користувачеві потрібно надати можливість вибрати рівень складності. Це маленький діалог, у якому потрібно вибрати один із кількох варіантів. Дуже тішить, що для цього не потрібно створювати окремий Intent, а скористатися класом AlertDialog.
Розберемо процес старту нової гри. Користувач натискає кнопку New Game. Обробник натискання – це метод класу Sudoku – onClick. Далі викликається метод openNewGameDialog, який показує діалог вибору складності та стартує гру з вибраним рівнем складності. Цей діалог будується за допомогою класу AlertDialog.

Private void openNewGameDialog() ( new AlertDialog.Builder(this) .setTitle(R.string.new_game_title) .setItems(R.array.difficulty, new DialogInterface.OnClickListener() ( public void onClick(DialogInterface (i); ) )) .show(); )

Зауважте, що вміст діалогу (набір кнопок) будується з масиву рядків R.array.difficulty. Тут же призначається обробник натискання на кнопки діалогу, який за номером кнопки запускає нову гру із заданим рівнем складності, викликаючи метод startGame.

Графіка

За ігрову логіку відповідає клас Game. Тут завантажуються завдання, перевіряються умови виграшу. Клас Game є Activity але інтерфейс описаний над XML, а створюється кодом. У методі onCreate створюється View:

PuzzleView = новий PuzzleView(this);
setContentView(puzzleView);
puzzleView.requestFocus();

PazzleView це клас похідний від View, в ньому малюється ігрове поле і відбувається обробка подій торкання екрану (метод onTouchEvent) та натискання клавіш (метод onKeyDown).

Розберемо процес малювання на Android. Для малювання потрібно перевантажити метод на Draw. Метод отримує об'єкт Canvas, через який здійснюється малювання. Для завдання кольорів створюються об'єкти Paint. Колір задається у форматі ARGB. Колір краще зберігати як ресурсів (файл colors.xml). Paint це не тільки клас для зберігання інформації про колір. Наприклад, при малюванні тексту він містить інформацію про спосіб зафарбовування, шрифт і вирівнювання тексту.

Canvas містить набір методів для малювання графіки (drawRect, drawLine, drawPath, drawText та інші).

Для оптимізації графіки, краще утриматися від створення об'єктів і зайвих обчислень усередині методу onDraw (приклад реалізації графіки, що розглядається, не оптимальний).

Музика

Для відтворення музики використовується клас MediaPlayer. Музика для гри додана до ресурсів. Потрібно просто скопіювати необхідні файли в папку /res/raw (формати WAV, AAC, MP3, WMA, AMR, OGG, MIDI).
Для початку потрібно створити екземпляр класу MediaPlayer:
mp = MediaPlayer.create(context, resource);
Тут context зазвичай клас, який ініціює запуск музики, resource – ідентифікатор ресурсу з музикою. Для керування відтворенням використовують методи start, stop та release.

У грі музика відтворюється в головному меню (запуск із класу Sudoku) та в ігровому процесі(Запуск із класу Game). Для керування відтворенням створено клас Music. Клас містить статичний екземпляр MediaPlayer, що дозволяє створювати окремий проект кожного запуску звукового ресурсу.

У класах Sudoku та Game перевизначені методи onResume та onPause, в яких запускається музика при старті Activity та зупиняється при деактивації.

Висновки

Приклад, який розглядається у статті не надто складний, що дозволяє в ньому розібратися без особливих зусиль. При цьому він торкається різних аспектів розробки під Android.

P.S. Дуже дякую користувачу

Як створити мобільний додаток в Android Studio

Android Studio - інтегроване середовище розробки (IDE) на базі IntelliJ IDEA, яке Google називає офіційним IDE для додатків Android.

У цьому посібнику описано розробка програм для android:

  • Навігація між файлами за допомогою провідника
  • Встановлення файлу AndroidManifest.xml
  • Імпорт файлів у проект
  • Розширений редактор макетів з функцією динамічного прев'ю
  • Використання Logcat та Android Monitor для налагодження програм

Початок роботи в Android Studio

Запустіть Android Studio, у вікні Android Studio Setup WizardВиберіть Start a new Android Studio проект(почати новий проект).

У вікні Create New ProjectВиберіть Application Name(назва програми) як Fortune ball («Куля фортуни»), введіть домен компанії; в полі Project locationвиберіть місце, в якому програма буде збережена. Клацніть Next.

Перед вами вікно Target Android Devices. Виберіть Phone and Tablet. В полі Minimum SDKвкажіть API 15. Натисніть Next.

У вікні Add an activity to MobileВиберіть Basic Activity. Оцініть усі опції, у цьому вікні представлений огляд доступних макетів.

Клацніть Next.

У вікні Customize the Activity, скріншот якого розміщено нижче, ви зможете змінити Activity Name(назва активності), Layout Name(назва макета), Title(загальна назва) та Menu Resource Name(Назва меню ресурсів). Залишіть значення за замовчуванням та клацніть Finish.

За кілька секунд з'явиться наступне вікно:

На вашому пристрої або емуляторі висвітиться таке саме вікно. Емулятор функціонує як пристрій, завантаження займе певний час.

Це вже програма. Йому багато чого не вистачає, але зараз можна переходити до наступного кроку.

Структура проекту та файлу

Вікно показує файли проекту.

У меню, що випадає (скриншот нижче) є кілька фільтрів для файлів. Основні - Project та Android.

Фільтр Project покаже всі модулі програми - у кожному проекті є щонайменше один модуль. Серед модулів інших типів є модулі з бібліотек сторонніх розробників, або модулі інших програм Android (такі як програми для Android Wear, Android TV). Кожен із модулів має свій набір характеристик, у т. ч. файл gradle, ресурси та вихідні файли (java-файли).

Примітка. Якщо проект не відкритий, клацніть вкладку Project на лівій стороні панелі, як показано на скріншоті. За замовчуванням встановлено фільтр Android, який групує файли за певного типу. На верхньому рівні ви побачите такі папки:

  • manifests
  • Gradle Scripts

У наступних розділах докладно описані всі ці папки, починаючи з manifests.

Огляд AndroidManifest.xml

Кожна програма під Android має файл AndroidManifest.xml, який знаходиться в папці manifests. Цей XML-файл повідомляє вашій системі про вимоги програми. Присутність цього файлу обов'язково, тому що саме він дозволяє системі Android створити програму.

Відкрийте папку manifests та AndroidManifest.xml. Подвійний клік відкриє файл.

Теги manifest і application потрібні manifest, з'являються лише один раз.

Кожен тег також визначає набір атрибутів, поряд із назвою елемента. Наприклад, деякі атрибути в application можуть бути такими:

android:icon, android:label та android:theme

Серед іншого у manifest може з'явитися:

  • uses-permission: запитує спеціальний дозвіл, який видається додатком для коректної роботи. Наприклад, програма повинна вимагати дозволу у користувача, щоб отримати доступ до мережі - у випадку, якщо ви додасте дозвіл android.permission.INTERNET.
  • activity: повідомляє про активність, яка частково відповідає за візуальний UI та логіку. Будь-яка активність, яка передбачена в додатку, повинна додаватися в manifest - невідзначену активність система не помітить, і вона не відображатиметься у додатку.
  • service: додає сервіс, який ви збираєтеся використовувати, щоб реалізувати тривалі операції або розширені комунікації API з іншими програмами. Прикладом у цьому випадку може бути мережевий виклик, за допомогою якого програма отримує дані. На відміну від активностей, сервіси не мають інтерфейсів користувача.
  • receiver: завдяки приймачеві широкомовних повідомлень додаток отримує сигнали про системних повідомленьабо інших програм, навіть якщо інші компоненти програми не запущені. Приклад такої ситуації - батарея з низьким рівнемзаряду та повідомлення про це операційної системи.

Повний перелік тегів можна знайти у manifest-файлі на веб-сайті Android Developer.

Налаштування файлу Manifest

До активності додайте наступний атрибут:

android:screenOrientation="portrait". щоб обмежити екран лише портретним режимом. Якщо цього не зробити, екран, залежно від розташування пристрою, буде або в ландшафтному або портретному режимі. Після додавання атрибуту файл manifestвиглядатиме як на скріншоті.

Створіть та запустіть програму. Якщо ви тестуєте на своєму пристрої, переверніть його, переконайтеся, що екран не переміщається в ландшафтний режимякщо ви обмежили цю можливість у файлі AndroidManifest.

Огляд Gradle

Перейдемо до Gradle. Gradle перетворює Android-проект на APK, що встановлюється, який можна встановлювати на пристрої. Файл build.gradle присутній у Gradle scripts, на двох рівнях: модульному та проектному.

Відкрийте файл build.gradle (Module:app). Ви побачите установку gradle за замовчуванням:

apply plugin: "com.android.application" android (compileSdkVersion 25buildToolsVersion "25.0.2" defaultConfig (applicationId "com.raywenderlich.fortuneball"minSdkVersion 15targetSdkVersion 25version .runner.AndroidJUnitRunner")buildTypes (release (minifyEnabled falseproguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"))) dependencies (compile fileTree(dir: "libs", include: ["*.jar"])androidTestCompile(" com.android.support.test.espresso:espresso-core:2.2.2", (exclude group: "com.android.support", module: "support-annotations"))compile "com.android.support:appcompat- v7:25.1.0"compile "com.android.support:design:25.1.0"testCompile "junit:junit:4.12")

Розберемо основні компоненти:

  • apply plugin: ‘com.android.application’ застосовує плагін Android на батьківському рівні та забезпечує доступність завдань верхнього рівня, які потрібні для створення програми.
  • Поруч із розділом android(…) знаходяться опції налаштувань, такі як targetSdkVersion. Цільовий SDK для вашої програми повинен розташовуватися на новітньому рівні API. Ще один важливий компонент - minSDKVersion (визначає мінімальну версію SDK, яка має бути встановлена ​​на пристрої, щоб програму можна було запустити). Наприклад, якщо версія SDK 14, тоді програма буде неможливо запустити на цьому пристрої, оскільки в даному конкретному випадку мінімальна версія 15, що підтримується.
  • Останній компонент – dependencies(…). Необхідно відзначити compile 'com.android.support:appcompat-v7:VERSION' та compile 'com.android.support:design:VERSION'. Вони забезпечують підтримку та сумісність особливостей нових та старих API.

Крім бібліотек сумісності Android, ви можете додати бібліотеки сторонніх розробників до компонента dependencies(…) Бібліотека анімацій, наприклад, містить ефекти інтерфейсу користувача. Знайдіть dependencies, потім додайте вниз дві наступні лінії:

dependencies (... compile "com.daimajia.easing:library:2.0@aar"compile "com.daimajia.androidanimations:library:2.2@aar")

Тут можна додати залежність сторонніх розробників. Бібліотеки автоматично завантажуються та інтегруються в Android Studio. Натисніть Sync Now, щоб інтегрувати ці залежності у свою програму.

Синхронізація триває кілька секунд. Оновлення Gradle відображаються у вкладці Messages нижньої панелі.

Це все налаштування, які вам поки що будуть потрібні в Gradle. Такі маніпуляції додадуть анімацію у додатку.

Імпорт файлів

У розробці програми під Android важлива інтеграція з іншими ресурсами: зображення, кастомні шрифти, звуки, відео та ін. Ці ресурси імпортуються в Android Studio і розміщуються у відповідних папках, що дозволяє операційній системі підбирати коректні ресурси для програми. Для нашої програми Fortune Ball знадобиться імпорт зображень у папки drawable. У цих папках можуть бути зображення або спеціальні файли XML drawables (тобто ви можете малювати форми за допомогою XML-коду та використовувати їх у своїх макетах).

В Android Studio перейдіть з Android до Project

Відкрийте папку res (app > src > main). Клацніть правою кнопкою миші по папці res, виберіть New > Android resource directory.

З'явиться вікно під назвою New Resource Directory.

З списку Resource type виберіть опцію drawable. У списку Available qualifiers виберіть Density, потім натисніть кнопку, яка виділена на скріншоті.

У наступному вікні виберіть XX-High Density зі списку Density. Натисніть OK.

Повторіть все, щоб створити папки drawable-xhdpi, drawable-hdpi та drawable-mdpi. Виберіть X-High, high (високу) та medium (середню) щільність відповідно до списку Density.

Кожна папка, яка має визначник щільності (i.e. xxhdpi, xhdpi, hdpi), містить зображення, які співвідносяться з певною щільністю або роздільною здатністю. Наприклад, папка drawable-xxhdpi містить зображення високої щільностіЦе означає, що Android-пристрій з екраном високої роздільної здатності витягне зображення з цієї папки. Зображення добре виглядатиме на всіх пристроях Android, незалежно від якості екрану. Більше інформації про щільність екранів міститься у документації Android.

Створивши всі «мальовані» папки, ви можете повернутися до нерозпакованого контенту в папці та скопіювати (cmd + C) зображення з кожної папки та помістити (cmd + V) у відповідну папку Android Studio.

Розмістивши файли, ви побачите вікно Copy. Виберіть OK.

XML View та Dynamic Layout Previews

Створення макета, з яким користувачі можуть взаємодіяти, є важливою частиною процесу. В Android Studio це можна зробити в редакторі макету. Відкрийте content_main.xml із res/layout. У вкладці Design можна переносити елементи інтерфейсу (кнопки, текстові поля).

Праворуч від Design є вкладка Text, яка дозволяє редагувати XML безпосередньо у макеті.

Перед створенням зовнішнього вигляду необхідно визначити деякі значення. Відкрийте strings.xml у вкладці res/values ​​і додайте наступне:

Зауважте питання, які ви можете повідомити “yes” або “no”, then click on the magic ball.

strings.xml містить усі рядки, які з'являються в програмі. Поділ цих рядків на окремі файли полегшує інтернаціоналізацію, т.к. потрібен лише файл рядків для кожної мови, яка потрібна у додатку. Навіть якщо ви не збираєтеся перекладати програму іншими мовами, використовувати файл рядків завжди рекомендується.

Відкрийте dimens.xml в res/values ​​і додайте наступне:

15sp20sp

dimens.xml містить розмірні величини, граничні інтервали для макетів, розміру тексту та ін. Рекомендується зберігати ці дані у файлі, щоб їх можна було використовувати для створення макетів у подальшому.

Поверніться до content_main.xml і замініть весь вміст файлу наступним кодом:

Цей великий код створює макет програми під назвою FortuneBall. На верхньому рівні ви додали RelativeLayout (відносна розмітка визначає позицію дочірніх компонентів щодо батьківського компонента). RelativeLayout можна розтягнути, підігнати під розмір батьківського компонента.

У відносній розмітці додаються дві частини тексту, зображення та кнопка. Всі ці деталі буде видно в порядку додавання. Їх вміст можна буде прочитати в strings.xml (текст) та у drawable (зображення).

Оновлюючи content_main.xml, зверніть увагу на вікно Preview оновлює UI:

Примітка: якщо не видно вікно перегляду, у вкладці Text натисніть кнопку Preview на панелі редактора розмітки праворуч.

Створіть та запустіть.

І ось ви створили макет програми. Але на даному етапі це лише красиве зображення – клік по кнопці ні до чого не приведе.

Об'єднуємо Activity та View

Ви можете використовувати java-файли, розміщені в app/src/main/java щоб встановити логічні зв'язки у додатку.

Відкрийте MainActivity.java і додайте ці дані під існуючі:

Import java.util.Random;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView; import com.daimajia.androidanimations.library.Techniques;import com.daimajia.androidanimations.library.YoYo;

Перші п'ять імпортів вказують на відповідні класи у вашому коді: Random, View, Button, ImageView та TextView. Наступні два імпорти вказують на те, що ви використовуватимете два класи з бібліотек, у т.ч. build.gradle для анімацій. У MainActivity.java до класу MainActivity додайте:

String fortuneList = ("До нього нема", "Як можу повідомити про це", "Ви можете йти на нього", "Якщо ви не згодні", "Якщо ви не знаєте", "Він не згоден", "Signs point to yes","Yes definitely","Yes","My sources say NO");

У цьому невеликому відрізку коду ви встановили 4 змінні активності. Перший - рядки, які визначають можливі стани, інші три - елементи UI, які ви створили в макеті/розмітці.

Тепер замініть вміст методу onCreate() на наступні дані:

// 1:super.onCreate(savedInstanceState); // 2: setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); (TextView) findViewById(R.id.fortuneText);mFortuneBallImage = (ImageView) findViewById(R.id.fortunateImage);mGenerateFortuneButton = ( Button) findViewById(R.id.fortuneButton); // 4:mGenerateFortuneButton.setOnClickListener(new View.OnClickListener() (@Overridepublic void onClick( View view) (// 5:int index = new Random().nextInt(fortuneList.length);mFortuneText.setText(fortuneList);// 6:YoYo.with(Techniques.Swing).duration(500).playOn(mFortuneBallImage);)));

  • Перевірте, чи активність готова (реалізація суперкласу).
  • Вкажіть, що макет для цієї активності представлений макетом, який ви створили раніше, перевірте панель інструментів.
  • Заповніть значення трьох змінних, які ви створили насамперед у компонентах views макету за допомогою методу findViewById. Значення id те саме, що й у макеті XML.
  • Додайте OnClickListener на кнопці. Це простий клас, який інкапсулює (пакує) функціональність, яку, своєю чергою, викликає натискання кнопки.
  • Виберіть довільний варіант з набору fortuneList для цієї програми, і оновіть текст fortune text, щоб показати.
  • Використовуйте бібліотеку сторонніх розробників, щоб додати залежність у файл gradle, і таким чином додати анімацію до програми.

Вже майже готове. Але потрібно прибрати плаваючу кнопку. Перейдіть в res/layout та відкрийте activity_main.xml.

Цей файл макета містить посилання на content_main.xml, який ви раніше редагували. Він за замовчуванням визначає контент (тулбар і кнопка дії, що плаває). Однак у даному конкретному додатку (Fortune Ball) плаваюча кнопка не потрібна. Тому приберіть наступний блок коду з xml-файлу:

Тепер у правому нижньому кутку немає кнопки, що плаває.

Поставте питання (What's my fortune?) - Натисніть кнопку. Перевірте роботу програми.

Android Monitor

В Android Studio міститься безліч інструментів. Відкрийте вкладку Android Monitor у нижній частині вікна Android Studio.

Тут ви знайдете багато опцій для розробника.

  • Камера та кнопка play зліва дозволяють робити скріншоти та записувати відео.
  • Збільшувальне скло відкриває ряд додаткових опцій, наприклад, аналіз пам'яті програми.
  • Layout Inspector надає візуальний інтерфейс, який визначає, чому інтерфейс програми виглядає певним чином.

LogCat надає детальний огляд системних повідомлень з можливістю вникнути в дані певної програми, або навіть використовувати рядок пошуку, щоб відфільтрувати повідомлення, якщо вони не містять специфічних символів.

Перевірте, що ви вибрали Show only selected application у верхньому правому кутку, як було показано на скріншоті вище. Тепер буде видно лише повідомлення вашої програми.

У MainActivity.java додайте до списку імпортів наступне:

Import android.util.Log;

В кінці onCreate() в MainActivity.java додайте наступну лінію:

Log.v("FORTUNE APP TAG","onCreateCalled");

Log.v викликає два параметри - тег та повідомлення. У даному випадку тег визначено як “FORTUNE APP TAG”, а повідомлення “onCreateCalled”.

Запустіть програму, щоб бачити повідомлення лога на панелі Logcat.

Відфільтруйте вміст LogCat, впишіть onCreateCalled у пошуковий рядок над консоллю:

Потім видаліть пошуковий текст, щоб знову побачити всі повідомлення лога.

Ще одна корисна функція - logcat, це можливість переглядати повідомлення про помилку. Додайте баг у свій цілком функціональний додаток, щоб подивитися, як все влаштовано.

Перейдіть до MainActivity.java і змініть наступну лінію onCreate():

//mFortuneText = (TextView) findViewById(R.id.fortuneText);

Запустіть програму. Клацніть кнопку What's My Fortune? Не працює!

Як би ви виправили помилку, якби не знали про наявність бага? У цьому допоможе Logcat.

Перейдіть до панелі Logcat - вона виглядає приблизно так:

Тут багато червоного тексту. В даному випадку проблема в лінії 50 у файлі MainActivity.java. LogCat перетворив це посилання на гіперпосилання синього кольору. Якщо її натиснути, можна дізнатися, у чому проблема.

Змінивши mFortuneText = (TextView) findViewById(R.id.fortuneText), ви цим створили змінну, але з вказали її значення - звідси виняток нульового покажчика. Поверніться назад і змініть код, запустіть програму. На цей раз все працює гладко. Logcat – корисний інструмент для пошуку помилок.

Share this article:

Related Articles