Showing posts with label Featured. Show all posts
Showing posts with label Featured. Show all posts

12/23/17

Phasing out legacy recommendations on Android TV








Posted by Bejamin Baxter, Developer Programs Engineer


At Google I/O 2017, we href="https://android-developers.googleblog.com/2017/05/welcome-to-your-new-home-on-android-tv.html">announced
a redesign of the Android TV's home screen. We expanded the recommendation row
concept so that each app can have its own row (or multiple rows) of content on
the home screen. Since the release of the new home screen, we have seen
increased adoption of the new recommendation channels for Android Oreo in a wide
variety of apps.



With more and more apps surfacing high-quality recommendations using the new
channels, the href="https://developer.android.com/training/tv/discovery/recommendations-row.html">legacy
recommendation row in the new home screen on Android O will be phased out
over the next year.



Currently, when an app creates recommendations with the href="https://developer.android.com/training/tv/discovery/recommendations-row.html#build">legacy
notification based API the content is added to a channel for that app. The
channel may already exist if there was recommended content for it when you
upgraded from Android N (or below). If the there is no channel for the app, it
will be automatically generated for you. In either case, the user can't add or
remove programs from the channel, but they can move, hide, and show the channel.
When an app starts to use the new API to add its own channels, the system
removes the auto-generated channel and the app takes over control of the display
of their content.



Over the next year, we will phase out the automatic generation of channels.
Instead of generating multiple channels, one for each app's legacy
recommendations, we will insert one channel for all legacy
recommendations. This channel will appear at the bottom of the channel list.
Users can move or remove it. When a user upgrades to Android O, the previous
recommendation row from Android N (and below) becomes a channel at the bottom of
the home screen.




If you have not updated your app to post content to the new channels on the home
screen, take a look at our href="https://developer.android.com/training/tv/discovery/recommendations-channel.html">documentation,
href="https://codelabs.developers.google.com/codelabs/tv-channels-programs/index.html">codelab,
and href="https://github.com/googlesamples/leanback-homescreen-channels">sample
to get started.



We look forward to more and more apps taking advantage of the new changes in the
home screen. We love to hear your feedback, so please visit the href="https://plus.google.com/communities/112881895888889393129">Android TV
Developer Community on G+ to share your thoughts and ideas.

Read more

12/21/17

Double Stuffed Security in Android Oreo








Posted by Gian G Spicuzza, Android Security team


Android Oreo is stuffed full of security enhancements. Over the past few months,
we've covered how we've improved the security of the Android platform and its
applications: from href="https://android-developers.googleblog.com/2017/08/making-it-safer-to-get-apps-on-android-o.html">making
it safer to get apps, dropping href="https://android-developers.googleblog.com/2017/04/android-o-to-drop-insecure-tls-version.html">insecure
network protocols, providing more href="https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html">user
control over identifiers, href="https://android-developers.googleblog.com/2017/08/hardening-kernel-in-android-oreo.html">hardening
the kernel, href="https://android-developers.googleblog.com/2017/07/shut-hal-up.html">making
Android easier to update, all the way to href="https://android-developers.googleblog.com/2017/06/2017-android-security-rewards.html">doubling
the Android Security Rewards payouts. Now that Oreo is out the door, let's
take a look at all the goodness inside.


Expanding support for hardware security



Android already supports href="https://source.android.com/security/verifiedboot/">Verified Boot,
which is designed to prevent devices from booting up with software that has been
tampered with. In Android Oreo, we added a reference implementation for Verified
Boot running with href="https://source.android.com/devices/architecture/treble">Project
Treble, called Android Verified Boot 2.0 (AVB). AVB has a couple of cool
features to make updates easier and more secure, such as a common footer format
and rollback protection. Rollback protection is designed to prevent a device to
boot if downgraded to an older OS version, which could be vulnerable to an
exploit. To do this, the devices save the OS version using either special
hardware or by having the Trusted Execution Environment (TEE) sign the data.
Pixel 2 and Pixel 2 XL come with this protection and we recommend all device
manufacturers add this feature to their new devices.



Oreo also includes the new href="https://android-review.googlesource.com/#/c/platform/hardware/interfaces/+/527086/-1..1/oemlock/1.0/IOemLock.hal">OEM
Lock Hardware Abstraction Layer (HAL) that gives device manufacturers more
flexibility for how they protect whether a device is locked, unlocked, or
unlockable. For example, the new Pixel phones use this HAL to pass commands to
the bootloader. The bootloader analyzes these commands the next time the device
boots and determines if changes to the locks, which are securely stored in
Replay Protected Memory Block (RPMB), should happen. If your device is stolen,
these safeguards are designed to prevent your device from being reset and to
keep your data secure. This new HAL even supports moving the lock state to
dedicated hardware.



Speaking of hardware, we've invested support in tamper-resistant hardware, such
as the href="https://android-developers.googleblog.com/2017/11/how-pixel-2s-security-module-delivers.html">security
module found in every Pixel 2 and Pixel 2 XL. This physical chip prevents
many software and hardware attacks and is also resistant to physical penetration
attacks. The security module prevents deriving the encryption key without the
device's passcode and limits the rate of unlock attempts, which makes many
attacks infeasible due to time restrictions.



While the new Pixel devices have the special security module, all new href="https://www.android.com/gms/">GMS devices shipping with Android Oreo
are required to implement href="https://android-developers.googleblog.com/2017/09/keystore-key-attestation.html">key
attestation. This provides a mechanism for strongly href="https://source.android.com/security/keystore/attestation#id-attestation">attesting
IDs such as hardware identifiers.



We added new features for enterprise-managed devices as well. In work profiles,
encryption keys are now ejected from RAM when the profile is off or when your
company's admin remotely locks the profile. This helps secure enterprise data at
rest.


Platform hardening and process isolation



As part of href="https://android-developers.googleblog.com/2017/05/here-comes-treble-modular-base-for.html">Project
Treble, the Android framework was re-architected to make updates easier and
less costly for device manufacturers. This separation of platform and
vendor-code was also designed to improve security. Following the href="https://en.wikipedia.org/wiki/Principle_of_least_privilege">principle of
least privilege, these HALs run in their href="https://android-developers.googleblog.com/2017/07/shut-hal-up.html">own
sandbox and only have access to the drivers and permissions that are
absolutely necessary.



Continuing with the href="https://android-developers.googleblog.com/2016/05/hardening-media-stack.html">media
stack hardening in Android Nougat, most direct hardware access has been
removed from the media frameworks in Oreo resulting in better isolation.
Furthermore, we've enabled Control Flow Integrity (CFI) across all media
components. Most vulnerabilities today are exploited by subverting the normal
control flow of an application, instead changing them to perform arbitrary
malicious activities with all the privileges of the exploited application. CFI
is a robust security mechanism that disallows arbitrary changes to the original
control flow graph of a compiled binary, making it significantly harder to
perform such attacks.



In addition to these architecture changes and CFI, Android Oreo comes with a
feast of other tasty platform security enhancements:


  • href="https://android-developers.googleblog.com/2017/07/seccomp-filter-in-android-o.html">Seccomp
    filtering
    : makes some unused syscalls unavailable to apps so that
    they can't be exploited by potentially harmful apps.
  • Hardened
    usercopy
    : A recent href="https://events.linuxfoundation.org/sites/events/files/slides/Android-%20protecting%20the%20kernel.pdf">survey
    of security bugs on Android
    revealed that invalid or missing bounds checking was seen in approximately 45%
    of kernel vulnerabilities. We've backported a bounds checking feature to Android
    kernels 3.18 and above, which makes exploitation harder while also helping
    developers spot issues and fix bugs in their code.
  • Privileged Access Never (PAN) emulation: Also backported to
    3.18 kernels and above, this feature prohibits the kernel from accessing user
    space directly and ensures developers utilize the hardened functions to access
    user space.
  • Kernel Address Space Layout Randomization (KASLR):
    Although Android has supported userspace Address Space Layout Randomization
    (ASLR) for years, we've backported KASLR to help mitigate vulnerabilities on
    Android kernels 4.4 and newer. KASLR works by randomizing the location where
    kernel code is loaded on each boot, making code reuse attacks probabilistic and
    therefore more difficult to carry out, especially remotely.

App security and device identifier changes



Android
Instant Apps
run in a restricted sandbox which limits permissions and
capabilities such as reading the on-device app list or transmitting cleartext
traffic. Although introduced during the Android Oreo release, Instant Apps
supports devices running href="https://www.android.com/versions/lollipop-5-0/">Android Lollipop and
later.



In order to handle untrusted content more safely, we've href="https://android-developers.googleblog.com/2017/06/whats-new-in-webview-security.html">isolated
WebView by splitting the rendering engine into a separate process and
running it within an isolated sandbox that restricts its resources. WebView also
supports Safe Browsing to protect
against potentially dangerous sites.



Lastly, we've made href="https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html">significant
changes to device identifiers to give users more control, including:


  • Moving the static Android ID and Widevine values to an
    app-specific value, which helps limit the use of device-scoped non-resettable
    IDs.
  • In accordance with href="https://tools.ietf.org/html/rfc7844#section-3.7">IETF RFC 7844
    anonymity profile, net.hostname is now empty and the DHCP client no
    longer sends a hostname.
  • For apps that require a device ID, we've built a Build.getSerial()
    API
    and protected it behind a permission.
  • Alongside security researchers1, we designed a robust MAC address
    randomization for Wi-Fi scan traffic in various chipsets firmware.


Android Oreo brings in all of these improvements, and href="https://www.android.com/versions/oreo-8-0/">many more. As always, we
appreciate feedback and welcome suggestions for how we can improve Android.
Contact us at security@android.com.



_____________________________________________________________________



1: Glenn Wilkinson and team at Sensepost, UK, Célestin Matte, Mathieu Cunche:
University of Lyon, INSA-Lyon, CITI Lab, Inria Privatics, Mathy Vanhoef, KU
Leuven

Read more

12/20/17

Improving app security and performance on Google Play for years to come

Posted by Edward Cunningham, Product Manager, Android


[Edit: Updated post on Dec 21 to clarify that when the
64-bit requirement is introduced in August 2019, 32-bit support is not going
away. Apps that include a 32-bit library just need to have a 64-bit version
too.]



Google Play powers billions of app installs and updates annually. We
relentlessly focus on security and performance to ensure everyone has a positive
experience discovering and installing apps and games they love. Today we're
giving Android developers a heads-up about three changes designed to support
these goals, as well as explaining the reasons for each change, and how they
will help make Android devices even more secure and performant for the long
term.


  • In the second half of 2018, Play will require that new apps and app updates
    target a recent Android API level. This will be required for new apps in
    August 2018, and for updates to existing apps in
    November 2018. This is to ensure apps are built on the latest
    APIs optimized for security and performance.
  • In August 2019, Play will require that new apps and app
    updates with native libraries provide 64-bit versions in addition to their
    32-bit versions.
  • Additionally, in early 2018, Play will start adding a small amount of
    security metadata on top of each APK to further verify app authenticity. You do
    not need to take any action for this change.


We deeply appreciate our developer ecosystem, and so hope this long advance
notice is helpful in planning your app releases. We will continue to provide
reminders and share developer resources as key dates approach to help you
prepare.



Target API level requirement from late 2018



API behavior changes advance the security and privacy protections of Android –
helping developers secure their apps and protecting people from malware. Here
are a few such changes from recent platform versions:


  • Implicit intents for bindService() no longer supported (href="https://developer.android.com/about/versions/android-5.0-changes.html#BindService">Android
    5.0)
  • Runtime permissions (href="https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-runtime-permissions">Android
    6.0)
  • User-added CAs not trusted by default for secure connections (href="https://developer.android.com/about/versions/nougat/android-7.0.html#default_trusted_ca">Android
    7.0)
  • Apps can't access user accounts without explicit user approval (href="https://developer.android.com/about/versions/oreo/android-8.0-changes.html#aaad">Android
    8.0)


Many of these changes only apply to apps that explicitly declare their support
for new API behaviors, through the href="https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#target">targetSdkVersion
manifest attribute. For example, only apps with a targetSdkVersion of 23
(the API level of Android 6.0) or higher give the user full control over what
private data – such as contacts or location – the app can access via runtime
permissions. Similarly, recent releases include user experience improvements
that prevent apps from accidentally overusing resources like battery and memory;
href="https://developer.android.com/about/versions/oreo/background.html">background
execution limits is a good example of this type of improvement.



In order to provide users with the best Android experience possible, the Google
Play Console will require that apps target a recent API level:


  • August 2018: New apps required to target API level 26
    (Android 8.0) or higher.
  • November 2018: Updates to existing apps required to target
    API level 26 or higher.
  • 2019 onwards: Each year the targetSdkVersion requirement
    will advance. Within one year following each Android dessert release, new apps
    and app updates will need to target the corresponding API level or
    higher.


Existing apps that are not receiving updates are unaffected. Developers remain
free to use a href="https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#min">minSdkVersion
of their choice, so there is no change to your ability to build apps for older
Android versions. We encourage developers to provide backwards compatibility as
far as reasonably possible. Future Android versions will also restrict apps that
don't target a recent API level and adversely impact performance or security. We
want to proactively reduce fragmentation in the app ecosystem and ensure apps
are secure and performant while providing developers with a long window and
plenty of notice in order to plan ahead.



This year we released Android Oreo, the most secure and best performing version
of Android yet, and we introduced href="https://android-developers.googleblog.com/2017/05/here-comes-treble-modular-base-for.html">Project
Treble to help the latest releases reach devices faster. Get started
building apps that target Android 8.1 Oreo
today.



64-bit support requirement in 2019



Platform support for 64-bit architectures was introduced in Android 5.0. Today,
over 40% of Android devices coming online have 64-bit support, while still
maintaining 32-bit compatibility. For apps that use native libraries, 64-bit
code typically offers significantly better performance, with additional
registers and new instructions.



In anticipation of future Android devices that support 64-bit code only, the
Play Console will require that new apps and app updates with native libraries
provide 64-bit versions in addition to their 32-bit versions. This can be within
a single APK or as one of the multiple APKs published.



We are not removing 32-bit support. Google Play will continue to support 32-bit
apps and devices. Apps that do not include native code are unaffected.



This change will come into effect in August 2019. We're providing advance notice
today to allow plenty of time for developers who don't yet support 64-bit to
plan the transition. Stay tuned for a future post in which we'll take an
in-depth look at the performance benefits of 64-bit native libraries on Android,
and check out the href="https://developer.android.com/ndk/guides/arch.html">CPUs and
Architectures guide of the NDK for more info.



Security metadata in early 2018



Next year we'll begin adding a small amount of security metadata on top of each
APK to verify that it was officially distributed by Google Play. Often when you
buy a physical product, you'll find an official label or a badge which signifies
the product's authenticity. The metadata we're adding to APKs is like a Play
badge of authenticity for your Android app.



No action is needed by developers or users. We'll adjust Play's maximum APK size
to take into account the small metadata addition, which is inserted into the href="https://source.android.com/security/apksigning/v2">APK Signing Block
and does not alter the functionality of your app. In addition to enhancing the
integrity of Play's mobile app ecosystem, this metadata will enable new
distribution opportunities for developers in the future and help more people
keep their apps up to date.



Looking ahead



2017 has been a fantastic year for developers who have seen growth and success
on Google Play. We've been hard at work on features (including those announced
at href="https://android-developers.googleblog.com/2017/05/whats-new-in-google-play-at-io-2017.html">I/O
2017 and at href="https://android-developers.googleblog.com/2017/10/playtime-2017-find-success-on-google.html">Playtime)
to help you improve your app quality and business performance. With these
features and the upcoming updates, we hope to see the Android and Play ecosystem
continue to thrive in 2018 and beyond.



How useful did you find this blogpost?




Read more

12/6/17

Welcoming Android 8.1 Oreo and Android Oreo (Go edition)





Posted by Dave Burke, VP of Engineering


At href="https://www.blog.google/products/android/introducing-android-oreo-go-edition">Google
for India this Monday, we announced the final release of Android 8.1 Oreo.
Android 8.1 Oreo is another exciting step toward bringing to life our vision of
an AI-first mobile platform, for everyone, everywhere.



Android 8.1 introduces support for our new href="https://www.android.com/versions/oreo-8-0/go-edition/">Android Oreo (Go edition) software experience for entry-level
devices. Android Oreo (Go edition) brings the best of Android to the rapidly
growing market for low-memory devices around the world, including your apps and
games.



Android 8.1 also introduces the href="https://developer.android.com/ndk/guides/neuralnetworks/index.html">Neural
Networks API
, a hardware accelerated machine learning runtime to
support ML capabilities in your apps. On supported devices, the Neural Networks
API enables fast and efficient inference for a range of key use cases, starting
with vision-based object classification.



You can get started with Android 8.1 Oreo (API level 27) today. We're pushing
sources to Android Open Source Project
now, and rolling out the update to supported Pixel and Nexus devices over the
next week. We're also working with our device maker partners to bring Android
8.1 to more devices, including Android Oreo (Go edition) devices, in the months
ahead.


Android Oreo (Go edition)



As href="https://www.youtube.com/watch?v=Y2VF8tmLFHw&t=1h29m36s">announced at
Google I/O 2017, the "Android Go" project is our initiative to optimize the
Android experience for billions of people coming online around the world.
Starting with Android 8.1, we're making Android a great platform for entry-level
devices in the Android Oreo (Go edition) configuration:


  • Memory optimizations -- Improved memory usage across the
    platform to ensure that apps can run efficiently on devices with 1GB or less
    RAM.
  • Flexible targeting options -- New href="https://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_RAM_LOW">hardware
    feature constants to let you target the distribution of your apps to normal
    or low-RAM devices through Google Play.
  • Optimized Google apps: Rebuilt and optimized versions of
    Google apps, using less memory, storage space, and mobile data.
  • Google Play: While all apps will be available on Android
    Oreo (Go edition) devices, Google Play will give visibility to apps specifically
    optimized by developers to provide a great experience for billions of people
    with the href="https://developer.android.com/develop/quality-guidelines/building-for-billions.html">building
    for billions guidelines.


We've updated the building for billions guidelines with
additional guidance on href="https://developer.android.com/develop/quality-guidelines/building-for-billions-device-capacity.html#androidgo">how
to optimize your app for Android Oreo (Go edition) devices. For most
developers, optimizing your existing APK or using Google Play's href="https://developer.android.com/google/play/publishing/multiple-apks.html">Multiple
APK feature to target a version of your APK to low-RAM devices is the best
way to prepare for Android Oreo (Go edition) devices. Remember that href="https://medium.com/googleplaydev/shrinking-apks-growing-installs-5d3fcba23ce2">making
your app lighter and more efficient benefits your whole audience, regardless
of device.


Neural Networks API



The href="https://developer.android.com/ndk/guides/neuralnetworks/index.html">Neural
Networks API provides accelerated computation and inference for on-device
machine learning frameworks like href="https://www.tensorflow.org/mobile/tflite/">TensorFlow Lite -- Google's
cross-platform ML library for mobile -- as well as Caffe2 and others. TensorFlow
Lite is href="https://developers.googleblog.com/2017/11/announcing-tensorflow-lite.html">now
available to developers, so visit the href="https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite">TensorFlow
Lite open source repo for downloads and docs. TensorFlow Lite works with the
Neural Networks API to run models like href="https://research.googleblog.com/2017/06/mobilenets-open-source-models-for.html">MobileNets,
Inception v3, and href="https://research.googleblog.com/2017/11/on-device-conversational-modeling-with.html">Smart
Reply efficiently on your mobile device.


Autofill enhancements and more



Android 8.1 includes select href="https://developer.android.com/about/versions/oreo/android-8.1.html">new
features and developer APIs (API level 27), along with the latest
optimizations, bug fixes, and security patches. Extend your app with href="https://developer.android.com/about/versions/oreo/index.html">Autofill
enhancements, a href="https://developer.android.com/reference/android/os/SharedMemory.html">SharedMemory
API, and more. You can also add established Android Oreo features as well, see
the href="https://developer.android.com/about/versions/oreo/android-8.0.html">Android
Oreo site for details.


Test your apps on Android 8.1



If haven't already, take a few moments today to test your apps and make sure
they offer the experience you want for users upgrading to Android 8.1 Oreo.



Just install your current app from Google Play onto a device or href="https://developer.android.com/studio/run/managing-avds.html">emulator
running Android Oreo and test the user flows. The app should run and look great,
and handle the Android Oreo href="https://developer.android.com/about/versions/o/android-8.0-changes.html">behavior
changes properly. In particular, pay attention to href="https://developer.android.com/about/versions/o/android-8.0-changes.html#abll">background
location limits, href="https://developer.android.com/guide/topics/ui/notifiers/notifications.html#ManageChannels">notification
channels, and changes in href="https://developer.android.com/about/versions/o/android-8.0-changes.html#networking-all">networking,
href="https://developer.android.com/about/versions/o/android-8.0-changes.html#security-all">security,
and href="https://developer.android.com/about/versions/o/android-8.0-changes.html#privacy-all">identifiers.


Speed your development with Android Studio



To build with Android 8.1, we recommend updating to href="https://android-developers.googleblog.com/2017/10/android-studio-30.html">Android
Studio 3.0, which is now href="https://developer.android.com/studio/index.html">available from the stable
channel. On top of the new app href="https://developer.android.com/studio/profile/android-profiler.html">performance
profiling tools, support for the href="http://android-developers.googleblog.com/2017/05/android-announces-support-for-kotlin.html">Kotlin
programming language, and Gradle build optimizations, Android Studio 3.0
makes it easier to develop for Android Oreo features like href="https://android-developers.googleblog.com/2017/05/android-instant-apps-is-open-to-all.html">Instant
Apps, href="https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts.html">XML
Fonts, href="https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts.html">downloadable
fonts, and href="https://developer.android.com/guide/practices/ui_guidelines/icon_design_adaptive.html">adaptive
icons.



With the final platform we're updating the SDK and build tools in Android
Studio, as well as the API Level 27 emulator system images. We recommend
updating to the href="https://developer.android.com/topic/libraries/support-library/revisions.html?utm_campaign=android_launch_npreview_061516&utm_source=anddev&utm_medium=blog">Android
Support Library 27.0.2, which is available from href="https://developer.android.com/studio/build/dependencies.html#google-maven">Google's
Maven repository. See the href="https://developer.android.com/topic/libraries/support-library/revisions.html#27-0-0">version
notes for details on what's new.



As always, we're 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.


Publish your updates to Google Play



When you're ready, you can publish your APK updates targeting API level 27 in
your alpha, beta, or production channels. Make sure that your updated app runs
well on Android Oreo as well as older versions. We recommend using href="https://developer.android.com/distribute/engage/beta.html?utm_campaign=android_launch_npreview_061516&utm_source=anddev&utm_medium=blog">beta
testing to get early feedback from a small group of users and a href="https://developer.android.com/distribute/best-practices/launch/pre-launch-crash-reports.html">pre-launch
report to help you identify any issues, then do a href="https://developer.android.com/distribute/best-practices/launch/progressive-updates.html">staged
rollout. Head over to the Android Developers site to find more info on href="https://developer.android.com/distribute/best-practices/launch/launch-checklist.html">launch
best practices. We're looking forward to seeing your app updates!


What's next for Android Oreo?



We'll soon be closing the Developer Preview issue tracker, but please keep the
feedback coming! If you still see an issue that you filed in the preview
tracker, just file
a new issue
against Android 8.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.



Read more

12/5/17

Tuning your apps and games for long screen devices

Posted by Fred Chung, Developer Advocate


In recent months, there's a growing trend for handset makers to ship new devices
with long screen aspect ratio (stretching beyond 16:9), many of which also sport
rounded corners. This attests to the Android ecosystem's breadth and choice.
Pixel 2 XL and Huawei Mate 10 Pro are just two of many examples. These screen
characteristics could bring a very immersive experience to users and they take
notice of apps and games that don't take advantage of the long aspect ratio
screen on these new devices. Therefore it is important for developers to
optimize for these screen designs. Let's have a look at related support
provided by the Android OS.


Optimize for long aspect ratio screens



Most apps using standard UI widgets will likely work out-of-the-box on these devices. href="https://developer.android.google.cn/guide/practices/screens_support.html">Android
documentation details techniques for flexibly working on multiple screen
sizes. However, some games and apps with custom UIs may run into issues due to
incorrect assumptions on certain aspect ratios. We're sharing a few typical
issues faced by developers, so you can pay attention to those relevant to you:


  • Certain sides of the screen are cropped. This makes any
    graphic or UI elements in the affected regions look incomplete.
  • Touch targets are offset from UI elements (e.g. buttons).
    Users may be confused on UI elements that are seemingly interactive.
  • For full screen mode on rounded corners devices, any UI elements
    very close to the corners may be outside of the curved corner viewable
    area
    . Imagine if a commerce app's "Purchase" button was partially
    obstructed? We recommend referencing href="https://material.io/guidelines/layout/metrics-keylines.html#metrics-keylines-keylines-spacing">Material
    Design guidelines by leaving 16dp side margins in layouts.


If responsive UI is really not suitable for your situation, as a last
resort
declare an explicit maximum supported aspect ratio as follows. On
devices with a wider aspect ratio, the app will be shown in a compatibility mode
padded with letterbox. Keep in mind that certain device models provide an
override for users to force the app into full-screen compatibility mode, so be
sure to test under these scenarios too!



Targets API level 26 or higher: Use android:maxAspectRatio
attributes.



Targets API level 25 or lower: Use android.max_aspect meta-data.
Note that maximum aspect ratio values will be respected only if your
activities don't support resizableActivity.
See href="https://developer.android.google.cn/guide/practices/screens_support.html#MaxAspectRatio">documentation
for detail.


System letterboxes an app when the declared maximum aspect ratio is smaller
than the device's screen.





Consider using side-by-side activities



Long aspect ratio devices enable even more multi-window use cases that could
increase user productivity. Beginning in Android 7.0, the platform offers a
standard way for developers to implement multi-window on supported devices as
well as perform data drag and drop between activities. Refer to href="https://developer.android.com/guide/topics/ui/multi-window.html#configuring">documentation
for details.



Testing is crucial. If you don't have access to one of these long screen
devices, be sure to test on the emulator with adequate screen size and
resolution hardware properties, which are explained in the href="https://developer.android.com/studio/run/managing-avds.html#hpproperties">emulator
documentation.



We know you want to delight your users with long screen devices. With a few
steps, you can ensure your apps and games taking full advantage of these
devices!



Read more

11/14/17

10 things you might be doing wrong when using the SafetyNet Attestation API

Posted by Oscar Rodriguez, Developer Advocate


The
SafetyNet Attestation API
helps you assess the security and compatibility of
the Android environments in which your apps run. Since it was introduced in
March 2015, many developers have successfully integrated it into their Android
apps to make more informed decisions based on the integrity and compatibility of
the devices running their apps.



Throughout the years, the SafetyNet Attestation API has evolved, and its
adoption has steadily increased. However, as with any security/anti-abuse
related API, there are many common pitfalls that may lead developers into
developing unstable systems, or worse, into a false sense of security.



In this post, we provide a list of the most common mistakes we have seen
developers make when integrating the SafetyNet Attestation API.


1. Not getting an API key



Just like many other Google APIs, the SafetyNet Attestation API requires an API
key in order to run. Furthermore, the SafetyNet Attestation API has a per-key
usage quota. Although you can get this quota increased, you need to provide your
API key to do so.



Getting an API key is easy and free of charge. There is no reason not to get an
API key, so if you haven't already, href="https://developer.android.com/training/safetynet/attestation.html#add-api-key">get
an API key now.


2. Not using the latest version of the API



The SafetyNet Attestation API has evolved throughout its history, and with it,
there have been some interface changes. Most recently, with the release of
Google Play services 11.0.0, we revamped the entire SafetyNet API to offer an
interface that is easier and more streamlined to use: the new API uses href="https://developers.google.com/android/reference/com/google/android/gms/safetynet/SafetyNetClient">SafetyNetClient
instead of href="https://developers.google.com/android/reference/com/google/android/gms/safetynet/SafetyNetApi">SafetyNetApi,
which is now deprecated, so make sure you update your implementation to use the
latest version of the API.


Most devices should have the latest version of Google Play services installed,
but if a device doesn't have Google Play services installed, or doesn't have it
up to date, using the SafetyNet Attestation API may lead to the app becoming
unresponsive or crashing. You can prevent this by href="https://developer.android.com/training/safetynet/attestation.html#check-gps-version">checking
the installed version of Google Play services before using the API.


3. Using nonces incorrectly



The SafetyNet Attestation API lets you set a nonce to uniquely and globally
identify each call to the API. Use this feature to prevent a malicious user from
reusing a successful attestation result in place of an unsuccessful result (also
known as a Replay
Attack
).



href="https://developer.android.com/training/safetynet/attestation.html#single-use-token">One
good way to create a nonce is to create a large (16 bytes or longer) random
number on your server using a cryptographically-secure random function. The
SafetyNet attestation response includes the nonce you set, so make sure you
verify that the returned nonce matches the one you included in the request you
made.


4. Not checking the results on your server



SafetyNet can provide useful signals about the state of the device in which your
app is running. However, if the logic that acts on these signals is only
implemented and enforced directly on the device, an attacker could be able to
modify your app and bypass any checks you perform.



To prevent this situation, you should run any logic that verifies the
attestation result and enforces any actions based on them on a server that you
control and trust.


5. Using the test attestation verification service for production



In order to simplify development and testing of the SafetyNet Attestation API,
Google offers an href="https://developer.android.com/training/safetynet/attestation.html#verify-compat-check">online
verification service that checks the digital signature of a SafetyNet
Attestation result using a simple HTTPS request.



As useful as this service may seem, it is designed for test purposes only, and
it has very strict usage quotas that will not be increased upon request.
Instead, you should implement the digital signature verification logic on your
server in a way that it doesn't depend on Google's servers. Most JWT libraries
offer signature verification functionality, and we have href="https://github.com/googlesamples/android-play-safetynet">code samples
that show how to perform this verification in Java and C#. We plan to provide
samples for more languages in the future.


6. Not checking the nonce, timestamp, APK name, and hashes



The SafetyNet Attestation API is most widely known for its integrity and
compatibility checks, whose results are returned in ctsProfileMatch
and basicIntegrity. Although these two values are indeed very
useful, you should check the other values in the response, as they contain
important information as well.



Use nonce to match a response to its request,
as explained above, and use timestampMs to check how much time has passed since you made the
request and you got the response. A delayed response that arrives several hours
or days after the request may suggest suspicious activity.



Use apkPackageName to check the name of the APK that made the
attestation request, and match apkDigestSha256 and
apkCertificateDigestSha256 to those from your app's signed APK in
Google Play, to get a signal about the integrity of the installed app.



Remember that the trustworthiness of the response as a whole is tied to the
results of ctsProfileMatch and basicIntegrity. It is
not unthinkable for a compromised device that fails basicIntegrity
to have forged the rest of the values in the response.


7. Not understanding the differences between ctsProfileMatch
and basicIntegrity



The SafetyNet Attestation API initially provided a single value called
basicIntegrity to help developers determine the integrity of a
device. As the API evolved, we introduced a new, stricter check whose results
appear in a value called ctsProfileMatch, which allows developers
to more finely evaluate the devices on which their app is running.



In broad terms, basicIntegrity gives you a signal about the general
integrity of the device and its API. Rooted devices fail
basicIntegrity, as do emulators, virtual devices, and devices with
signs of tampering, such as API hooks.



On the other hand, ctsProfileMatch gives you a much stricter signal
about the compatibility of the device. Only unmodified devices that
have been certified by Google can pass ctsProfileMatch. Devices
that will fail ctsProfileMatch include the following:


  • Devices that fail basicIntegrity
  • Devices with an unlocked bootloader
  • Devices with a custom system image (custom ROM)
  • Devices for which the manufactured didn't apply for, or pass, Google
    certification
  • Devices with a system image built directly from the href="https://source.android.com/">Android Open Source Program source files
  • Devices with a system image distributed as part of a beta or developer
    preview program (including the href="https://www.google.com/android/beta">Android Beta Program)

8. Not having a strategy for timing attestation checks



The SafetyNet Attestation API gives you a snapshot of the state of a device at
the moment when the attestation request was made. A successful attestation
doesn't necessarily mean that the device would have passed attestation in the
past, or that it will in the future.



Because an attestation is just a spot check, you should plan a sensible strategy
for choosing when to make attestation requests. You may choose to require
successful attestations before users make in-app purchases, after a certain
number of days have passed since the last successful attestation, each time your
app is launched, after every reboot, or any other strategy that makes sense for
your app.



Keep in mind that an attestation request is computationally expensive, consumes
battery and bandwidth, and uses your quota. We recommend you plan a strategy to
use the least amount of attestations required to satisfy your use case.


9. Using the SafetyNet Attestation API results as the only signal
to attack abuse



It may be tempting to think that the SafetyNet Attestation API provides all the
necessary signals for protecting an app against abusers, and use it as the only
signal for building an anti-abuse system.



The SafetyNet Attestation API can only give signals about the state of
a device, not the intent of a user, which is what an anti-abuse system
should be designed to detect. Therefore, you might want to consider including
other signals, such as access logs and behavioral patterns, to more accurately
detect abusive users, and consider not blocking users solely on a failed
attestation. Furthermore, there are many other conditions that cause an
attestation to fail, such as network connection problems, quota issues, and
other transient problems.



In other words, not all users who fail attestation are necessarily abusers, and
not all abusers will necessarily fail attestation. By blocking users solely on
their attestation results, you might be missing abusive users that don't fail
attestations. Furthermore, you might also be blocking legitimate, loyal
customers who fail attestations for reasons other than abuse.


10. Not monitoring and managing your usage quota



As mentioned before, href="https://developer.android.com/training/safetynet/attestation.html#add-api-key">the
SafetyNet Attestation API is rate limited, and there is a default quota of
10,000 requests per day for each API key. Although this quota might be enough
for most development, testing, and initial app launches, your app might reach
the default limit as it increases in popularity.



To prevent inadvertently reaching your quota and getting attestation errors, you
should build a system that monitors your usage of the API and warns you well
before you reach your quota so you can get it increased. You should also be
prepared to handle attestation failures because of an exceeded quota and avoid
blocking all your users in this situation.



If you are close to reaching your quota, or expect a short-term spike that may
lead you to exceed your quota, you can submit
this form
to request short or long-term increases to the quota for your API
key. This process, as well as the additional quota, is free of charge.

Read more

11/7/17

Announcing Architecture Components 1.0 Stable

Posted by Lukas Bergstrom, Product Manager, Android Developer Frameworks Team









Android runs on billions of devices, from high-end phones to airplane seatbacks. The Android OS manages resources aggressively to perform well on this huge range of devices, and sometimes that can make building robust apps complicated. To make it easier, we launched a preview of Architecture Components at Google I/O to provide guidance on app architecture, with libraries for common tasks like lifecycle management and data persistence. Together, these foundational components make it possible to write modular apps with less boilerplate code, so developers can focus on innovating instead of reinventing the wheel - and we hope to keep building on this foundation in the future.

Today we're happy to announce that the Room and Lifecycle href="http://developer.android.com/arch">Architecture Components libraries have reached 1.0 stable. These APIs are ready for production apps and libraries, and are our recommendation for developers looking for help with app architecture and local storage (although they're only recommended, not required.) Lifecycles are now also integrated with the href="https://developer.android.com/topic/libraries/support-library/index.html">Support Library, so you can use them with standard classes like AppCompatActivity.

Although we're declaring them stable today, the beta components are already used in apps that together, have billions of installs. Top developers, like Zappos, have been able to spend more time on what's important thanks to Architecture Components:









Prior to the release of Android Architecture Components we had our own ViewModel implementation. We used Loaders and Dependency Injection to persist our ViewModel through config changes. We recently switched to the Architecture Components ViewModel implementation and all that boilerplate went away. We found that we were able to spend more time on design, business logic and testing, and less on writing boilerplate or worrying about Android lifecycle issues.



We've also started to use LiveData which hooks directly into the Activity lifecycle. We use it to retrieve and display network data and no longer have to concern ourselves with ​network call subscription management.


- David Henry, Android Software Engineer, Zappos






Architecture Components provide a simple, flexible and practical approach that frees developers from some common problems so they can focus on building great experiences. This is based on core building blocks tied together by guidance on app architecture.

Lifecycles

Every Android developer has to deal with the operating system starting, stopping and destroying their Activities. That means managing the state of components - such as observables used to update UI - as you move through the lifecycle. href="https://developer.android.com/topic/libraries/architecture/lifecycle.html">Lifecycles enables the creation of lifecycle-aware components that manage their own lifecycles, reducing the possibility of leaks or crashes. The Lifecycle library is the foundation for other Architecture Components like LiveData.

LiveData

href="https://developer.android.com/topic/libraries/architecture/livedata.html">LiveData is a lifecycle-aware observable that holds data and provides updates. Your UI code subscribes to changes and provides LiveData a reference to its href="https://developer.android.com/reference/android/arch/lifecycle/Lifecycle.html">Lifecycle. Because LiveData is lifecycle-aware, it provides updates when its Lifecycle is started or resumed, but stops providing updates when the LifecycleOwner is destroyed. LiveData is a simple way to build reactive UIs that are safer and more performant.

ViewModel

href="https://developer.android.com/topic/libraries/architecture/viewmodel.html">ViewModel separates ownership of view data and logic from lifecycle-bound entities like Activities and Fragments. A ViewModel is retained until its associated Activity or Fragment is disposed of forever - that means view data survives events like a Fragment being recreated due to rotation. ViewModels not only eliminate common lifecycle issues, they help build UIs that are more modular and easier to test.

Room

Nearly all apps need to store data locally. While Android has bundled SQLite with the platform since version 1, using it directly can be painful. href="https://developer.android.com/topic/libraries/architecture/room.html">Room is a simple object-mapping layer that provides the full power of SQlite with less boilerplate. Features like compile-time query verification and built-in migration make it easier to build a robust persistence layer, while integration with LiveData lets Room provide database-backed, lifecycle-aware observables. Room blends of simplicity, power and robustness for managing local storage, and we hope you give it a try.

Guide to App Architecture and more

Last but not least, we created a href="https://developer.android.com/topic/libraries/architecture/guide.html">Guide to App Architecture that provides core principles applicable to all developers, and specific guidance on using Architecture Components together. Because we've heard from you that clear and consistent guidance is important, today we're updating developer documentation to point to Architecture Components where appropriate. We also have a rich set of videos, codelabs and sample apps available at the href="http://developer.android.com/arch">Architecture Components site, with more to come.

Watch this space

Although the first set of Architecture Components is now stable, we know there's more work to do. Over the last few months, we've listened to href="https://developer.android.com/topic/libraries/architecture/feedback.html">your feedback and made improvements. We also recently launched a new Architecture Component, href="https://developer.android.com/topic/libraries/architecture/paging.html">PagedList, to alpha, in response to your feedback that handling large datasets with RecyclerView is too difficult. This is just the beginning - we have more major components under development that we're looking to announce in the upcoming months.

Our hope with Architecture Components is to free developers to focus on providing unique new experiences for mobile devices. We're glad we can finally announce them as stable for production use. We'd like to thank the community, which has given such great feedback along the way, and we look forward to continuing the discussion in the comments of this post. Finally, for those of you who've been waiting for this stable launch, href="http://developer.android.com/arch">get started today.



Read more
loading...