Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Android Development with Kotlin, Part 1 - Introduction

156 views

Published on

Intro to developing Android Apps using Kotlin as development language.

- Hybrid & Native Apps
- Native Android Development
- Android & SDK Versions
- Hello World
- Emulators, Devices & ADB
- Android Emulators & Build Process
- Kotlin Android Extensions
- App Lifecycle
- Saving App State
- Debugging
- Code Style + Documentation
- Activities & Intents
- Implicit Intents

Published in: Technology
  • Hi there! Get Your Professional Job-Winning Resume Here - Check our website! http://bit.ly/resumpro
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

Android Development with Kotlin, Part 1 - Introduction

  1. 1. St. Pölten University of Applied SciencesSt. Pölten University of Applied Sciences Platzhalter für möglichen Bildeinsatz Android Development with Kotlin, Part 1 Introduction Andreas Jakl Digital Healthcare FH St. Pölten Platzhalter für möglichen Bildeinsatz Version 1.3
  2. 2. Andreas Jakl ▪ Focus areas ▪ AR / VR, mobile apps, sensors, interaction technology, software architecture, open source developer (NFC, Bluetooth Beacons) ▪ Microsoft MVP (Most Valuable Professional) ▪ mobility.builders community: Mobile Developer After-Work Events ▪ Previous Experience ▪ Tieto, Start-up (Mopius), Nokia (Finland), Siemens Mobile (Munich), FH Hagenberg (Mobile Computing) Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten https://www.andreasjakl.com/ @andijakl andreas.jakl@fhstp.ac.at 2
  3. 3. Contents ▪ Hybrid & Native Apps ▪ Native Android Development ▪ Android & SDK Versions ▪ Hello World ▪ Emulators, Devices & ADB ▪ Android Emulators & Build Process ▪ Kotlin Android Extensions ▪ App Lifecycle ▪ Saving App State ▪ Debugging ▪ Code Style + Documentation ▪ Activities & Intents ▪ Implicit Intents Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 3
  4. 4. Android Studio ▪ If you have not already: ▪ Install Android Studio now! ▪ It’ll take some time … ▪ https://developer.android.com/studio/index.html ▪ Already includes JDK ▪ Troubleshooting ▪ https://docs.google.com/document/d/1w1Xn_hnSAODAAtdRDp7haYPBtEwX _l7Htpf8Wpgbu6w/pub?embedded=true Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 4
  5. 5. NATIVE APPS Web vs Hybrid vs Native Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 5
  6. 6. Web vs Hybrid vs Native Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 6 Web Apps Multi-platform Web UI / UX Run in browser (can be offline) Slower performance Less system integration Native Apps Single platform Native UI / UX Run directly on OS Fast performance, best system integration. More expensive. Hybrid Apps Multi-platform Hybrid UI / UX Parts in HTML, parts native
  7. 7. Web vs Hybrid vs Native Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 7 Web Apps Native Apps Hybrid Apps Cost User Experience
  8. 8. Additional Materials ▪ Free Android Courses by Google & Udacity ▪ Java Programming Basics: https://www.udacity.com/course/java-programming- basics--ud282# ▪ Android Basics: User Interface: https://www.udacity.com/course/android-basics- user-interface--ud834# ▪ Developing Android Apps: https://www.udacity.com/course/new-android- fundamentals--ud851# ▪ Kotlin for Android Developers: https://www.udacity.com/course/kotlin-for- android-developers--ud888 ▪ Quick Kotlin overview for Java Android devs: https://developer.android.com/kotlin/index.html Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 8
  9. 9. NATIVE ANDROID DEVELOPMENT Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 9
  10. 10. Android Development Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 10 Java Kotlin C++ Frame- works (Unity, Xamarin, Qt, …) Web Android Studio Visual Studio Specific tools Visual Studio Code, WebStorm, etc. IntelliJ IDEA
  11. 11. Android Web / Hybrid Apps Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 11 Image source: Google, https://developer.android.com/guide/webapps/index.html
  12. 12. Android Web / Hybrid Apps Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 12 Cordova Native functionality (Java, C++, …) Image source: Google, https://developer.android.com/guide/webapps/index.html
  13. 13. Cross-Platform Engines ▪ Usually specialized for app types ▪ Unity ▪ Games, 2D / 3D graphical apps ▪ Cross-platform ▪ Graphical editor, code with C# ▪ Xamarin ▪ Apps ▪ iOS, Android, Windows ▪ Cross-platform C# APIs, with Xamarin.Forms also UI. Specific native code possible ▪ Qt ▪ Apps and embedded ▪ Cross-platform ▪ UI with JavaScript / QML, native code with C++ Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 13 Image sources: Unity Logo, by Unity Technologies Public domain, https://en.wikipedia.org/wiki/File:Unity_Technologies_Logo.svg Xamarin Logo, by Xamarin Inc. / Microsoft Public domain, https://en.wikipedia.org/wiki/File:Xamarin-logo.svg Qt Logo, by The Qt Company Public domain, https://en.wikipedia.org/wiki/File:Qt_logo_2016.svg
  14. 14. Android C++ ▪ Native Development Kit (NDK) ▪ C and C++ code ▪ Why? ▪ Reuse existing C++ code & libraries ▪ Extra performance, less latency ▪ Combine: communication Java <> C++ ▪ Java Native Interface (JNI) ▪ https://developer.android.com/ndk/guides/index.html Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 14 Image credits: logo for C++ created by Jeremy Kratz Licensed for use of any purpose by the Standard C++ Foundatino https://en.wikipedia.org/wiki/File:ISO_C%2B%2B_Logo.svg
  15. 15. Java (for Android) ▪ Java: Source code > Byte code > executed by Java Virtual Machine (JVM) ▪ License ▪ OpenJDK ▪ GPL v2 license ▪ De-facto reference implementation of Java by Oracle / Sun, basis for Oracle JDK ▪ Used in Android since Nougat ▪ Android uses recent Java. By default part of Android Studio: C:android-studiojre ▪ Trial Google vs. Oracle ▪ Use of Java = fair use? Switch to OpenJDK as a result (before: Apache Harmony, re-implementation of copyrighted Java APIs) ▪ http://www.zdnet.com/article/oracle-vs-google-just-as-you-thought-java-android-row-was-over-it-all-kicks-off-again/ Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 15 Image credits: Duke, the mascot used by Java. Copyright Sun Microsystems Inc., BSD license https://en.wikipedia.org/wiki/File:Duke_(Java_mascot)_waving.svg
  16. 16. Kotlin ▪ Programming language, “improved Java” ▪ Runs on Java JVM ▪ Interoperable with Java code + libraries ▪ Possible to mix Kotlin + Java in same project ▪ But can also be compiled to JavaScript + native (C) ▪ Created by JetBrains ▪ Open source language (Apache 2 license): https://github.com/JetBrains/kotlin ▪ https://kotlinlang.org/ Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 16 Image credits: Kotlin Logo, by JetBrains. https://commons.wikimedia.org/wiki/File:Kotlin-logo.svg
  17. 17. Kotlin & Android ▪ Android ▪ Integrated in Android Studio 3+ ▪ Fully supported programming language for Android ▪ Kotlin Android Extensions: https://kotlinlang.org/docs/tutorials/android- plugin.html Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 17 Image credits: Kotlin Logo, by JetBrains. https://commons.wikimedia.org/wiki/File:Kotlin-logo.svg
  18. 18. Android Studio ▪ Official IDE ▪ Customized from JetBrain’s IntelliJ IDEA ▪ Windows, Mac OS, Linux Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 18
  19. 19. ANDROID PLATFORM Versions & Structure Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 19
  20. 20. Android Versions ▪ Version Distribution: https://developer.android.com/about/dashboards/index.html#Platform ▪ More features in newer versions ▪ But: partly backported ▪ Reduces fragmentation ▪ Support Library (AppCompat) ▪ Google Play Services Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 20
  21. 21. Android Versions Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 21
  22. 22. SDK Versions ▪ MinSDK ▪ Lowest OS your app can run on ▪ Restricts features and APIs you can use ▪ TargetSDK ▪ Version you tested the app on ▪ Generally forward compatible: if behavior changes in new version, new Android will still “simulate” behavior of old TargetSDK version (e.g., Runtime permissions with Android M) ▪ https://developer.android.com/reference/android/os/Build.VERSION_CODES.html ▪ Use the latest version when starting a new project ▪ CompileSDK ▪ Not part of the manifest, only relevant for developer ▪ Generally use latest version -> allows using latest APIs if needed Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 22
  23. 23. HELLO WORLD Your First Android App Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 23
  24. 24. Create New Project Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 24
  25. 25. Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 25
  26. 26. Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 26
  27. 27. Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 27
  28. 28. Project Structure Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 28 See: https://developer.android.com/studio/build/index.html
  29. 29. Views ▪ Android user interface (UI) composed of views ▪ TextView ▪ ImageView ▪ Button ▪ Etc. ▪ All managed by a layout ▪ Positioning of views on the screen Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 29
  30. 30. Design Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 30 TextView ImageView Button Toggle: Design / Text (XML)
  31. 31. XML Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 31 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.andreasjakl.helloworld.MainActivity" tools:layout_editor_absoluteY="81dp"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:layout_marginTop="8dp" app:layout_constraintEnd_toEndOf="@+id/textView" app:layout_constraintStart_toStartOf="@+id/textView" app:layout_constraintTop_toBottomOf="@+id/textView" app:srcCompat="@android:drawable/btn_star_big_on" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" android:layout_marginTop="8dp" android:text="Button" app:layout_constraintEnd_toEndOf="@+id/imageView" app:layout_constraintStart_toStartOf="@+id/imageView" app:layout_constraintTop_toBottomOf="@+id/imageView" /> </android.support.constraint.ConstraintLayout> TextView ImageView Button
  32. 32. Activity & Views ▪ Activity’s onCreate(): ▪ R class ▪ Dynamically identify contents in res folder ▪ setContentView() ▪ Inflates the layout XML file Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 32 setContentView(R.layout.activity_main)
  33. 33. SDK Manager ▪ Android Studio > File > Settings > Appearance & Behavior > System Settings > Android SDK, or: ▪ Install all “SDK platforms” you need ▪ SDK Tools: ensure you have at least ▪ Android SDK Build-Tools ▪ Android Emulator ▪ Android SDK Platform-Tools ▪ Android SDK Tools ▪ Google Play Services ▪ Google USB Driver (on Windows) ▪ Intel x86 Emulator Accelerator (HAXM installer) ▪ Support Repository Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 33
  34. 34. Running the App ▪ Press “Play” arrow ▪ Select deployment target ▪ Connected phones or emulator ▪ “Create New Virtual Device” Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 34
  35. 35. Android Debug Bridge (ADB) ▪ ADB manages connections to phones & emulators ▪ Debugging ▪ Installing apps ▪ Windows: add to path (next slide) ▪ “adb.exe” usually in C:Androidplatform-tools ▪ Powershell: “adb devices –l” to show all connected devices Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 35 Emulator + phone connected
  36. 36. Windows: Add ADB to Environment Variables Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 36
  37. 37. Android Emulators ▪ Freely choose device configuration ▪ Screen size, OS, memory, etc. ▪ Hardware Acceleration ▪ Intel HAXM, but only for Intel. Conflict with Hyper-V https://developer.android.com/studio/run/emulator- acceleration.html#accel-vm ▪ Alternative: Microsoft Android emulator https://www.visualstudio.com/vs/msft-android- emulator/ Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 37
  38. 38. Deploy to Android Phone ▪ Enable Developer Options ▪ Settings > (System) > About Phone > tap 7x on “Build Number” ▪ Enable “USB debugging” ▪ Connect phone via USB ▪ Ensure debugging is active ▪ Device shows up in “adb devices” Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 38
  39. 39. Gradle ▪ Build automation system ▪ Used by Android Studio ▪ Can be run manually from command line ▪ Converts code to installable package ▪ Configuration: build.gradle ▪ You define: dependencies, versions, etc. ▪ https://developer.android.com/studio/build /index.html Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 39 Image credits: Gradle Logo copyright Gradle, Inc. Build process copyright Google, https://developer.android.com/studio/build/index.html
  40. 40. Android Build Process ▪ Gradle settings ▪ settings.gradle (project root directory) ▪ Which modules to include. Usually only one line Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 40 include ':app'
  41. 41. Android Build Process ▪ Top-level build file ▪ build.gradle (project root directory) ▪ Applies to all modules ▪ buildscript: Gradle repositories & dependencies Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 41 buildscript { ext.kotlin_version = '1.2.10' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
  42. 42. Android Build Process ▪ Module-level build file ▪ project/module/settings.gradle ▪ Only apply to this module ▪ Custom packaging options: Android options, module-level dependencies, product flavors (free / paid, …) Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 42
  43. 43. ADDING INTERACTIVITY Hello World 2.0 Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 43
  44. 44. Adapt Size & Color ▪ Check Google Material Design guidelines ▪ https://material.io/guidelines/ ▪ Size ▪ View: use “dp” for device-independent pixels. Same physical view size no matter the pixel density of the screen. ▪ Text: use “sp” for scale-independent pixels. Also considers user’s settings. ▪ Color ▪ Use color tool: https://material.io/color/ Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 44
  45. 45. Improving XML Definitions ▪ Collect text in “res/values/strings.xml” ▪ Reference from TextView & Button ▪ Easier to localize and change ▪ Give useful IDs to elements ▪ Start with “@+id/” ▪ + indicates it’s a new resource ID ▪ Rename e.g., “@+id/textView” -> “@+id/tv_hello” Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 45 <TextView android:id="@+id/tv_hello"
  46. 46. Interactivity with Kotlin for Android ▪ MainActivity.kt > Change TextView text when Button is clicked ▪ Create member variables to access UI elements ▪ In onCreate(), find views: ▪ Set click listener and change TextView text Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 46 private lateinit var mChangeTextButton : Button private lateinit var mHelloTextView : TextView mHelloTextView = findViewById(R.id.tv_hello) mChangeTextButton = findViewById(R.id.bt_change) mChangeTextButton.setOnClickListener { mHelloTextView.text = "Welcome!" }
  47. 47. Interactivity with Kotlin for Android ▪ Define “Welcome!” text in strings.xml and load from Kotlin code: Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 47 mChangeTextButton.setOnClickListener { mHelloTextView.text = getText(R.string.welcome_text) }
  48. 48. Kotlin Android Extensions ▪ findViewById() – easy to make errors, lots of code to write ▪ Kotlin Android Extensions make accessing views easier ▪ build.gradle: ensure the plugin is loaded ▪ MainActivity.kt: Add import with name of xml file ▪ Directly access View elements: Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 48 apply plugin: 'kotlin-android-extensions' import kotlinx.android.synthetic.main.activity_main.* bt_change.setOnClickListener { tv_hello.text = getText(R.string.welcome_text) }
  49. 49. Rotating the Screen? Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 49 ? Text switches back to original
  50. 50. ANATOMY OF ANDROID APPS Lifecycle Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 50
  51. 51. Android Application Components 1. Activity ▪ “Single focused thing the user can do” ▪ Creates view (to draw, based on XML layout file) and receives events (touch) 2. Service 3. Content Provider 4. Broadcast Receiver Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 51
  52. 52. Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 52 Source:https://developer.android.com/guide/components/activities/activity-lifecycle.html
  53. 53. Task: Check Lifecycle ▪ Override all lifecycle methods of the activity ▪ Log status message (Log.d) ▪ Create TAG to recognize your log messages ▪ Example ▪ Check output in logcat Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 53 private val TAG = MainActivity::class.java.simpleName override fun onStart() { super.onStart() Log.d(TAG, "onStart") }
  54. 54. Task: Check Lifecycle ▪ Rotate screen! Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 54 Rotation
  55. 55. Saving the State ▪ Bundle for storing small amount of data ▪ Only used when resuming apps, not for re-starts ▪ Built-in for activity: save key-value pairs ▪ Key definition ▪ Save state ▪ Restore in onCreate() + default if not set Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 55 private val KEY_TEXT = "uiText" override fun onSaveInstanceState(outState: Bundle?) { outState?.putString(KEY_TEXT, tv_hello.text.toString()) super.onSaveInstanceState(outState) } if (savedInstanceState != null) { tv_hello.text = savedInstanceState.getString(KEY_TEXT, getText(R.string.hello_text).toString()) }
  56. 56. DEBUGGING Finding and Fixing Errors Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 56
  57. 57. Trigger Error ▪ Create unhandled exception in onCreate() ▪ App crashes on startup ▪ Check logcat (set log level to “Error”) Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 57 throw Exception("Error!")
  58. 58. Debugging Android Apps ▪ Set Breakpoints & use debugging tools ▪ Run app with “Debug” mode ▪ Break on any exception ▪ Run > View Breakpoints … > Activate “Any Exception” ▪ may include lots of others too Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 58
  59. 59. Android Lint ▪ Static Code Analysis: Analyze > Inspect Code… Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 59
  60. 60. Issues with R Class / Unknown Error Source ▪ Recheck XML in your resource files (layouts, …) ▪ Android Studio might not highlight everything, e.g. some typos ▪ Clean project to rebuild from scratch ▪ Build > Clean Project ▪ Re-Sync project with Gradle ▪ Tools > Android > Sync Project with Gradle Files ▪ Run Android Lint Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 60
  61. 61. Exercise: Guess-a-Number ▪ Create UI with at least 3 views: ▪ EditText (“Plain Text” or “Number”), Button, TextView ▪ Put all user-visible text in strings.xml resource ▪ Phone thinks of random number [1..100] ▪ User enters number and taps button ▪ Phone tells if number was too low, too high or correct ▪ Bonus: also add number of tries to message ▪ Bonus: reset game and create new random number ▪ Bonus: handle screen rotation Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 61
  62. 62. CODE STYLE Documentation & Naming Conventions Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 62
  63. 63. Naming Conventions ▪ Android naming conventions & more: ▪ https://android.github.io/kotlin-guides/style.html ▪ Generic Kotlin ▪ https://kotlinlang.org/docs/reference/coding-conventions.html Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 63
  64. 64. Naming Conventions ▪ Package names ▪ Always lowercase ▪ Classes / Objects ▪ Start with upper case letter, camel humps Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 64 package com.andreasjakl.helloworld class MainActivity : AppCompatActivity() {
  65. 65. Naming Conventions ▪ Functions, properties, local variables ▪ Start with lower case letter, camel humps, no underscores ▪ Exception: constructors (-> same name as class, uppercase starting letter) ▪ Constants ▪ Uppercase, underscore-separated Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 65 var myCounter = 3 override fun onSaveInstanceState(outState: Bundle?) { private val KEY_TEXT = "uiText"
  66. 66. Documenting Code ▪ Code comments ▪ Important for classes, methods and properties (especially public) ▪ Java: JavaDoc ▪ Kotlin: KDoc – https://kotlinlang.org/docs/reference/kotlin-doc.html Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 66
  67. 67. KDoc Syntax ▪ Add comment directly above class / function ▪ Starts with /** , ends with */ ▪ Every documentation line has * at the beginning – not part of comment ▪ Block tags ▪ Parameters: @param <name> ▪ Returns: @return Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 67
  68. 68. Generate Documentation: Dokka ▪ Add dokka-android plugin to app build.gradle ▪ Add gradle task “dokka” to configure documentation ▪ See: https://github.com/Kotlin/dokka/blob/master/README.md Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 68 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'org.jetbrains.dokka-android' dokka { outputFormat = 'html' outputDirectory = "$buildDir/javadoc" }
  69. 69. Generate Documentation: Dokka ▪ Configure docker version and dependency in module’s build.gradle ▪ Run gradle task “dokka” in terminal ▪ gradlew dokka Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 69 buildscript { ext.kotlin_version = '1.2.10' ext.dokka_version = '0.9.15' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:${dokka_version}" } }
  70. 70. Generate Documentation: Dokka ▪ Generated HTML documentation in app/build/javadoc directory: Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 70
  71. 71. ACTIVITIES Adding multiple pages to your app Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 71
  72. 72. Our Task: Passing Data Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 72
  73. 73. Navigation Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 73 Activity Activity not called directly
  74. 74. Indirect Triggering Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 74 Activity Activity Intents
  75. 75. Flexibility: Launch Various Tasks Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 75 Activity Activity Start new Intents Take picture Open browser
  76. 76. What is an Intent? Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 76 - Message object - Request action from other app component - Can include data (extras) Image source: Android Developer Guide https://developer.android.com/guide/components/intents-filters.html
  77. 77. Exercise: Create Main Activity ▪ Name: GreetingApp ▪ UI ▪ TextView, EditText, Button ▪ Use helpful ids ▪ Externalize text to strings.xml ▪ Ensure proper dynamic layout ▪ Use setOnClickListener() on button ▪ Display entered text with a toast ▪ Search for documentation! Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 77
  78. 78. Exercise: Create Greeting Activity Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 78
  79. 79. Exercise: UI for Greeting Activity ▪ UI ▪ 2x TextView with helpful IDs ▪ Check AndroidManifest.xml ▪ Shows second activity ▪ It’s not configured for MAIN / LAUNCHER Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 79
  80. 80. Context ▪ Global information about app environment ▪ Provided by Android system ▪ Access app-specific resources ▪ App-level operations (e.g., launching activities) Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 80
  81. 81. Create & Launch Intent Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 81 val welcomeIntent = Intent(this, GreetingActivity::class.java) startActivity(welcomeIntent) Context Activity to start Start!
  82. 82. Passing Data ▪ Intents support extended data ▪ Key / Value-based ▪ Default Intent.EXTRA_TEXT for passing basic String data Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 82 welcomeIntent.putExtra(Intent.EXTRA_TEXT, et_name.text.toString()) Text from EditText
  83. 83. Receiving Extra Data ▪ Activity has intent property ▪ Provides access to details about Intent Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 83 // Check if the calling intent actually provided EXTRA_TEXT data if (intent.hasExtra(Intent.EXTRA_TEXT)) { // Retrieve String contents from EXTRA_TEXT data var userName = intent.getStringExtra(Intent.EXTRA_TEXT) // Apply the String to the UI tv_name.text = userName }
  84. 84. Enable Back Navigation Arrow ▪ Specify parent activity in manifest ▪ Add meta-data if targeting Android 4.0 ▪ For newer versions, the parentActivityName is enough Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 84 <activity android:name=".GreetingActivity" android:parentActivityName=".MainActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity>
  85. 85. Implicit Intent ▪ Action to be done + (optional) data ▪ Take picture ▪ Call contact ▪ Show web page ▪ … ▪ Multiple apps can handle intent? ▪ Android lets user choose Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 85 Activity Start new Take picture Open browser
  86. 86. Open Web Site ▪ Common Intents ▪ https://developer.android.com/guide/components/ intents-common.html ▪ -> Web Browser ▪ Extend UI ▪ Second button ▪ Click listener Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 86
  87. 87. Resolving Intents Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 87 // Target address, converted from String to URI val webPage = Uri.parse("https://www.andreasjakl.com/") // Create an intent. ACTION_VIEW is generic to show data to the user // Apps can subscribe to handle specific URIs // See: https://developer.android.com/reference/android/content/Intent.html#ACTION_VIEW val webIntent = Intent(Intent.ACTION_VIEW, webPage) // Check if at least one app is installed to handle our intent if (webIntent.resolveActivity(packageManager) != null) { // If yes, start the activity! startActivity(webIntent) }
  88. 88. URI? Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 88 scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment] https://www.andreasjakl.com/ mailto:andreas.jakl@fhstp.ac.at?subject=Android geo:48.214643,15.6224716 spotify:album:3hrSH1h42tH4W1ods3Cm7o
  89. 89. Exercise ▪ Launch another common intent ▪ https://developer.android.com/guide/components/intents-common.html ▪ Examples ▪ Map ▪ Share ▪ Email ▪ Camera ▪ Note: some activities need extra permissions in your manifest! Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 89
  90. 90. THANK YOU! Android Development with Kotlin, Part 1 | 2018 | Andreas Jakl | FH St. Pölten 90

×