Friday, December 9, 2016

How augmented reality helps you buy furniture and capture Pokémon


Posted by Jamil Moledina, Games Strategic Lead, Google Play



Online furniture seller Wayfair and Niantic's href="https://play.google.com/store/apps/details?id=com.nianticlabs.pokemongo">Pokémon
GO have more in common than you might think. Both of these companies
use augmented reality to create innovative, immersive experiences for their
users. I sat down with Mike Festa, Director of Wayfair Next, and Tatsuo Nomura,
Product Manager for Pokémon GO, at our recent Playtime event to discuss how
developers can make the most of AR as a platform.



From 3D furniture modelling in href="https://play.google.com/store/apps/details?id=com.wayfair.wayfairview">WayfairView
using Tango, to logging
countless miles catching Pokémon, hear how these developers are innovating with
AR, and get their advice for others looking to use AR in their apps and games.




href="https://www.youtube.com/playlist?list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws">Check
out more sessions from our global Playtime events to learn best practices
for your app and game businesses. Also, stay up to date with more videos from
events, product news, and tips to help grow your business on Google Play with
the Playbook for Developers app.




How useful did you find this blogpost?













Thursday, December 8, 2016

Watch sessions from the Playtime 2016 events to learn how to succeed on Android & Google Play

Posted by Patricia Correa, Head of Developer Marketing, Google Play




We’re wrapping up our annual global Playtime series of events with a last stop in Tokyo, Japan. This year Google Play hosted events in 10 cities: London, Paris, Berlin, Hong Kong, Singapore, Gurgaon, San Francisco, Sao Paulo, Seoul and Tokyo. We met with app and game developers from around the world to discuss how to build successful businesses on Google Play, share experiences, give feedback, collaborate, and get inspired.

You can now watch some of the best Playtime sessions on our Android Developers YouTube Channel, as listed below. The playlist opens with a video that celebrates collaboration.






Keynote




href="https://www.youtube.com/watch?v=ShNynvypGwQ&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws&index=1">What’s next for Google Play




Learn how we're helping users discover apps in the right context, creating new
ways to engage with users beyond the install, and powering innovative
experiences on emerging platforms like virtual reality, wearables, and auto.



Develop and launch apps & games




href="https://www.youtube.com/watch?v=0q3WZQ2qFaw&index=3&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws">Android
development in 2016



Android development is more powerful and efficient than ever before. Android
Studio brings you speed, smarts, and support for Android Nougat. The broad range
of cross-platform tools on Firecase can improve your app on Android and beyond.
Material Design and Vulkan continue to improve the user experience and increase
engagement.



href="https://www.youtube.com/watch?v=KVMsh334C0c&index=4&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws">Daydream
& Tango



Daydream View is a VR headset and controller by Google that lets people explore
new worlds, or play games that put them at the center of action. Learn how we're
helping users discover apps in the right context and powering new experiences
with Daydream and Tango.



href="https://www.youtube.com/watch?v=HY43pdexXT0&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws&index=5">Fireside
chat - Wayfair & Pokémon GO on augmented reality



Augmented reality engages and delights people everywhere. In this fireside chat,
online furniture seller Wayfair and Niantic's Pokémon
GO share their experiences with AR and discuss how other developers can make
the most of the platform.



href="https://www.youtube.com/watch?v=w6oiQgVSQGI&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws&index=4">Building
for billions, featuring best practices from Maliyo Games



Learn how to create apps and games for emerging markets, which are expected to
drive 80% of global smartphone growth by 2020, by recognizing the key challenges
and designing the right app experiences to overcome them.



At minute 16:41, hear tips from Hugo Obi, co-founder of Nigerian games developer
Maliyo.



href="https://www.youtube.com/watch?v=FwiFAisv5Q4&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws&index=5">Launch
smart on Google Play



Set your app up for success using experimentation and iteration. Learn best
practices for soft launching and adapting your app for different markets and
device types.



Apps




href="https://www.youtube.com/watch?v=Nh2m9365i0I&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws&index=6">Sustainable
growth solves most problems for apps, featuring best practices from
SoundCloud href="https://www.youtube.com/watch?v=KAFKKlFoJjU&index=7&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws">&
Peak



Planning and executing a great growth strategy involves a complex set of choices
and mastery of many tools. In this session we discuss topics including key
business objectives, tools, and techniques to help you solve the growth puzzle
with our partner, SoundCloud.



Also, check out some href="https://www.youtube.com/watch?v=KAFKKlFoJjU&index=7&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws">growth
best practices from Peak.



href="https://www.youtube.com/watch?v=p40Dl2j7tKU&index=10&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws">Creating
sustainable user growth for startups, by Greylock



User growth isn't just about growing the number of users you have. The key to
sustainability is creating and delivering core product value. In this session,
VC Greylock discusses how to identify your core action to focus on and shows you
how to use these insights to optimize your app for long term growth.



href="https://www.youtube.com/watch?v=OsBwnmGe1xI&index=8&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws">App
engagement is the new black, featuring best practices from Lifesum



As the app marketplace becomes more competitive, developer success depends on
retaining users in apps they love. Find out which Google tools and features can
help you analyze your users' behaviors, improve engagement and retention in your
app and hear insights from others developers including Lifesum.



href="https://www.youtube.com/watch?v=mmLukrKMSnw&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws&index=9">Predicting
lifetime value in the apps world



Deepdive into lifetime value models and predictive analytics in the apps ecosystem.
Tactics to get the most out of identified segments and how to upgrade their
behaviors to minimize churn.



href="https://www.youtube.com/watch?v=0-rdSrxfBp8&index=13&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws">Subscriptions
update



Learn about Google's efforts to enable users, around the world, to seamlessly
and safely pay for content. This session provides updates on Google Play billing
and recent enhancements to our subscriptions platform.



Games




href="https://www.youtube.com/watch?v=enSok3Op8So&index=10&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws">One
game fits all, featuring best practices from Space Ape Games



Customize your game's experience for different users by targeting them with lifetime value
models and predictive analytics. Hear how these concepts are applied by
Space Ape Games to improve retention and monetization of their titles.



href="https://www.youtube.com/watch?v=QXCWEwRijRo&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws&index=11">Promoting
your game and growing your user base, featuring best practices from Seriously



Learn how to use Google's latest tools, like Firebase, for benchmarking,
acquiring users and measuring your activities. Also, hear game
developer Seriously share their latest insights and strategies on YouTube
influencer campaigns.



href="https://www.youtube.com/watch?v=v8XfRlxykmA&index=16&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws">Creating
long-term retention, loyalty and value with engaging LiveOps events, featuring
best practices from Kabam &
Creative Mobile



Learn how successful developers keep their games fresh and engaging with Live
Operations. In this talk, the LiveOps expert on Marvel: Contest of Champions
discusses tips about the art and science of running an engaging LiveOps event.



Also check out the tips and href="https://www.youtube.com/watch?v=h6E5VB5wpAQ&feature=youtu.be&t=17m51s">best
practices to run successful LiveOps from games developer Creative Mobile.



href="https://www.youtube.com/watch?v=_ZjnfvoWPmA&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws&index=17">Panel
- Play fair: Maintaining a level playing field in your game, featuring Space Ape
Games and Kongregate



Ensuring that your game is fair is critical to success. Find out how game
developers are achieving this and some ways Google Play can help.



Families




href="https://www.youtube.com/watch?v=ofufSFTVCG0&index=12&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws">Why
you need to build for families



Family-based households with children have higher tablet and smartphone
ownership rates than the general population. These families are more likely to
make purchases on their mobile devices and play games. Learn about how parents
choose what to download and buy, and how you can prepare for maximum conversion.



href="https://www.youtube.com/watch?v=rN-J_R-cSVw&index=19&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws">Two
keys to growth: user acquisition & app engagement, by Cartoon Network



Hear how Cartoon Network leverages their network to cross-promote new titles,
acquire new users and keep them engaged through immersive experiences.



href="https://www.youtube.com/watch?v=nbik0ZqspN8&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws&index=20">Go
global: Getting ready for the emerging markets revolution, by
Papumba



Papumba has a clear vision to grow a global business. Hear how they work with
experts to adapt their games to local markets and leverage Google Play's
developer tools to find success around the world.



href="https://www.youtube.com/watch?v=SjUO61Iji24&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws&index=21">Optimizing
for a post install world



You've spent time and resources getting users to download your apps, but what
happens after the install? Learn how to minimize churn and keep families engaged
with your content long term.



href="https://www.youtube.com/watch?v=1WaujJ1mPMA&index=23&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws">Monetization
best practices on freemium, by 01 Digital



Learn how 01 Digital uses In-App-Purchases (IAP) to effectively monetize their
apps while maintaining a safe environment for families.



href="https://www.youtube.com/watch?v=wj_PqUHTRzk&list=PLWz5rJ2EKKc-XoJTVgYBviYbgxgSJqBws&index=22">Building
a subscription business that appeals to parents, by PlayKids



PlayKids has been at the forefront of the subscription business model since
their inception. See how they best serve their subscribers by refreshing their
content, expanding their offerings and investing in new verticals.








How useful did you find this blogpost?





















Wednesday, December 7, 2016

Saving Data: Reducing the size of App Updates by 65%


Posted by Andrew Hayden, Software Engineer on Google Play



Android users are downloading tens of billions of apps and games on Google Play.
We're also seeing developers update their apps frequently in order to provide
users with great content, improve security, and enhance the overall user
experience. It takes a lot of data to download these updates and we know users
care about how much data their devices are using. Earlier this year, we
announced that we started using href="https://android-developers.blogspot.com/2016/07/improvements-for-smaller-app-downloads.html">the
bsdiff algorithm href="https://android-developers.blogspot.com/2016/07/improvements-for-smaller-app-downloads.html">(by
Colin Percival). Using bsdiff, we were able to reduce the size of app
updates on average by 47% compared to the full APK size.



Today, we're excited to share a new approach that goes further — href="https://github.com/andrewhayden/archive-patcher/blob/master/README.md">File-by-File
patching
.href="https://github.com/andrewhayden/archive-patcher/blob/master/README.md">
App Updates using File-by-File patching are, on average,
65% smaller than the full app, and in some cases more than 90%
smaller.



The savings, compared to our previous approach, add up to 6 petabytes of user
data saved per day!



In order to get the new version of the app, Google Play sends your device a
patch that describes the differences between the old and new versions
of the app.



Imagine you are an author of a book about to be published, and wish to change a
single sentence - it's much easier to tell the editor which sentence to change
and what to change, rather than send an entirely new book. In the same way,
patches are much smaller and much faster to download than the entire APK.



Techniques used in File-by-File
patching



Android apps are packaged as APKs, which are ZIP files with special conventions.
Most of the content within the ZIP files (and APKs) is compressed using a
technology called href="https://en.wikipedia.org/w/index.php?title=DEFLATE&oldid=735386036">Deflate.
Deflate is really good at compressing data but it has a drawback: it makes
identifying changes in the original (uncompressed) content really hard. Even a
tiny change to the original content (like changing one word in a book) can make
the compressed output of deflate look completely different. Describing
the differences between the original content is easy, but describing
the differences between the compressed content is so hard that it leads
to inefficient patches.



Watch how much the compressed text on the right side changes from a one-letter
change in the uncompressed text on the left:




File-by-File therefore is based on detecting changes in the uncompressed data.
To generate a patch, we first decompress both old and new files before computing
the delta (we still use bsdiff here). Then to apply the patch, we decompress the
old file, apply the delta to the uncompressed content and then recompress the
new file. In doing so, we need to make sure that the APK on your device is a
perfect match, byte for byte, to the one on the Play Store (see href="https://source.android.com/security/apksigning/v2.html">APK Signature
Schema v2 for why).



When recompressing the new file, we hit two complications. First, Deflate has a
number of settings that affect output; and we don't know which settings were
used in the first place. Second, many versions of deflate exist and we need to
know whether the version on your device is suitable.



Fortunately, after analysis of the apps on the Play Store, we've discovered that
recent and compatible versions of deflate based on zlib (the most popular
deflate library) account for almost all deflated content in the Play Store. In
addition, the default settings (level=6) and maximum compression settings
(level=9) are the only settings we encountered in practice.



Knowing this, we can detect and reproduce the original deflate settings. This
makes it possible to uncompress the data, apply a patch, and then recompress the
data back to exactly the same bytes as originally uploaded.



However, there is one trade off; extra processing power is needed on the device.
On modern devices (e.g. from 2015), recompression can take a little over a
second per megabyte and on older or less powerful devices it can be longer.
Analysis so far shows that, on average, if the patch size is halved then the
time spent applying the patch (which for File-by-File includes recompression) is
doubled.



For now, we are limiting the use of this new patching technology to auto-updates
only, i.e. the updates that take place in the background, usually at night when
your phone is plugged into power and you're not likely to be using it. This
ensures that users won't have to wait any longer than usual for an update to
finish when manually updating an app.



How effective is File-by-File
Patching?



Here are examples of app updates already using File-by-File Patching:
















Application


Original Size


Previous (BSDiff) Patch Size


(% vs original)


File-by-File Patch Size (% vs original)



71.1 MB


13.4 MB (-81%)


8.0 MB (-89%)



32.7 MB


17.5 MB (-46%)


9.6 MB (-71%)



17.8 MB


7.6 MB (-57%)


7.3 MB (-59%)



18.9 MB


17.2 MB (-9%)


13.1 MB (-31%)



52.4 MB


19.1 MB (-64%)


8.4 MB (-84%)



16.2 MB


7.7 MB (-52%)


1.2 MB (-92%)









Disclaimer: if you see different patch sizes when you press "update"
manually, that is because we are not currently using File-by-file for
interactive updates, only those done in the background.


Saving data and making our
users (& developers!) happy



These changes are designed to ensure our community of over a billion Android
users use as little data as possible for regular app updates. The best thing is
that as a developer you don't need to do anything. You get these reductions to
your update size for free!




If you'd like to know more about File-by-File patching, including the technical
details, head over to the href="https://github.com/andrewhayden/archive-patcher">Archive Patcher GitHub
project where you can find information, including the source code. Yes,
File-by-File patching is completely open-source!



As a developer if you're interested in reducing your APK size still further,
here are some href="https://developer.android.com/topic/performance/reduce-apk-size.html?utm_campaign=android_discussion_filebyfile_120616&utm_source=anddev&utm_medium=blog">general
tips on reducing APK size.


Tuesday, December 6, 2016

Welcoming Android 7.1.1 Nougat



Posted by Dave Burke, VP of Engineering





Android Nougat

Android 7.1.1 Nougat!





Today we're rolling out an update to Nougat -- Android 7.1.1 for Pixel and Pixel
XL devices and the full lineup of supported Nexus devices. We're also pushing
the Android 7.1.1 source code to the href="https://source.android.com/">Android Open Source Project (AOSP) so
that device makers can get their hands on the latest version of Android.



With Android 7.1.1 officially on it's way to users, it's a good time to make
sure your apps are ready.


What's in Android 7.1.1?



Android 7.1.1 is an incremental release that builds on the features already
available on Pixel and Pixel XL devices, adding a handful of new features for
consumers
as well as optimizations and bug fixes on top of the base Android 7.1
platform (API level 25).



If you haven't explored the developer features, you'll want to take a look at href="https://developer.android.com/guide/topics/ui/shortcuts.html">app shortcuts,
href="https://developer.android.com/about/versions/nougat/android-7.1.html?utm_campaign=android_launch_androidnougat_120516&utm_source=anddev&utm_medium=blog#circular-icons">round
icon resources, and href="https://developer.android.com/preview/image-keyboard.html?utm_campaign=android_launch_androidnougat_120516&utm_source=anddev&utm_medium=blog">image keyboard
support, among others -- you can see the href="https://developer.android.com/about/versions/nougat/android-7.1.html?utm_campaign=android_launch_androidnougat_120516&utm_source=anddev&utm_medium=blog">full list of
developer features here. For details on API Level 25, check out the href="https://developer.android.com/sdk/api_diff/25/changes.html?utm_campaign=android_launch_npreview_061516&utm_source=anddev&utm_medium=blog">API
diffs and the href="https://developer.android.com/reference/packages.html?utm_campaign=android_launch_npreview_061516&utm_source=anddev&utm_medium=blog">API
reference.



You can find an overview of all of the href="https://developer.android.com/about/versions/nougat/index.html">Android
Nougat developer resources here, including details on the core Android 7.0
Nougat behavior changes and developer features.c


Coming to consumer devices soon



We're starting the Android 7.1.1 rollout today, and we expect it to reach all
eligible devices over the next several weeks. Pixel and Pixel XL devices will
get the over-the-air (OTA) update, as will Nexus 5X, Nexus 6P, Nexus 6, Nexus 9,
Nexus Player, Pixel C, and General Mobile 4G (Android One) devices. Devices
enrolled in the Android Beta
Program
will receive the final version as well. As always, you can also
download and flash this
update manually
.



We've also been working with our device manufacturer partners to bring Android 7.1.1
to their devices in the months ahead.


Make sure your apps are ready



Take this opportunity to test your apps for compatibility and optimize them to
look their best on Android 7.1.1, such as by providing href="https://developer.android.com/about/versions/nougat/android-7.1.html?utm_campaign=android_launch_androidnougat_120516&utm_source=anddev&utm_medium=blog#circular-icons">round
icons and adding href="https://developer.android.com/guide/topics/ui/shortcuts.html?utm_campaign=android_launch_androidnougat_120516&utm_source=anddev&utm_medium=blog">app shortcuts.
We recommend compiling your app with, and ideally targeting, API 25. See our href="http://android-developers.blogspot.com/2016/11/final-update-to-android-7-1-developer-preview.html">recent
post for details.



With the final platform we’re updating the platform and build tools in Android Studio, as well as the
API Level 25 emulator system images. The latest
version of the support library (href="https://developer.android.com/topic/libraries/support-library/revisions.html?utm_campaign=android_launch_androidnougat_120516&utm_source=anddev&utm_medium=blog">25.0.1)
is also available for you to href="https://developer.android.com/reference/android/support/v13/view/inputmethod/InputConnectionCompat.OnCommitContentListener.html">add
image keyboard support, href="https://developer.android.com/reference/android/support/design/widget/BottomNavigationView.html?utm_campaign=android_launch_androidnougat_120516&utm_source=anddev&utm_medium=blog">bottom
navigation, and other features for devices running API Level 25 or earlier.



We're also providing downloadable factory and OTA images on the href="https://developers.google.com/android/images?utm_campaign=android_launch_androidnougat_120516&utm_source=anddev&utm_medium=blog">Nexus Images page to
help you do final testing on your Pixel and Nexus devices. To help scale your
testing, make sure to take advantage of href="http://android-developers.blogspot.com/2016/11/android-dev-preview-in-firebase-test-lab.html">Firebase
Test Lab for Android and run your tests in the cloud at no charge through
the end of December.



After your final testing, publish your apps to your alpha, href="https://developer.android.com/distribute/engage/beta.html?utm_campaign=android_launch_npreview_061516&utm_source=anddev&utm_medium=blog">beta,
or production channels in the href="https://play.google.com/apps/publish/">Google Play Developer Console.


What's next?



We'll soon be closing open bugs logged against Developer Preview builds, but
please keep the feedback coming! If you still see an issue that you filed in the
preview tracker, just href="https://source.android.com/source/report-bugs.html">file a new issue
against Android 7.1 in the AOSP issue tracker. You can also continue to give us
feedback or ask questions in the href="https://plus.google.com/communities/105153134372062985968/stream/755bb91d-c101-4e32-9277-1e560c4e26d2">developer community.



As href="http://android-developers.blogspot.com/2016/08/taking-final-wrapper-off-of-nougat.html">mentioned
back in August, we've moved Android Nougat into a regular maintenance cycle
and we're already started work on refinements and bug fixes for the next
incremental update. If you have an eligible device that's currently enrolled in
the Android Beta Program, your
device will automatically receive preview updates of upcoming Android Nougat
releases as soon as they are available. If you don't want to receive those
updates, just visit the Beta
site
and unenroll the device.



Thanks for being part of the developer preview. Let us know how this year's
preview met your needs by taking a short
survey
. Your feedback helps to shape our future releases.


Friday, December 2, 2016

Indie game developers in Latin America sustain growth after launch on Google Play


Posted by Kacey Fahey, Marketing Programs Manager, Google Play



Indie game developers are some of the most exciting and innovative teams to work
with. While developers large and small exist on the same field, gone are the
days where you hit publish and turn your back, moving on to the next project. href="https://developer.android.com/distribute/stories/games/indie-latam.html">We've
gathered a few developer stories coming out of Latin America sharing experiences
and advice.



Oktagon Games


Ronaldo Cruz, Founder and CEO of href="https://play.google.com/store/apps/dev?id=4656963459589533587">Oktagon
Games tells us how "reviews provide great qualitative insight on the
game helping us identify problems that may not be caught by analytics."





Tiny Bytes


Tiny
Bytes
reduced churn by 5% using an in-game tutorial and analytics.



Impossible Apps


Cleverson Schmidt of href="https://play.google.com/store/apps/developer?id=Impossible+Apps">Impossible
Apps shares how introducing in-app purchases helps diversify revenue streams
and "can make the game profitable and self sustainable."






How useful did you find this blogpost?















Thursday, December 1, 2016

Updated Udacity Android course prepares students for the Associate Android Developer Certification


Posted by Jocelyn Becker, Senior Program Manager, Android Training



As one of our most popular Udacity courses, the href="http://classroom.udacity.com/courses/ud851">Developing Android Apps
course was recently updated to ensure developers have the resources to build
high quality apps. This course, which has already helped more than half a
million developers learn to build Android apps, has been through the car wash
and come out sparkling clean and updated.



Google and Udacity have worked together to update the course to include the very
latest changes in Android and Android Studio, including how to use the new
Constraint Layout editor, and how to use Firebase Job Dispatcher. Learn best
practices for building Android apps using Android 7.0 (Nougat) while keeping
your apps backwards compatible in older versions, learning at your own pace in
your own time.



You sent us feedback that some of the lessons were a little difficult to get
through, so we've restructured the lessons and added smaller apps for you to
build as you progress through the course. So not only will you build the
Sunshine weather app as a complete, integrated application that spans the entire
course, but you'll also create an app in each lesson to help you learn
individual concepts.



Build a To Do app and add new tasks as you learn how to build a ContentProvider.





This course brings back Android experts Dan Galpin and Reto Meier from Google, and Lyla Fujiwara from Udacity, and introduces new faces from Google and Udacity.



Start learning now at href="https://www.udacity.com/course/ud851">https://www.udacity.com/course/ud851.



Combined package for Developing Android Apps course and Associate
Android Developer Certification



This updated course teaches the skills that are tested by the Associate Android
Developer certification exam. Udacity is offering a package that combines the
updated Developing Android Apps course with a voucher for the Associate Android
Developer certification exam. If you pass this exam, you will earn the Associate
Android Developer Certification and show that you are competent and skilled in
tasks that an entry-level Android developer typically performs. Enroll in
Udacity's href="https://www.udacity.com/course/associate-android-developer-fast-track--nd818">Fast
Track to get prepared and take the Associate Android developer exam at: href="https://www.udacity.com/course/associate-android-developer-fast-track--nd818">https://www.udacity.com/course/nd818.