πŸ“±Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ мобильноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Android Π½Π° JavaScript с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Apache Cordova

РассказываСм, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ JavaScript Π½Π° мобильном устройствС с Android ΠΈ Π²Ρ‹Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Google Play. Π‘ΠΏΠΎΠΉΠ»Π΅Ρ€: это ΠΏΠΎ силам Π΄Π°ΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ.

РаспространСниС ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств Π² нашС врСмя достигло нСвСроятных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠœΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ Π΅ΡΡ‚ΡŒ Ρƒ 2 ΠΈΠ· ΠΊΠ°ΠΆΠ΄Ρ‹Ρ… 3 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π½Π° ΠΏΠ»Π°Π½Π΅Ρ‚Π΅. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… люди ΠΎΠ±Ρ‰Π°ΡŽΡ‚ΡΡ, Π΄Π΅Π»Π°ΡŽΡ‚ ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΠ³Ρ€Π°ΡŽΡ‚. Π­Ρ‚ΠΎ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ Ρ€Ρ‹Π½ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСльзя ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π±Π΅Π· внимания.

Однако Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ прилоТСния для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, Π½ΡƒΠΆΠ½ΠΎ Π²Π»Π°Π΄Π΅Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ языком программирования. Swift – для iOS, Java ΠΈΠ»ΠΈ Kotlin – для Android. Или JavaScript – для iOS, Android ΠΈ ряда Π΄Ρ€ΡƒΠ³ΠΈΡ… ОБ!

Π”Π°-Π΄Π°, JavaScript Π²Π΅Π·Π΄Π΅, ΠΈ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Π² Ρ‚ΠΎΠΌ числС. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅ΡΡ‚ΡŒ нСсколько извСстных ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² для создания кроссплатформСнных ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° этом языкС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, React Native ΠΈ Apache Cordova, Π° Ρ‚Π°ΠΊΠΆΠ΅ основанныС Π½Π° Π½Π΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹.

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° React Native трСбуСтся Π·Π½Π°Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ React ΠΈ основных ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΉ. Cordova ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ОБ. Π’Π°ΠΊΠΈΠ΅ "Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Π΅" прилоТСния Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ…Π²Π°ΡΡ‚Π°Ρ‚ΡŒΡΡ высокой Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΡ‡Π΅Π½ΡŒ просты Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅.

Cordova ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для создания простых ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π±Π΅Π· слоТной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ. БСйчас ΠΌΡ‹ ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… – классичСскоС Todo App для Android Π½Π° JavaScript.

Π¨Π°Π³ #0. Настройка срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ пишСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Android, Π½Π°ΠΌ понадобится JDK (Java Development Kit) ΠΈ Android SDK – срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Android. А Ρ‚Π°ΠΊΠΆΠ΅ собствСнно Cordova.

JDK

Установочник для Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° сайтС Oracle. Π’Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ Π½Π΅ Π²Ρ‹ΡˆΠ΅ JDK 8, с Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹ΠΌΠΈ Cordova Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΊΡƒΠ΄Π° установился ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΈ сохранитС этот ΠΏΡƒΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния JAVA_HOME.

А Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ PATH.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ:

  1. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды Π² Windows
  2. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды Π² Mac

Android Studio

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ΄ Android Ρ‚Π°ΠΊΠΆΠ΅ потрСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Android Studio.

ПослС установки Π·Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ мСню SDK Manager (ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Tools -> SDK Manager).

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ Android SDK (Android SDK Location), сохранитС Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния ANDROID_SDK_ROOT.

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ PATH ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ tools ΠΈ platform-tools:

Π—Π°Ρ‚Π΅ΠΌ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ установлСн ΠΏΠ°ΠΊΠ΅Ρ‚ Android SDK Build-Tools (Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ SDK Tools).

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ эмулятора

НаконСц, создадим эмулятор, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Для этого Π·Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π² мСню AVD Manager:

И создайтС эмулятор с Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

Cordova

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ глобально ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ npm-ΠΏΠ°ΠΊΠ΅Ρ‚ Cordova:

npm install -g cordova

Π¨Π°Π³ #1. ΠŸΡ€Π΅Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π²Π΅Π±-страницы Π² Android-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Ρ‹, ΠΏΠΎΡ€Π° ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ самому интСрСсному.

ВСроятно, самый интСрСсный вопрос – ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ Π²Π΅Π±-страницу Π½Π° устройствС Android. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° Π½Π΅Π³ΠΎ, создадим пустой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Cordova ΠΈ разбСрСмся Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ пустого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Команда для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Cordova:

cordova create todo-app com.furrycat.todo TodoApp
  • ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ – todo-app – это Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Cordova создаст Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.
  • Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ – com.furrycat.todo – это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
  • Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ – TodoApp – имя прилоТСния.

Появилась новая ΠΏΠ°ΠΏΠΊΠ° todo-app. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π½Π΅Π΅ ΠΈ запускайтС всС дальнСйшиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡƒΠΆΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ этой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ.

cd todo-app

Π’Π½ΡƒΡ‚Ρ€ΠΈ находится Ρ„Π°ΠΉΠ» config.xml, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТит всС ΠΌΠ΅Ρ‚Π°-Π΄Π°Π½Π½Ρ‹Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ°ΠΏΠΊΠ° www – ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π½Π΅ΠΉ ΠΈ располоТСн ΠΊΠΎΠ΄ Π²Π΅Π±-прилоТСния. БСйчас это ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ страница – index.html – с Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠΎΠΌ Cordova ΠΈ ΠΏΠ°Ρ€ΠΎΠΉ надписСй, ΠΊ Π½Π΅ΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ Ρ„Π°ΠΉΠ» стилСй ΠΈ скрипт. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ эту страницу Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅:

ЗаглянСм Π² Ρ„Π°ΠΉΠ» js/index.js. Π—Π΄Π΅ΡΡŒ ΠΎΡ‡Π΅Π½ΡŒ простой ΠΊΠΎΠ΄: установлСн ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ события deviceready, Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ просто добавляСт класс .ready ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· html-элСмСнтов.

document.addEventListener('deviceready', onDeviceReady, false);

function onDeviceReady() {
    // Cordova is now initialized. Have fun!

    console.log('Running cordova-' + cordova.platformId + '@' + cordova.version);
    document.getElementById('deviceready').classList.add('ready');
}

deviceready – это событиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сама Cordova. НСтрудно Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ устройство, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²ΠΎ Π΅Π³ΠΎ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ запустили ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² ΠΎΠ±Ρ…ΠΎΠ΄ Cordova, это событиС Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, поэтому надпись Connecting to device Π½Π΅ исчСзаСт.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹

Π£ΠΊΠ°ΠΆΠ΅ΠΌ Ρ†Π΅Π»Π΅Π²Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° – Ρƒ нас это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Android:

cordova platform add android

Появилась новая дирСктория platforms, Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π΅ – android. Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ нашСго Π²Π΅Π±-прилоТСния Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΏΠ°ΠΏΠΊΠ΅ platforms/android/app/src/main/assets/www. Он просто копируСтся ΠΈΠ· внСшнСй ΠΏΠ°ΠΏΠΊΠΈ www ΠΏΡ€ΠΈ сборкС. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΏΠ°ΠΏΠΊΠ΅ android – это ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Cordova, нСобходимая для запуска Π½Π° устройствС.

Π‘Π±ΠΎΡ€ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Команда для сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° для Android-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹:

cordova build android

Π’ ΠΏΠ°ΠΏΠΊΠ΅ platforms/android/app появилась новая дирСктория build. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π΅ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» outputs/apk/app-debug.apk. По сути это ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ apk, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° Android-устройствС.

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π½Π° смартфон, запуститС – ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚Ρƒ ΡΠ°ΠΌΡƒΡŽ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΡƒΡŽ Π²Π΅Π±-страницу. ВсС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!

Как Π²ΠΈΠ΄Π½ΠΎ, надпись connecting to device смСнилась Π½Π° device is ready. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΡ€Π΄ΠΎΠ²Π° Π²Ρ‹Π·Π²Π°Π»Π° событиС deviceready, Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π»ΠΎ Π½Π° Π½Π΅Π΅.

Запуск Π½Π° эмуляторС ΠΈΠ»ΠΈ устройствС

НСт нСобходимости Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ apk Π½Π° устройство ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ прилоТСния.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° смартфонС, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ, Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΈ запуститС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

cordova run android

ΠšΠΎΡ€Π΄ΠΎΠ²Π° сама собСрСт ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ устройство ΠΈ запустит ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

МоТно ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΈ Π±Π΅Π· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ устройства.

ЗапуститС созданный Ρ€Π°Π½Π΅Π΅ эмулятор Π² Android Studio:

ΠΈ снова Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

cordova run android

На этот Ρ€Π°Π· ΠΊΠΎΡ€Π΄ΠΎΠ²Π° Π½Π°ΠΉΠ΄Π΅Ρ‚ эмулятор ΠΈ запустит ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° Π½Π΅ΠΌ:

***

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΡƒΠΌΠ΅Π΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ Π²Π΅Π±-страницу ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Android-устройствС.

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ стадии

#Π¨Π°Π³ 2. TODO-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΡƒΡŽ страницу Cordova Π½Π° собствСнноС ΠΊΡ€ΡƒΡ‚ΠΎΠ΅ Todo-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ простоС Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, написанноС с использованиСм Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Vue. Π•Π³ΠΎ исходный ΠΊΠΎΠ΄ находится Π² ΠΊΠΎΡ€Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ src. Π‘Π±ΠΎΡ€ΠΊΠ° осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ webpack, собранныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ нСпосрСдствСнно Π² ΠΏΠ°ΠΏΠΊΡƒ www.

Π•ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π΄Π΅Π»Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈΡ… сдСланными. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ список Π΄Π΅Π» Π½Π΅ ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π», всС сохраняСтся Π² localStorage.

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² эмуляторС ΠΈΠ»ΠΈ Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ устройствС ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

cordova run android

ΠžΡ‚Π»Π°Π΄ΠΊΠ°

Π—Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ΅ Π½Π° эмуляторС ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ устройствС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Cordova ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Chrome.

Для этого ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ адрСсу: chrome://inspect/#devices, Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ устройство Π² спискС ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Inspect.

***

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ стадии

Π¨Π°Π³ #3. ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹

Π”ΠΎ сих ΠΏΠΎΡ€ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ использовало Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π΅Π±-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Однако Cordova прСдоставляСт доступ ΠΈ ΠΊ возмоТностям мобильного устройства – Ρ‡Π΅Ρ€Π΅Π· многочислСнныС ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° ΠΈ оповСщСния.

Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π°

Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ дСйствия ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ – модальноС ΠΎΠΊΠ½ΠΎ с ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ. Π’ Π²Π΅Π±Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для этого стандартноС модальноС ΠΎΠΊΠ½ΠΎ confirm, Π½ΠΎ Π΅Π³ΠΎ нСльзя ΠΊΠ°ΡΡ‚ΠΎΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΌ ΠΎΠΊΠ½Π°ΠΌ Android.

Для этого установим ΠΏΠ»Π°Π³ΠΈΠ½ cordova-plugin-dialogs:

cordova plugin add cordova-plugin-dialogs

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² ΠΊΠΎΠ΄Π΅ прилоТСния Π½Π°ΠΌ доступ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ navigator.notification с Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ:

  1. navigator.notification.alert
  2. navigator.notification.confirm
  3. navigator.notification.prompt
  4. navigator.notification.beep

Нам Π½ΡƒΠΆΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ confirm:

// синтаксис
navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels])

// использованиС
removeItem(item) {
  navigator.notification.confirm(
    `Π”Π΅Π»ΠΎ ${item.title} Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½ΠΎ навсСгда`,
    (buttonIndex) => {
      if (buttonIndex == 1) {
        // ... Π»ΠΎΠ³ΠΈΠΊΠ° удалСния Π΄Π΅Π»Π° ΠΈΠ· списка
      }
    },
    'ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅',
    ['Π£Π΄Π°Π»ΠΈΡ‚ΡŒ', 'ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ']
  );
},
***

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ стадии

Напоминания ΠΎ Π΄Π΅Π»Π°Ρ…

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΎΡ‡Π΅Π½ΡŒ полСзная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ – Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΠΎ Π΄Π΅Π»Π°Ρ… Π² установлСнноС врСмя.

Для Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΄Π°Ρ‚Ρƒ ΠΈ врСмя – Π½Π°ΠΌ понадобится ΠΏΠ»Π°Π³ΠΈΠ½ skwas-cordova-plugin-datetimepicker.

cordova plugin add skwas-cordova-plugin-datetimepicker

ИспользованиС в кодС:

selectTime() {
  cordova.plugins.DateTimePicker.show({
    mode: 'datetime',
    date: new Date(),
    success: (newDate) => {
      // ... сохранСниС Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
    }
  });
}

А для планирования ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠΉ понадобится ΠΏΠ»Π°Π³ΠΈΠ½ cordova-plugin-local-notification.

cordova plugin add cordova-plugin-local-notification

ИспользованиС Π² ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

// Установка напоминания
const config = {
  id: this.notificationId,
  title: 'Π•ΡΡ‚ΡŒ Π΄Π΅Π»ΠΎ: ' + this.title,
  text: this.description,
  group: 'todo',
  trigger: {
    at: new Date(this.time)
  },
  foreground: true
};

cordova.plugins.notification.local.schedule(config);

// УдалСниС напоминания
cordova.plugins.notification.local.cancel(this.notificationId);

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ trigger.at.

***

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ стадии

ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Google Play

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°.

cordova build android --release

Π’ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ platforms/android/app/build/outputs/apk Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ новая ΠΏΠ°ΠΏΠΊΠ° release, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ нСподписанный apk-Ρ„Π°ΠΉΠ».

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Google Play, Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒ.

Для этого Π½ΡƒΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡:

keytool -genkey -v -keystore todoapp.keystore -alias todoapp -keyalg RSA -keysize 2048 -validity 10000

Имя ΠΊΠ»ΡŽΡ‡Π° – todoapp.keystore, алиас – todoapp. ΠŸΡ€ΠΈ создании Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ввСсти ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° ряд вопросов (ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ…). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ появится Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» todoapp.keystore – Π½Π΅ потСряйтС Π΅Π³ΠΎ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ скомпилируСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore todoapp.keystore platforms/android/build/outputs/apk/release/app-release-unsigned.apk todoapp

Π’Π°ΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ имя ΠΊΠ»ΡŽΡ‡Π° ΠΈ алиас.

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Π·Π°ΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Π½ΠΎΠ²Ρ‹ΠΉ apk. Для этого понадобится ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° zipalign (ΠΎΠ½Π° находится Π² ΠΏΠ°ΠΏΠΊΠ΅ build-tools Π² Android SDK):

$ zipalign -v 4 platforms/android/build/outputs/apk/release/app-release-unsigned.apk platforms/android/build/outputs/apk/release/app-release-signed.apk

Π­Ρ‚ΠΎΡ‚ apk-Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² Google Play Ρ‡Π΅Ρ€Π΅Π· ваш Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

***

Π”Π΅ΠΌΠΎ-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Google Play

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

admin
10 июня 2018

Π›Π°ΠΉΡ„Ρ…Π°ΠΊ: Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ JavaScript

ΠžΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ инструмСнтарий JS ΠΈ Ρ‚ΠΎΠ½Π½Ρ‹ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² ΠΏΠΎ Π½Π΅ΠΌΡƒ. Π‘ Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ? Расск...
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста
13 фСвраля 2018

10 ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΡƒΡ‡Π°Ρ‚ вас ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

Π˜Ρ‰Π΅Ρ‚Π΅ курсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΡƒΡ‡Π°Ρ‚ вас ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ? ΠœΡ‹ собрали Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹...