Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014First Tuesday Bergen
We are happy to invite you to the Speakers’ Corner today, on Thursday May 29, from 18.30 till 19.30 at SkyPoint to meet Thomas Vervik, Head of Development Bipper Communications who will talk on “How to save money on QA - Dependency Injection and automated testing on Android”
Thomas is Head of Development for Bipper Communications, and has been managing the company's team in Kiev since February 2012. Originally a seasoned Java server backend/frontend developer, he has the last two years started mobile development, first with HTML 5 and later Android.
Mobile development has since its birth around 2008 gone from simple apps to more complex enterprise similar software. The increase in size and complexity yields the need for structuring the code differently in order to handle the new complexity. The tools used to handle this complexity has been applied to server side development for years, but mobile development has been lagging behind.
But not anymore. New frameworks built on proven paradigms are emerging, and in this Speakers Corner we will introduce Dependency Injection for Android, the motivation for its use, and one of the implementations - Dagger. Dependency Injection has several advantages, but in this presentation we will focus on how it enables to write proper automated tests.
We are happy to invite you to the Speakers’ Corner today, on Thursday May 29, from 18.30 till 19.30 at SkyPoint to meet Thomas Vervik, Head of Development Bipper Communications who will talk on “How to save money on QA - Dependency Injection and automated testing on Android”
Thomas is Head of Development for Bipper Communications, and has been managing the company's team in Kiev since February 2012. Originally a seasoned Java server backend/frontend developer, he has the last two years started mobile development, first with HTML 5 and later Android.
Mobile development has since its birth around 2008 gone from simple apps to more complex enterprise similar software. The increase in size and complexity yields the need for structuring the code differently in order to handle the new complexity. The tools used to handle this complexity has been applied to server side development for years, but mobile development has been lagging behind.
But not anymore. New frameworks built on proven paradigms are emerging, and in this Speakers Corner we will introduce Dependency Injection for Android, the motivation for its use, and one of the implementations - Dagger. Dependency Injection has several advantages, but in this presentation we will focus on how it enables to write proper automated tests.
ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuha...Dicoding
Gradle is a build automation tool for multi-language projects that can be used for Android development. It provides a declarative domain-specific language for declaring tasks like compiling, packaging, and testing. Gradle allows customizing build configurations, dependencies, signing, flavors, and more through build files. Its primary advantages include flexibility, extensibility through plugins, and being free and open source.
Thomas braun dependency-injection_with_robo_guice-presentation-finalDroidcon Berlin
The document discusses dependency injection (DI) using RoboGuice in Android applications. DI makes code more concise, modular, and easier to test by allowing classes to declare dependencies without knowing how they are satisfied. RoboGuice uses annotations to inject dependencies into activities and services. It allows for loose coupling, high cohesion, and centralized configuration through bindings. DI improves testability by increasing controllability, observability, and isolation of units under test.
This document outlines the necessary software and tools for a project including Java Runtime Environment (JRE) and Java Development Kit (JDK) from Oracle, Android Studio and Android Development Tools (ADT) from Google, version control through Git and GitHub, and the Gradle build system.
One of the Microsoft development teams already uses PVS-Studio analyzer in their work. It's great, but it's not enough. That's why I keep demonstrating how static code analysis could benefit developers, using Microsoft projects as examples. We scanned Casablanca project three years ago and found nothing. As a tribute to its high quality, the project was awarded with a "bugless code" medal. As time went by, Casablanca developed and grew. PVS-Studio's capabilities, too, have significantly improved, and now I've finally got the opportunity to write an article about errors found by the analyzer in Casablanca project (C++ REST SDK). These errors are few, but the fact that their number is still big enough for me to make this article, does speak a lot in favor of PVS-Studio's effectiveness.
The document describes a design flowchart for a script that installs, uninstalls, and manages various software applications and system configurations. The main script contains select case statements to determine which application to install or uninstall based on command line arguments. It then calls additional subroutines and functions to perform tasks like installing applications, verifying installations, cleaning folders, and updating registry entries.
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014First Tuesday Bergen
We are happy to invite you to the Speakers’ Corner today, on Thursday May 29, from 18.30 till 19.30 at SkyPoint to meet Thomas Vervik, Head of Development Bipper Communications who will talk on “How to save money on QA - Dependency Injection and automated testing on Android”
Thomas is Head of Development for Bipper Communications, and has been managing the company's team in Kiev since February 2012. Originally a seasoned Java server backend/frontend developer, he has the last two years started mobile development, first with HTML 5 and later Android.
Mobile development has since its birth around 2008 gone from simple apps to more complex enterprise similar software. The increase in size and complexity yields the need for structuring the code differently in order to handle the new complexity. The tools used to handle this complexity has been applied to server side development for years, but mobile development has been lagging behind.
But not anymore. New frameworks built on proven paradigms are emerging, and in this Speakers Corner we will introduce Dependency Injection for Android, the motivation for its use, and one of the implementations - Dagger. Dependency Injection has several advantages, but in this presentation we will focus on how it enables to write proper automated tests.
We are happy to invite you to the Speakers’ Corner today, on Thursday May 29, from 18.30 till 19.30 at SkyPoint to meet Thomas Vervik, Head of Development Bipper Communications who will talk on “How to save money on QA - Dependency Injection and automated testing on Android”
Thomas is Head of Development for Bipper Communications, and has been managing the company's team in Kiev since February 2012. Originally a seasoned Java server backend/frontend developer, he has the last two years started mobile development, first with HTML 5 and later Android.
Mobile development has since its birth around 2008 gone from simple apps to more complex enterprise similar software. The increase in size and complexity yields the need for structuring the code differently in order to handle the new complexity. The tools used to handle this complexity has been applied to server side development for years, but mobile development has been lagging behind.
But not anymore. New frameworks built on proven paradigms are emerging, and in this Speakers Corner we will introduce Dependency Injection for Android, the motivation for its use, and one of the implementations - Dagger. Dependency Injection has several advantages, but in this presentation we will focus on how it enables to write proper automated tests.
ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuha...Dicoding
Gradle is a build automation tool for multi-language projects that can be used for Android development. It provides a declarative domain-specific language for declaring tasks like compiling, packaging, and testing. Gradle allows customizing build configurations, dependencies, signing, flavors, and more through build files. Its primary advantages include flexibility, extensibility through plugins, and being free and open source.
Thomas braun dependency-injection_with_robo_guice-presentation-finalDroidcon Berlin
The document discusses dependency injection (DI) using RoboGuice in Android applications. DI makes code more concise, modular, and easier to test by allowing classes to declare dependencies without knowing how they are satisfied. RoboGuice uses annotations to inject dependencies into activities and services. It allows for loose coupling, high cohesion, and centralized configuration through bindings. DI improves testability by increasing controllability, observability, and isolation of units under test.
This document outlines the necessary software and tools for a project including Java Runtime Environment (JRE) and Java Development Kit (JDK) from Oracle, Android Studio and Android Development Tools (ADT) from Google, version control through Git and GitHub, and the Gradle build system.
One of the Microsoft development teams already uses PVS-Studio analyzer in their work. It's great, but it's not enough. That's why I keep demonstrating how static code analysis could benefit developers, using Microsoft projects as examples. We scanned Casablanca project three years ago and found nothing. As a tribute to its high quality, the project was awarded with a "bugless code" medal. As time went by, Casablanca developed and grew. PVS-Studio's capabilities, too, have significantly improved, and now I've finally got the opportunity to write an article about errors found by the analyzer in Casablanca project (C++ REST SDK). These errors are few, but the fact that their number is still big enough for me to make this article, does speak a lot in favor of PVS-Studio's effectiveness.
The document describes a design flowchart for a script that installs, uninstalls, and manages various software applications and system configurations. The main script contains select case statements to determine which application to install or uninstall based on command line arguments. It then calls additional subroutines and functions to perform tasks like installing applications, verifying installations, cleaning folders, and updating registry entries.
Crafting Great Hypotheses - Droidcon 2016Hoang Huynh
Building business apps is no joke.
As designers, we are often asked to create apps that have the wow factor, they need to be distinctive, and we are rarely appreciated when we create something pragmatic, something that simply works.
Moving forward in the face of uncertainty, it is essential to devise a plan, an UX roadmap that includes research, objectives and tests.
In a world where success is just when preparation meets opportunity, starting with ready to be validated solid hypotheses is the secret sauce to a project without risks. Are you a risk taker?
The document discusses 7 ways to improve a Gradle build for an Android project. It covers extracting common values and configurations to external files, customizing app IDs and names for different build flavors, setting up signing configurations, running tests on a specific build type, and integrating continuous delivery using Crashlytics and Fastlane. The goal is to automate tasks, customize builds for a project, and integrate continuous delivery.
Droidcon is a global conference series focused on Android development. Droidcon Italy 2016 will take place April 7-8 in Turin, Italy, featuring talks, workshops, and a hackathon. Past Droidcon Italy events had 500+ attendees from over 20 countries, mostly male developers between 18-65 from a variety of companies and roles. The goal is to support the Android community and ecosystem through networking and high-quality technical content.
Android through the Eyes of a PhotographerAchim Fischer
How can Android devices and apps support (hobby-)photographers in their work? This session covers the whole workflow from planning a shooting over taking photos in RAW-format with Android devices, copying photos from a DSLR or mirrorless camera, editing photos in RAW-format (on an Android-device) and creating backups from a camera on an Android device and/or USB-Stick or external HD.
Droidcon Italy 2015: can you work without open source libraries?gabrielemariotti
Every Android developer uses Open Source libraries.
Android has a large ecosystem of libraries that developers can freely use in their own apps, but before to choose to use a library, you should know some important points about the open source development.
This sessions will introduce how to evaluate a library and how to get started the incredible experience to write an Open Source.
What’s the best testing framework on Android? Espresso or Robotium? Robolectric or a plain JUnit test?
The reason why many developers don’t write tests is not due to the testing libraries but because of the low testability of the Android code.
In this talk we’ll see, thanks to a practical example, how to use Dependency Injection (using Dagger) and the Model View Presenter pattern to write a testable Android application.
This set of slides introduces the reader to the concepts of Android Activities and Views. After presenting these two concepts in general terms, it continues with a detailed description of the activity lifecycle. It follows a discussion on how to structure the user interface in terms of View and ViewGroup objects. Finally, the presentation shows how to frame Android application development within the dictates of the Model-View-Controller (MVC) pattern.
This document provides an introduction to Retrofit and RxJava. It discusses:
1. How Retrofit turns REST APIs into Java interfaces and handles JSON conversion.
2. What RxJava is and how it allows for composing asynchronous and event-based programs using observable sequences.
3. Examples of making HTTP requests with Retrofit, including defining services, making synchronous and asynchronous requests, and using callbacks and RxJava.
4. Key RxJava concepts like Observables, operators like map, flatMap, and zip, and threading.
This document provides a summary of dependency injection and Dagger 2 in Android applications. It explains that dependency injection separates configuration from usage to improve maintainability, testability and reduce coupling. It describes how Dagger generates code to inject dependencies using annotations and component and module definitions. Modules provide dependencies while components inject them into classes. Scopes like per activity are supported. Overall Dagger improves architecture by managing object creation and dependencies through compile time verification rather than runtime errors.
Developing an app with a design that changes every few months means that the architecture chosen for the UI has to facilitate change. How do you react fast to UI changes, with minimum amount of code? What pattern is the best for testability? Which pattern gives you most decoupling of classes? MVC, MVP and MVVM are the most popular architecture patterns for implementing user interfaces. Join me on a journey to discover the advantages and disadvantages associated with of each of these and find the best one. We will perform a deep dive into the implementations and tests for each pattern. Learn about the pitfalls that you can expect and how you can avoid them, based on some of the lessons that we have learned.
Introduction to the basic aspects of application development in Android. The basic components, e.g., Activity and View, are introduced along with the different configuration files, e.g., AndroidManifest.xml.
The presentation introduces the reader to the principles of user interaction in Android applications. First, events are introduced, together with the related concepts of callbacks and event listeners. It follows a discussion on how to handle events in a declarative fashion via the XML layout file.
This document discusses MVVM and data binding in Android development. It begins with an overview of MVVM theory and the roles of the model, view, and view model. It then covers Android's data binding library for linking UI components to data sources, including features like variable binding, listeners, and view model composition. The document also provides examples of using data binding with RecyclerView and accessing view values directly. It concludes with some links for further reading on MVVM patterns.
Data Binding in Action using MVVM patternFabio Collini
The Data Binding framework was one of Google’s announcements at I/O 2015, it’s a big change in the code organization of an Android app. Some developers are sceptical about this framework but, if used in the “right way”, it’s very powerful and it allows to remove a lot of redundant boilerplate code from activities and fragments.
In this talk we’ll start from the Data Binding basic concepts and then we’ll see how to use it to improve the architecture of a typical Android application applying the Model View ViewModel pattern. Using this pattern you need to write less code to create an app that can be easily tested using JVM and instrumentation tests.
Set it and forget it: Let the machine learn its job - Guy Baron, VonageDroidConTLV
The document discusses techniques for optimizing mobile apps through experimentation, including A/B testing and multi-armed bandit strategies like epsilon-greedy. It provides an example of how epsilon-greedy works by having a 10% chance of random selection and otherwise selecting the option with the highest average reward based on past trials and outcomes. The techniques allow for autonomous, fast, and dynamic optimization of apps through experimentation to improve user onboarding, engagement, and monetization.
The 3h workshop version of the 3d Advanced Architectures training (http://canonicalexamples.com/courses_android/#androidArch). I have delivered this one or the iOS counterpart in more than 20 cities of Europe and America. This is the latest version that shared in Minsk.
The document provides an overview of the Android platform architecture. It describes Android as an open source mobile operating system led by the Open Handset Alliance. The key components of the Android architecture include the Linux kernel, libraries, Android runtime using the Dalvik virtual machine, framework APIs, and applications. Applications are built using activities, services, content providers and broadcast receivers. The document also discusses Android security using a permission-based model.
The document discusses MVVM and RxJava and how they work well together. It provides an overview of MVVM and RxJava concepts like streams, observables, and composability. It also discusses some mistakes made and lessons learned in implementing MVVM and RxJava in an app, as well as both the benefits and challenges of using RxJava. Code examples are provided to demonstrate RxJava functionality.
A guide to make crashproof libraries
A tips and tricks presentation for Poznań Android Developer Group.
http://www.meetup.com/Poznan-Android-Developer-Group/events/228107133/
A guide to make crashproof libraries.
Collection of tips and tricks for developers wanted to make better libraries. Based on my professional experience.
Crafting Great Hypotheses - Droidcon 2016Hoang Huynh
Building business apps is no joke.
As designers, we are often asked to create apps that have the wow factor, they need to be distinctive, and we are rarely appreciated when we create something pragmatic, something that simply works.
Moving forward in the face of uncertainty, it is essential to devise a plan, an UX roadmap that includes research, objectives and tests.
In a world where success is just when preparation meets opportunity, starting with ready to be validated solid hypotheses is the secret sauce to a project without risks. Are you a risk taker?
The document discusses 7 ways to improve a Gradle build for an Android project. It covers extracting common values and configurations to external files, customizing app IDs and names for different build flavors, setting up signing configurations, running tests on a specific build type, and integrating continuous delivery using Crashlytics and Fastlane. The goal is to automate tasks, customize builds for a project, and integrate continuous delivery.
Droidcon is a global conference series focused on Android development. Droidcon Italy 2016 will take place April 7-8 in Turin, Italy, featuring talks, workshops, and a hackathon. Past Droidcon Italy events had 500+ attendees from over 20 countries, mostly male developers between 18-65 from a variety of companies and roles. The goal is to support the Android community and ecosystem through networking and high-quality technical content.
Android through the Eyes of a PhotographerAchim Fischer
How can Android devices and apps support (hobby-)photographers in their work? This session covers the whole workflow from planning a shooting over taking photos in RAW-format with Android devices, copying photos from a DSLR or mirrorless camera, editing photos in RAW-format (on an Android-device) and creating backups from a camera on an Android device and/or USB-Stick or external HD.
Droidcon Italy 2015: can you work without open source libraries?gabrielemariotti
Every Android developer uses Open Source libraries.
Android has a large ecosystem of libraries that developers can freely use in their own apps, but before to choose to use a library, you should know some important points about the open source development.
This sessions will introduce how to evaluate a library and how to get started the incredible experience to write an Open Source.
What’s the best testing framework on Android? Espresso or Robotium? Robolectric or a plain JUnit test?
The reason why many developers don’t write tests is not due to the testing libraries but because of the low testability of the Android code.
In this talk we’ll see, thanks to a practical example, how to use Dependency Injection (using Dagger) and the Model View Presenter pattern to write a testable Android application.
This set of slides introduces the reader to the concepts of Android Activities and Views. After presenting these two concepts in general terms, it continues with a detailed description of the activity lifecycle. It follows a discussion on how to structure the user interface in terms of View and ViewGroup objects. Finally, the presentation shows how to frame Android application development within the dictates of the Model-View-Controller (MVC) pattern.
This document provides an introduction to Retrofit and RxJava. It discusses:
1. How Retrofit turns REST APIs into Java interfaces and handles JSON conversion.
2. What RxJava is and how it allows for composing asynchronous and event-based programs using observable sequences.
3. Examples of making HTTP requests with Retrofit, including defining services, making synchronous and asynchronous requests, and using callbacks and RxJava.
4. Key RxJava concepts like Observables, operators like map, flatMap, and zip, and threading.
This document provides a summary of dependency injection and Dagger 2 in Android applications. It explains that dependency injection separates configuration from usage to improve maintainability, testability and reduce coupling. It describes how Dagger generates code to inject dependencies using annotations and component and module definitions. Modules provide dependencies while components inject them into classes. Scopes like per activity are supported. Overall Dagger improves architecture by managing object creation and dependencies through compile time verification rather than runtime errors.
Developing an app with a design that changes every few months means that the architecture chosen for the UI has to facilitate change. How do you react fast to UI changes, with minimum amount of code? What pattern is the best for testability? Which pattern gives you most decoupling of classes? MVC, MVP and MVVM are the most popular architecture patterns for implementing user interfaces. Join me on a journey to discover the advantages and disadvantages associated with of each of these and find the best one. We will perform a deep dive into the implementations and tests for each pattern. Learn about the pitfalls that you can expect and how you can avoid them, based on some of the lessons that we have learned.
Introduction to the basic aspects of application development in Android. The basic components, e.g., Activity and View, are introduced along with the different configuration files, e.g., AndroidManifest.xml.
The presentation introduces the reader to the principles of user interaction in Android applications. First, events are introduced, together with the related concepts of callbacks and event listeners. It follows a discussion on how to handle events in a declarative fashion via the XML layout file.
This document discusses MVVM and data binding in Android development. It begins with an overview of MVVM theory and the roles of the model, view, and view model. It then covers Android's data binding library for linking UI components to data sources, including features like variable binding, listeners, and view model composition. The document also provides examples of using data binding with RecyclerView and accessing view values directly. It concludes with some links for further reading on MVVM patterns.
Data Binding in Action using MVVM patternFabio Collini
The Data Binding framework was one of Google’s announcements at I/O 2015, it’s a big change in the code organization of an Android app. Some developers are sceptical about this framework but, if used in the “right way”, it’s very powerful and it allows to remove a lot of redundant boilerplate code from activities and fragments.
In this talk we’ll start from the Data Binding basic concepts and then we’ll see how to use it to improve the architecture of a typical Android application applying the Model View ViewModel pattern. Using this pattern you need to write less code to create an app that can be easily tested using JVM and instrumentation tests.
Set it and forget it: Let the machine learn its job - Guy Baron, VonageDroidConTLV
The document discusses techniques for optimizing mobile apps through experimentation, including A/B testing and multi-armed bandit strategies like epsilon-greedy. It provides an example of how epsilon-greedy works by having a 10% chance of random selection and otherwise selecting the option with the highest average reward based on past trials and outcomes. The techniques allow for autonomous, fast, and dynamic optimization of apps through experimentation to improve user onboarding, engagement, and monetization.
The 3h workshop version of the 3d Advanced Architectures training (http://canonicalexamples.com/courses_android/#androidArch). I have delivered this one or the iOS counterpart in more than 20 cities of Europe and America. This is the latest version that shared in Minsk.
The document provides an overview of the Android platform architecture. It describes Android as an open source mobile operating system led by the Open Handset Alliance. The key components of the Android architecture include the Linux kernel, libraries, Android runtime using the Dalvik virtual machine, framework APIs, and applications. Applications are built using activities, services, content providers and broadcast receivers. The document also discusses Android security using a permission-based model.
The document discusses MVVM and RxJava and how they work well together. It provides an overview of MVVM and RxJava concepts like streams, observables, and composability. It also discusses some mistakes made and lessons learned in implementing MVVM and RxJava in an app, as well as both the benefits and challenges of using RxJava. Code examples are provided to demonstrate RxJava functionality.
A guide to make crashproof libraries
A tips and tricks presentation for Poznań Android Developer Group.
http://www.meetup.com/Poznan-Android-Developer-Group/events/228107133/
A guide to make crashproof libraries.
Collection of tips and tricks for developers wanted to make better libraries. Based on my professional experience.
This presentation was featured on the third AngularJS Meetup in Belgium and presented by Glenn Dejaeger, Thomas Anciaux and Pieter Herroelen, who have been working on a large AngularJS application for almost a year now.
This presentation features the many challenges they have encountered and also ways to solve them, including:
- structuring a large AngularJS application (and building it with grunt)
- writing reusable components
- using AngularJS with a hypermedia API
Enjoy!
AE nv
Hands-on lab given at #geecon for Visage Android development. A full VirtualBox image for running through the lab yourself is supplied here:
http://projavafx.com/VisageLab/
Framework design involves balancing many considerations, such as:
- Managing dependencies between components to allow for flexibility and evolution over time. Techniques like dependency injection and layering help achieve this.
- Designing APIs by first writing code samples for key scenarios and defining object models to support these samples to ensure usability.
- Treating simplicity as a feature by removing unnecessary requirements and reusing existing concepts where possible.
What's new in android 2018, a content created by Google, and conducted by Shady Selim, for developers attending DevFest all across Egypt.
It combines all the latest Android for Developers updates
Getting start Java EE Action-Based MVC with ThymeleafMasatoshi Tada
This document discusses Java EE action-based MVC frameworks and getting started with the Java EE 8 MVC 1.0 specification. It covers:
1. What is action-based MVC and how it differs from component-based MVC.
2. An overview of getting started with the MVC 1.0 specification, including using Thymeleaf as the view technology.
3. How to use Jersey MVC and RESTEasy HTML in Java EE 7 as alternatives since MVC 1.0 is a Java EE 8 feature.
Comment développer une application mobile en 8 semaines - Meetup PAUG 24-01-2023Nicolas HAAN
À l'automne dernier, nous avons eu la chance de développer une nouvelle app pour un de nos clients en partant de zéro.
L'objectif ? Créer une application minimale à mettre entre les mains de dizaines de beta testeurs, en 8 semaines et avec 2 développeurs. Partant d'une feuille blanche, nous avons pu mettre en œuvre les dernières avancées de la stack Android sans être contraints par l'existant.
Développeurs débutants comme expérimentés, vous repartirez de ce talk avec nos apprentissages clés sur l'architecture ainsi que sur les bibliothèques et astuces pour faciliter la maintenance et la stabilité de l'application. En bonus, nous répondrons à la question : "Une app full-compose, est-ce que c'est cool ?"
React is a declarative, efficient, and flexible JavaScript library for building user interfaces. It uses virtual DOM which improves performance and can render on both client and server. React encourages a component-based approach where UI is broken into independent reusable pieces that accept external data through properties. Components manage their own state which allows the UI to update over time in response to user input. This makes React code more predictable and easier to debug than traditional two-way data binding.
The document discusses various design patterns commonly used in Android development such as MVC, MVVM, Observer, Adapter, Façade, Bridge, Factory, Template, Composition, and Decorator. It provides examples of how each pattern is implemented in Android by referencing classes, interfaces, and code snippets. Key Android classes and frameworks like View, Activity, AsyncTask, Media Framework, and I/O streams are used to demonstrate applying the design patterns.
49.INS2065.Computer Based Technologies.TA.NguyenDucAnh.pdfcNguyn506241
This document provides an overview of a course on computer-based technologies and software development. The course will cover various technologies used to build software applications from start to finish. Topics will include databases, version control with Git, data validation, and deploying applications to the cloud. Students will learn concepts through theory, tutorials, and hands-on practice building a sample application. Assessment will include class participation, a midterm, and a final project.
Node.js is an asynchronous event-driven JavaScript runtime that uses non-blocking I/O to build scalable network applications. It allows for the creation of web servers and networking tools using a event-driven, non-blocking I/O model rather than the traditional threaded model. Node.js is popular because it uses JavaScript and allows code reuse on both the server-side and client-side, offers high performance and scalability for real-time applications, and has a large passionate community supporting its use.
Infinum Android Talks #14 - Data binding to the rescue... or not (?) by Krist...Infinum
We're checking out new data binding lib announced on the last Google I/O. We'll go in depth of data binding - goals, benefits and drawbacks. Less code should mean less bugs - in theory.
The document summarizes the new features in Android Studio 3.2 beta, including AndroidX for reorganizing Android support library packages, dynamic delivery of APKs using app bundles, and dynamic delivery of features using dynamic feature modules. It provides details on migrating to AndroidX, building app bundles and dynamic feature modules, and how they allow serving optimized APKs based on user device configuration. The release also includes improvements to the build tools, emulator, and other developer tools.
This document discusses microservices using Node.js and JavaScript. It covers building an HTTP microservice with Express including routing, structure, database integration, logging and testing. It also discusses building command-based microservices with Seneca including patterns, plugins, and queueing. Finally, it discusses containerization with Docker, API gateways, testing, process management with PM2, and some considerations around when microservices may not be the best solution.
This document discusses code obfuscation on Android and Windows Phone 7 mobile platforms. It describes how to reverse engineer apps on each platform without obfuscation by decompiling the code. It then explains how to use the tools ProGuard for Android and Dotfuscator for Windows Phone 7 to obfuscate code and make it difficult for attackers to understand by shrinking, optimizing, and obfuscating the code. Settings for each tool are also provided.
React Native for multi-platform mobile applicationsMatteo Manchi
Since its 2013 release, React has brought a new way to design UI components in the world wide web. The same foundamentals have been taken to another important environment in our contemporary world: the mobile application.
This month we'll see the philosophy behind React Native - learn once, write anywhere - and how this new framework helps new developers to build native apps using React.
It's not about dagger. It's about putting your source code to an Android binary. Yes the compiled dex code! During the presentation I will show in steps how to inject aar to apk without having original source code nor resources.
How to recognise that the user has just uninstalled your android appPrzemek Jakubczyk
A presentation done spontaneously during Droidcon.de 2015.
Shows the trick Opera did - open a web page after uninstalling the binary. Raw meat, C code, included.
How to recognise that the user has just uninstalled your android app droidc...Przemek Jakubczyk
The document describes how to detect when an Android app has been uninstalled using the inotify framework and broadcasting intents. It explains that the standard Java approach does not work because the listener is unregistered on uninstall. Instead, it recommends spawning a new process on uninstall using fork() and inotify to watch for file deletions, then broadcasting an intent to restart the app. However, experts warn against this approach as forking in JNI can break the Android activity lifecycle model.
This document discusses how to detect when an Android app has been uninstalled. It explains that listening for the PACKAGE_REMOVED broadcast does not work reliably because the OS unregisters receivers when the app is removed. Instead, it recommends using inotify to monitor changes to the app's data directory on the file system. The document provides sample code from the Opera browser app that successfully uses this approach with native code to watch for deletion of its data directory, allowing it to detect uninstalls.
The document discusses different options for storing user credentials in Android applications, including using the file system, shared preferences, a database, or the Account Manager. It recommends using the Account Manager, as it is secure, allows for credential sharing between apps from the same developer, and enables sync functionality through a Sync Adapter. The Account Manager handles authentication through Android's authorization proxy and is the recommended solution by Google.
The document discusses crowd testing, beta distributions, crash reports, and application analytics services provided by Applause. It also mentions that Applause is hiring and provides contact information. Przemek Jakubczyk's contact information is listed as a senior Android developer at Applause. The document promotes Applause's testing services and indicates they are looking to hire new employees.
2. A guide to make crashproof libraries
It's always your fault
2
3. Background
At Applause I am responsible for quality
Applause SDK is crash and bug reporting library
shipped to over 1000 customers
SDK works with apps around the world
3
4. History
Joined 2 years ago to project with no QA
Today ~2200 unit tests covering 3k methods
82% lines covered
Last major problem was support for Marshmallow
4
Other than that over 6 months of no customer complain
5. How your SDK should look like
Be universal
Work in every provided configuration
Be robust
Work in any environment
Be defensive
5
8. Gradle
use simple tricks to protect your
styling
8
android {
resourcePrefix 'applause_'
}
or pass custom values to source
code via DSL
defaultConfig {
resValue "string",
"applause_library_version”,
"$version"
}
9. Gradle
easier integration with your Groovy
scripts
for example create own distribution
task
task buildAll (
dependsOn: 'assembleRelease',
type: Copy) {
from “build/outputs/”
into “another_path”
}
9
13. Java
catching Exception doesn’t solve problem
often hides real cause
tempting but dangerous
13
try {
network.getClients();
} catch (Exception e) {
// handle exception
}
14. Java
Null Object Pattern
instead constantly checking for not null
value
14
public interface Api {
void post(String action);
Api NULL = new Api() {
void post(String action){}
};
}
getApi().post(“Works”)
15. Java
NPE
Null Pointer Exception is the most popular
exception thrown in runtime.
NullObject pattern partially solves the problem.
Use empty objects, collections etc;
15
List<User> fetchUsers(){
try {
return api.getAllUsers();
} catch (IOException e){
return new
ArrayList<Users>();
}
}
16. Java
Usually library is started by one static method
… and next versions provide more functionality
Init interface becomes complex
16
20. Concurrency
New Thread is your enemy
20
ExecutorService EXECUTOR =
Executors.newSingleThreadExecutor(new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return new Thread(r, "NetworkExecutor");
}
});
21. The String
String is a bad information holder
Often passing 2 string parameters to method
Lead to simple mistakes
User vs Person
Instead of getters maybe method ‘serializeForAuth’ ?
21
26. Android
usually interface for loading pictures from to web to Widget looks like this:
pictureLoader.load(“url_to_resource”, imageView);
passing arguments extending from View, Activity etc.
often lead to Memory leak
queue is flooded with requests holding all references
Go back to javadoc and check java.lang.ref.WeakReference<T> :) 26
27. Android
Wrap OS Exceptions with your own implementation
BitmapFactory
Throws unchecked OutOfMemoryError
27
28. 28
public static class BitmapCreatorException extends Exception {
public BitmapCreatorException(String detailMessage) {
super(detailMessage);
}
public BitmapCreatorException(Throwable throwable) {
super(throwable);
}
}
30. 30
Bitmap nullCheck(Bitmap bitmap) throws BitmapCreatorException {
if (bitmap == null)
throw new BitmapCreatorException("Bitmap is empty");
else
return bitmap;
}
Bitmap Provider
31. Android
ProGuard is outstanding tool to shrink code and inject bytecode optimizations
While shipping your code you must either provide:
copy&paste configuration to ProGuard (latest plugin supports auto-configuration)
be transparent to ProGuard.
Configuration vs Transparency?
Transparency!
31
35. Licence
35
by default you own the copyright
no licence doesn’t conclue you can use it in your project
open code (found online) != open source movement
transferring code goes along with transferring the ownership
Check the licence
Check if it infects yours
(Apache, MIT vs GPL v2, LGPL, BSD)