Android Tips and Tricks

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

Знай свої інструменти
Android Studio

Не забувайте використовувати шорткаты

Опис Mac Linux/Win
Швидкий пошук по налаштувань, діям в IDE Cmd+Shift+A Ctrl+Shift+A
Перевизначити метод батьківського класу Cmd+O Ctrl+O
Пошук файлів по імені Cmd+Shift+O Ctrl+Shift+N
Список нещодавно редагованих файлів Cmd+Shift+E Ctrl+Shift+E
Список нещодавно відкритих файлів Cmd+E Ctrl+E
Останній редагований файл Cmd+Shift+Backspace Ctrl+Shift+Backspace
Знайти всі місця, де використовується метод / змінна Opt+F7 Alt+F7
Як попередній пункт, тільки у спливаючому вікні Cmd+Opt+F7 Ctrl+Alt+F7
Приведення коду у відповідність code style Cmd+Opt+L Ctrl+Alt+L
Оточити блок коду конструкцією(if, else, try) Opt+Cmd+T Alt+Ctrl+T
Відкрити термінал Opt+F12 Alt+F12
Згенерувати Setter/Getters/ Cmd+N Alt+Ins
Пошуку класу по імені CMD+O Ctrl+N
Рефакторинг імені Shift+F6 Shift+F6
Швидке виправлення Opt+Enter Alt+Enter
Перейти до оголошення змінної, класу, методу Cmd+B Ctrl+B
Показати список параметрів для методу Cmd+P Ctrl+P
Меню рефакторінгу Ctrl+T Ctrl+Alt+Shift+T
Вбити процес Cmd+F2 Ctrl+F2
Пошук по всьому проекту Shift+Shift Shift+Shift
Перевизначити метод батьківського класу Ctrl+O Ctrl+O
Видалити рядок Cmd+Backspace Ctrl+Y
Продублювати рядок Cmd+D Ctrl+D
Розширити/Зменшити виділене Opt+Up/Down Arrow key Shift +Ctrl+W
Багаторядковий виділення Ctrl+G Alt+J
Повний список шорткатов MacOSX Linux/Win


Використовуйте плагіни для підвищення ефективності

  1. KeyPromoter
    Цей плагін змусить вас страждати, показуючи великий потворний попап з комбінацією клавіш, яку слід було б використовувати замість натискання на кнопку в IDE. Через якийсь час ви вже на автоматі будете використовувати шорткаты, лише б не бачити цей жахливий попап.
  2. String Manipulation
    Спрощує роботу з рядками, дозволяє сортувати, переводити в інші кодування, прибирати дублікати, триммить текст та ще багато іншого.
  3. Lines Сортувальник
    Додає іконку в меню для сортування вибраних рядків або цілого файлу, якщо нічого не вибрано.
  4. Findbugs
    Статичний аналізатор байткода для пошуку багів у коді Java c допомогою Android Studio.
  5. Sonar Lint
    Плагін, який рантайме показує інформацію про нові баги і порушення якості коду на Java, JavaScript і PHP.
  6. Checkstyle
    Плагін, який сканує Java файли за допомогою Android Studio і перевіряє їх на відповідність налаштувань. Може бути інтегрований в вашу систему збирання, щоб забороняти складання з порушеннями.
  7. ADB Idea
    Плагін, який додає ADB команди (установка і видалення програми, перезапуск програми і тд.) в Android Studio і Intellij.


Використовуйте Live Templates при розробці Android Studio

Template Опис
newInstance
Генерує статичний метод `newInstance` всередині Фрагменту
Toast
Генерує Toast.makeText(context, "", Toast.LENGTH_SHORT).show();
fbc
findViewById з кастом до потрібному типу View
const
Визначити константу типу int
logd
Генерує Log.d(TAG, "");
logm
Винести в лог поточне ім'я методу і його аргументи.
logr
Винести в лог результат поточного методу
logt
Статична рядок TAG для лода, з поточним ім'ям класу
psf
public static final
sout
Друкує рядок в System.out
soutm
Друкує ім'я класу і ім'я методу System.out
soutp
Друкує аргументи і значення методу System.out
visible
Встановити видимість View до VISIBLE
gone
Встановити видимість View GONE
noInstance
Приватний конструктор без аргументів, щоб заборонити створення сутностей
Повний список Live Templates в Android Studio

Постфиксное автодоповнення коду Android Studio

В Android Studio/IntelliJ є спеціальний механізм доповнення коду, який дозволяє застосувати конструкцію до певної змінної.
Template Опис
<expr>.null
згенерує перевірку на null if(<expr> == null)
<expr>.notnull
згенерує перевірку на не null if(<expr> != null)
<expr>.var
створить локальну змінну T name = <expr>
<expr>.field
створить глобальне поле в класі field = <expr>
<ArrayExpr>.for
перетвориться в for(T item : <Arrayexpr>)
<ArrayExpr>.fori
перетвориться в for(int i = 0; i < <Arrayexpr>.length; i++)
<ArrayExpr>.forr
перетвориться в for(int i = <Arrayexpr>.length - 1; i => 0 ; i--)
Повний список доступних постфиксных доповнень коду ви можете знайти в Settings → Editor → Postfix Templates

Використовуйте тему Darcula в Android Studio

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

Не використовуйте незручний/дрібний шрифт

По можливості намагайтеся використовувати такий шрифт, який зручно читати і не доставляє дискомфорту для ваших очей. Я використовую Menlo font.

Використовуйте codestyle

Вам слід використовувати стандартний codestyle. Для прикладу подивіться на AOSP Codestyle або Square IntelliJ Codestyle

Використовуйте Вбудований термінал в Android Studio

Використовуйте Memory/Network/CPU моніторинги в Android Studio для профілювання вашого додатка



Емулятор
Крім використання реальних девайсів, ви також повинні використовувати емулятори через простоти їх налаштування і використання. Також ви можете легко налаштовувати на них дозвіл і версію API для тестування. Genymotion, Intel емулятора поставляється разом з SDK

Vysor
Це дуже корисний інструмент, гідний окремої згадки. По суті, він дозволяє стримить вміст фізичної Android пристрою на екран ноутбука. Дуже зручно, коли вам потрібно продемонструвати демо вашого застосування на презентації. Ми можемо взаємодіяти з реальним пристроєм, і все це буде представлено прямо на екрані ноутбука. Є безкоштовна і платна версії, і платна безперечно варто того, щоб її купити.

DeskDock
Якщо вам необхідно маніпулювати фізичним Android пристроєм (використовуючи клавіатуру і мишу), то це додаток чудово з цим впорається. Дозволяє вам управляти вашим Android пристроєм, як якщо б це була частина робочого столу комп'ютера. Безкоштовна версія дозволяє використовувати мишу, Платна версія дозволяє використовувати клавіатуру і інші можливості. З цим додатком можна тестувати програму, не відриваючи рук від клавіатури ноутбука.

Вибирайте кращі інструменти при написанні коду
  1. Використовуйте OkHttp замість HttpUrlConnect.
    HttpUrlConnect містить певне число помилок. Okhttp досить красиво вирішили їх. Анонс Okhttp
  2. Посилайтесь на локальні `aar` файли наступним чином
    dependencies {
    compile(name:'nameOfYourAARFileWithoutExtension' ext:'aar')
    }
    repositories {
    flatDir {
    dirs 'libs'
    }
    }

  3. Використовуйте Pidcat для більш зручної роботи з логами
  4. Використовуйте Систему Контролю Версій (СКВ), переважно git
  5. Використовуйте ClassyShark
    Спеціальна програма для Android розробників, за допомогою якої дозволяє аналізувати файли типу.апк, .jar, .class .dex, .aar, .so. Може показати інформацію про поля і методи класу, залежностях.апк, кількість методів, використовуваних додатком і тд.
  6. Використовуйте Stetho
    Дозволяє дебажити ваші додатки використовуючи Chrome Dev Tools. Включає в себе моніторинг мережі (Network Monitor), відображення Shared Preferences.
  7. Використовуйте Battery Historian
    Програма для аналізу витрат батареї
  8. При використанні залежностей завжди використовуйте константи. Приміром «24.2.0»
    Уникайте використання '+' для вказівки версій використовуваних бібліотек.
    Це дозволить вам уникнути несподіваних багів або проблем із збіркою, якщо в новій версії зміниться API. А також не доведеться при складанні кожен раз відкривати інтернет-з'єднання для перевірки останньої актуальної версії залежною бібліотеки.
  9. Використовуйте Handler замість TimerTask
  10. Не використовуйте ваш особистий персональний email для публікації додатків
  11. Використовуйте вектори замість PNG
    Якщо у вас все-таки є png, стисніть їх. Вивчіть [TinyPNG](https://tinypng.com) для цього.
  12. Використовуйте proguard
    android {
    ...
    buildTypes {
    release {
    minifyEnabled true
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    }
    }
    

  13. Використовуйте shrinkResources
    android {
    ...
    buildTypes {
    release {
    shrinkResources true
    minifyEnabled true
    ...
    }
    }
    }

  14. Для симуляції вбивства системою вашого застосування в бекграунді, виконайте в терміналі
    adb shell am kill

  15. Вивчіть налаштування для прискорення складання gradle
    Gradle memory >= Dex memory + 1Gb

  16. Розділяйте ваш.апк за допомогою gradle, коли ви використовуєте нативний код. Не змішуйте все разом, бо потім будете страждати, розбираючись в исходниках.
    defaultConfig {
    ...
    
    ndk {
    abiFilters "armeabi", "armeabi-v7a", "mips", "x86"
    }
    }
    
    //Split into platform dependent APK
    splits {
    abi {
    enable true
    reset()
    include 'armeabi', 'armeabi-v7a', 'mips', 'x86' //select ABIs to build APKs for
    universalApk false //generate an additional APK that contains all the ABIs
    }
    }
    
    // map for the version code
    project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'mips': 5, 'x86': 8]
    
    // Rename with proper versioning
    android.applicationVariants.all { variant ->
    // assign different version code for each output
    variant.outputs.each { output ->
    output.versionCodeOverride =
    project.ext.versionCodes.get(output.getFilter(com.android.build.Пропустити, результати.ABI), 0) *
    1000000 +
    android.defaultConfig.versionCode
    }
    }
    

  17. Вивчайте побудова архітектури додатка, наприклад MVP або Clean Architecture
  18. Постарайтеся зрозуміти і використовувати TDD принцип (Test Driven Development)
  19. Змусити gradle перезавантажити кешированные залежності
    ./gradlew --refresh-dependencies

  20. Виключити gradle сум при збірці.
    Припустимо, ви хочете виключити завдання 'javaDoc', в такому випадку використовуйте '-x' опцію ім'я таски, в даному прикладі 'javaDoc'
    ./gradlew clean build -x javaDoc

  21. Більше різних gradle трюків
  22. Дотримуйтесь DRY(Do not Repeat Yourself) принципом
  23. Розділяйте пакети з фічами, а не по верствам
  24. Навчитеся вирішувати конфлікти залежностей
    Враховуючи швидкість розробки android бібліотек та їх оновлення, в якийсь момент ви зустрінетеся з конфліктом залежностей у вашому додатку. Gradle дозволяє вирішувати ці проблеми офіційна документація
  25. Використовуйте різну ім'я пакета для дебаг збірок
    android {
    buildTypes {
    debug {
    applicationIdSuffix '.debug'
    versionNameSuffix '-DEBUG'
    }
    
    release {
    // ...
    }
    }
    }

  26. Перевірте наявність і усуньте витоку пам'яті у вашому android додатку
  27. Використовуйте стандартне найменування для ваших ресурсів
  28. Почніть самі писати gradle таски
    Android використовує Gradle як систему елементів, що дозволяє спростити безліч речей і написати свої таски для автоматизації. Пост на reddit, який містить безліч корисних gradle скриптів.
  29. Використовуйте підходящий .gitignore у ваших Android проектах, наприклад,
  30. Використовуйте LeakCanary щоб виявляти витоку пам'яті у вашому додатку
  31. Прискорте gradle збірку Android Studio 2.2+
    — Перейдіть на gradle версії 3.1.
    Виконайте наступну команду в директорії вашого проекту для оновлення gradle wrapper.
    ./gradlew wrapper --gradle-version 3.1

    — Встановіть опції збірки в глобальному в `gradle.properties` файлі
    android.enableBuildCache=true

  32. Зупинити процес складання програми з допомогою gradle
    ./gradlew -stop

  33. Налаштуйте gradle для автоматичного завантаження відсутніх компонентів android sdk.
    Встановити таку опцію в глобальному gradle.properties файлі.
    android.builder.sdkDownload=true

    Це експериментальна опція, і вона завантажує тільки build tools і platforms, але не оновлює Google або Support Repository
  34. Не підключайте jcenter() і mavenCentral() у вашому build.gradle файлі, тому що
    JCenter включає в себе MavenCentral.
  35. Почистіть gradle кеш, якщо ви думаєте, що поставляються support і google play services бібліотеки в android sdk несумісні.
    Перейдіть у теку ~/.gradle/caches/ і видалити весь вміст папки cache.
    Відкрийте SDK Manager і заново синхронізуйте всі саппортные бібліотеки і google play services.
    Далі оновіть gradle залежності у проекті.
    Тепер все має бути в нормальному стані і працювати коректно.
  36. Налаштуйте зручні `adb` аліаси для вашого терминала.
    Додайте наступні команди до вашого ~/.bashrc або ~/.zshrc файлу, збережіть і перезавантажте термінал. Після цього можете використовувати як показано в стовпці Використання.
    Аліас Використання
    alias screenshot="adb exec-out screencap -p > screen-$(date -j "+%s").png"
    screenshot
    alias startintent="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X shell am start $1"
    startintent https://twitter.com/nisrulz
    alias apkinstall="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X install -r $1"
    apkinstall ~/Desktop/DemoApp.apk
    alias rmapp="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X uninstall $1"
    rmapp com.example.demoapp
    alias clearapp="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X shell pm clear $1"
    clearapp com.example.demoapp
  37. Налаштуйте Android Studio падати при складанні, якщо код містить //STOPSHIP.
    Щоб включити в lint перевірку на
    //STOPSHIP
    , додайте в ваш `build.gradle`
    android {
    ...
    lintOptions {
    abortOnError true
    fatal 'StopShip'
    }
    }

    Якщо у вас є
    //STOPSHIP
    коментар в коді, релізна збірка не збереться. Крім цього, ви також можете включити в Android Studio підсвічування таких коментарів (за замовчуванням вимкнено).
    Preferences > Editor > Code Style > Inspections
    . Шукайте в пошуку STOPSHIP і встановлюйте прапорець для підсвічування.
  38. Використовуйте `adb install -g`, щоб надати всі права перелічені в маніфесті.
  39. Використовуйте Alfi для пошуку бібліотек по імені. Вас буде одразу запропонована рядок для включення в gradle скрипт складання програми. Це по суті консольна версія Gradle, please — веб-додатки.
    alfi $name_of_library$

    Скопіюйте потрібну бібліотеку.
    Вставте в ваш build.gradle.
  40. Використовуйте Dryrun, щоб швидко і зручно протестувати бібліотеку або приклад програми.
    dryrun $REMOTE_GIT_URL$

  41. Відображати результати юніт тестів безпосередньо в консоль.
    android {
    ...
    testOptions.unitTests.all {
    testLogging {
    events 'passed', 'skipped', 'failed', 'standardOut', 'standardError'
    outputs.upToDateWhen { false }
    showStandardStreams = true
    }
    }
    }
    

  42. Зробіть збірку швидше, використовуючи offline режим.
    --offline
    прапор говорить gradle, щоб при складанні були використані залежно з кешу. Якщо запускати збірку з цим прапором, gradle ніколи не спробує викачати залежності по мережі. Якщо необхідні модулі відсутні в кеші — додаток не збереться
  43. Збирайте debug складання якомога швидше:
    ./gradlew assembleDevelopDebug --offline

  44. Проганяйте юніт тести як можна швидше:
    ./gradlew test --offline

  45. Инкапсулируйте Logger в окремому класі
  46. Якщо ви хочете автоматично ініціалізувати бібліотеку, використовуйте Content Provider. Почитайте як це робить Firebase.
Корисні поради по UI/UX

Рух

Material Design використовує фізику реального світу як основу. Об'єкти в реальному світі не рухаються лінійно, вони рухаються по викривлених траєкторіях а також із прискоренням і уповільненням в залежності від ситуації.
Таким чином, ви повинні маніпулювати властивостями і анімувати об'єкти так, щоб це виглядало натурально і природно. Наприклад машина, яка виїжджає за екран починає рух повільно, поступово прискорюючись по наближенню до краю екрана. Аналогічно ui елементи повинні переміщатися використовуючи такі класи як AccelerateInterpolator, FastOutSlowInInterpolator і другие.

Шрифти, відступи

В принципі, нестандартні шрифти можна використовувати як частину брендингу, однак краще все-таки зупинитися на стандартних Roboto і Noto, якщо це можливо, особливо для основного тексту через їх впізнаваності та частого використання.
Roboto покриває Латинські, Грецькі та Латинські літери, Noto покриває інші мови.
Балансування яскравості шрифту — це один з найбільш важливих параметрів сучасної стилістики. Основна ідея полягає в тому, що чим менше шрифт, тим більш яскравим він повинен бути, і навпаки.
Сам текст повинен бути вирівняний по сітці з осередком 4dp.
Ідеальна довжина тексту для великих блоків від 40 до 60 символів в рядку.

Іконки

Кахлі повинні бути розміром 48dp c краями 1dp, що еквівалентно:
48px x 48px - mdpi
 
72px x 72px - hdpi
 
96px x 96px - xhdpi
 
144px x 144px - xxhdpi
 
192px x 192px - xxxhdpi

Додаткова іконка з розміром 512px x 512px повинна бути надана для Google Play.
Те ж стосується іконки з розміром 1024px x 500px, яка буде відображатися в шапці на сторінці вашого додатка.

Ripple

Коли реалізуєте Ripple ефект, використовуйте
?attr/selectableItemBackground
замість
?android:attr
, докладніше.
Коли реалізуєте Ripple ефект на елементі як Button використовуйте:
чоловічий:background="?attr/selectableItemBackground" 

Коли реалізуєте Ripple, який виходить за краї View, як наприклад у ImageView , використовуйте:
?attr/selectableItemBackgroundBorderless

Інші пункти

Елементи відповідно до Material Design Views повинні бути розташовані на сітці з осередком розмірами 8dp, якщо це можливо. Завдяки цьому підходу UI виглядає структурованим і приємним.
Якщо вам потрібна посилання на який-небудь елемент ViewGroup (LinearLayout, FrameLayout, RelativeLayout, etc.) і вам не потрібні ніякі специфічні методи саме для цього типу ViewGroup, то не зберігайте конкретний тип, використовуйте просто ViewGroup.

Інші ресурси


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


Використовуйте безкоштовні mock API для тестування
Всі приклади, наведені нижче, тим чи іншим чином дозволяють тестувати ваш додаток без бекенду. Якщо знадобиться скористатися, пробіжіться по списку і подивіться, який з пунктів максимально відповідає вашим запитам і потребам по функціоналу.



Підпишіться на дайджести за андроїд розробці
  • Чоловічий Weekly — Безкоштовний дайджест, щоб залишатися в тренді і дізнаватися про нові технології
  • AndroidDevDigest — Щотижнева розсилка новин від AndroidDevDigest
  • Infinium AndroidSweets — Найсвіжіші новини зі світу Android
  • Kotlin Weekly — Безкоштовний дайджест за Kotlin


Ще приклади корисних програм
  • Чоловічий SVG to VectorDrawable — Конвертація SVG Vector
  • SQLite Viewer — Дозволяє переглядати sqlite файли онлайн
  • Чоловічий 9-patch shadow generator -Утиліта, яка дозволить вам повністю касмтомизировать тіні, наскільки це можливо
  • APK method count — Допоможе вам дізнатися число методів, що використовуються в апк
  • Material Palette — Генерація Material палітри кольорів
  • Javadoc Themer — Розфарбує різними кольорами нудні javaDocs!
  • Method Count — Використовувати, щоб легко дізнаватися кількість методів у бібліотеках і не перевершувати 65К ліміт!
  • Gradle, please — Пошук зависмостей по імені бібліотеки для вставки в gradle скрипт
  • jsonschema2pojo — Генерація POJO з json або json схеми
  • Чоловічий Asset Studio — Дозволяє легко обертати скріншоти в рамку смартфона


як доповнення — Android бібліотеки розроблені особисто мною
  • EasyDeviceInfo — Дозволяє легко для разработччика отримувати інформацію про девайсі
  • Sensey — Бібліотека для розпізнання жестів
  • PackageHunter — Дозволяє отримувати інформацію про встановлених програм на девайсі
  • Zentone — Легко генерує необхідний тон
  • RecyclerViewHelper — Надає різні допоміжні функції
  • StackedHorizontalProgressbar — Горизонтальний прогрессбар
  • QREader — Спрощення читання QR кодів за допомогою google mobile vision api
  • ScreenShott — Дозволяє програмно робити скріншот пристрою
  • EvTrack — Бібліотека для спрощення трекінгу подій і помилок
  • OptimusHTTP — Спрощення роботи з мережею
  • ShoutOut — Бібліотека для логгирования
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.