Showing posts with label Android O. Show all posts
Showing posts with label Android O. Show all posts

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/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

10/6/17

Working with Multiple JobServices

Posted by Isai Damier, Software Engineer, Android DA

Working with Multiple JobServices



In its continuous effort to improve user experience, the Android platform has
introduced strict limitations on background services starting in API level 26.
Basically, unless your app is running in the href="https://developer.android.com/about/versions/oreo/background.html#services">foreground,
the system will stop all of your app's background services within minutes.



As a result of these restrictions on background services,
JobScheduler jobs have become the de facto solution for performing
background tasks. For people familiar with services, JobScheduler
is generally straightforward to use: except in a few cases, one of which we
shall explore presently.



Imagine you are building an Android TV app. Since channels are very important to
TV Apps, your app should be able to perform at least five different background
operations on channels: publish a channel, add programs to a channel, send logs
about a channel to your remote server, update a channel's metadata, and delete a
channel. Prior to Android 8.0 (Oreo) each of these five operations could be
implemented within background services. Starting in API 26, however, you must be
judicious in deciding which should be plain old background Services
and which should be JobServices.



In the case of a TV app, of the five operations mentioned above, only channel
publication can be a plain old background service. For some context, channel
publication involves three steps: first the user clicks on a button to start the
process; second the app starts a background operation to create and submit the
publication; and third, the user gets a UI to confirm subscription. So as you
can see, publishing channels requires user interactions and therefore a visible
Activity. Hence, ChannelPublisherService could be an IntentService
that handles the background portion. The reason you should not use a
JobService here is because JobService will introduce a
delay in execution, whereas user interaction usually requires immediate response
from your app.



For the other four operations, however, you should use JobServices;
that's because all of them may execute while your app is in the background. So
respectively, you should have ChannelProgramsJobService,
ChannelLoggerJobService, ChannelMetadataJobService,
and ChannelDeletionJobService.


Avoiding JobId Collisions



Since all the four JobServices above deal with Channel
objects, it should be convenient to use the channelId as the
jobId for each one of them. But because of the way
JobServices are designed in the Android Framework, you can't. The
following is the href="https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#JobInfo.Builder(int,
android.content.ComponentName)">official description of jobId




class="prettyprint">Application-provided id for this job. Subsequent calls to cancel,
or jobs created with the same jobId, will update the pre-existing
job with the same id. This ID must be unique across all clients
of the same uid (not just the same package). You will want to
make sure this is a stable id across app updates, so probably not
based on a resource ID.


What the description is telling you is that even though you are using 4
different Java objects (i.e. -JobServices), you still cannot use the same
channelId as their jobIds. You don't get credit for
class-level namespace.



This indeed is a real problem. You need a stable and scalable way to relate a
channelId to its set of jobIds. The last thing you
want is to have different channels overwriting each other's operations because
of jobId collisions. Were jobId of type String instead
of Integer, the solution would be easy: jobId= "ChannelPrograms" +
channelId
for ChannelProgramsJobService, jobId= "ChannelLogs" +
channelId
for ChannelLoggerJobService, etc. But since
jobId is an Integer and not a String, you have to devise a clever
system for generating reusable jobIds for your jobs. And for that,
you can use something like the following JobIdManager.



JobIdManager is a class that you tweak according to your app's
needs. For this present TV app, the basic idea is to use a single
channelId over all jobs dealing with Channels. To
expedite clarification: let's first look at the code for this sample
JobIdManager class, and then we'll discuss.




class="prettyprint">public class JobIdManager {

public static final int JOB_TYPE_CHANNEL_PROGRAMS = 1;
public static final int JOB_TYPE_CHANNEL_METADATA = 2;
public static final int JOB_TYPE_CHANNEL_DELETION = 3;
public static final int JOB_TYPE_CHANNEL_LOGGER = 4;

public static final int JOB_TYPE_USER_PREFS = 11;
public static final int JOB_TYPE_USER_BEHAVIOR = 21;

@IntDef(value = {
JOB_TYPE_CHANNEL_PROGRAMS,
JOB_TYPE_CHANNEL_METADATA,
JOB_TYPE_CHANNEL_DELETION,
JOB_TYPE_CHANNEL_LOGGER,
JOB_TYPE_USER_PREFS,
JOB_TYPE_USER_BEHAVIOR
})
@Retention(RetentionPolicy.SOURCE)
public @interface JobType {
}

//16-1 for short. Adjust per your needs
private static final int JOB_TYPE_SHIFTS = 15;

public static int getJobId(@JobType int jobType, int objectId) {
if ( 0 < objectId && objectId < (1<< JOB_TYPE_SHIFTS) ) {
return (jobType << JOB_TYPE_SHIFTS) + objectId;
} else {
String err = String.format("objectId %s must be between %s and %s",
objectId,0,(1<<JOB_TYPE_SHIFTS));
throw new IllegalArgumentException(err);
}
}
}


As you can see, JobIdManager simply combines a prefix with a
channelId to get a jobId. This elegant simplicity,
however, is just the tip of the iceberg. Let's consider the assumptions and
caveats beneath.



First insight: you must be able to coerce channelId into a Short,
so that when you combine channelId with a prefix you still end up
with a valid Java Integer. Now of course, strictly speaking, it does not have to
be a Short. As long as your prefix and channelId combine into a
non-overflowing Integer, it will work. But margin is essential to sound
engineering. So unless you truly have no choice, go with a Short coercion. One
way you can do this in practice, for objects with large IDs on your remote
server, is to define a key in your local database or content provider and use
that key to generate your jobIds.



Second insight: your entire app ought to have only one JobIdManager
class. That class should generate jobIds for all your app's jobs:
whether those jobs have to do with Channels, Users, or
Cats and Dogs. The sample JobIdManager
class points this out: not all JOB_TYPEs have to do with
Channel operations. One job type has to do with user prefs and one
with user behavior. The JobIdManager accounts for them all by
assigning a different prefix to each job type.



Third insight: for each -JobService in your app, you must have a
unique and final JOB_TYPE_ prefix. Again, this must be an
exhaustive one-to-one relationship.


Using JobIdManager



The following code snippet from ChannelProgramsJobService
demonstrates how to use a JobIdManager in your project. Whenever
you need to schedule a new job, you generate the jobId using
JobIdManager.getJobId(...).



class="prettyprint">import android.app.job.JobInfo;
import android.app.job.JobParameters;
import android.app.job.JobService;
import android.content.ComponentName;
import android.content.Context;
import android.os.PersistableBundle;

public class ChannelProgramsJobService extends JobService {

private static final String CHANNEL_ID = "channelId";
. . .

public static void schedulePeriodicJob(Context context,
final int channelId,
String channelName,
long intervalMillis,
long flexMillis)
{
JobInfo.Builder builder = scheduleJob(context, channelId);
builder.setPeriodic(intervalMillis, flexMillis);

JobScheduler scheduler =
(JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
if (JobScheduler.RESULT_SUCCESS != scheduler.schedule(builder.build())) {
//todo what? log to server as analytics maybe?
Log.d(TAG, "could not schedule program updates for channel " + channelName);
}
}

private static JobInfo.Builder scheduleJob(Context context,final int channelId){
ComponentName componentName =
new ComponentName(context, ChannelProgramsJobService.class);
final int jobId = JobIdManager
.getJobId(JobIdManager.JOB_TYPE_CHANNEL_PROGRAMS, channelId);
PersistableBundle bundle = new PersistableBundle();
bundle.putInt(CHANNEL_ID, channelId);
JobInfo.Builder builder = new JobInfo.Builder(jobId, componentName);
builder.setPersisted(true);
builder.setExtras(bundle);
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
return builder;
}

...
}


Footnote: Thanks to Christopher Tate and Trevor Johns for their invaluable
feedback

Read more

8/22/17

Introducing Android 8.0 Oreo

Posted By: Dave Burke, VP of Engineering

After more than a year of development and months of testing by developers and early adopters (thank you!), we're now ready to officially launch Android 8.0 Oreo to the world. Android 8.0 brings a ton of great features such as picture-in-picture, autofill, integrated Instant Apps, Google Play Protect, faster boot time, and much more.

We're pushing the sources to Android Open Source Project (AOSP) for everyone to access today. Pixel and Nexus 5X/6P builds have entered carrier testing and we expect to start rolling out in phases over the next several weeks, alongside Pixel C and Nexus Player. Android Beta users will receive the update to the final version today and images are href="https://developer.android.com/about/versions/o/download.html">available to download and flash manually. We've been working closely with our partners over the last many months, and by the end of this year, hardware makers like Essential, General Mobile, HMD Global Home of Nokia Phones, Huawei, HTC, Kyocera, LG, Motorola, OnePlus, Samsung, Sharp and Sony are scheduled to be launching or upgrading new devices to Android 8.0 Oreo.

What's in Android Oreo?

In Android 8.0 Oreo we focused on creating fluid experiences that make Android even more powerful and easy to use, such as:

  • Picture-in-picture lets users manage two tasks simultaneously on any size screen, and it's href="https://developer.android.com/about/versions/o/android-8.0.html#opip">easy for apps to support it. (Shown at right)

  • Notification dots extend the reach of notifications and offer a new way to surface activity in your apps. Dots href="https://developer.android.com/guide/topics/ui/notifiers/notifications.html#badges">work with zero effort for most apps -- we even extract the color of the dot from your icon.

  • Autofill framework simplifies how users set up a new device and synchronize their passwords. Apps using form data canhref="https://developer.android.com/guide/topics/text/autofill.html"> optimize their apps for Autofill, and password manager apps can use the new APIs to make their services available to users in their favorite apps. Autofill will roll out fully over the next few weeks as part of an update to Google Play Services.




We also invested in Android Vitals, a project focused on optimizing battery life, startup time, graphics rendering, and stability, while giving developers better visibility over the health of their apps:

  • System optimizations: We worked across the system to help apps run faster and smoother -- for example, in the runtime we added a new concurrent compacting garbage collection, code locality, and more.

  • Background limits: We added new href="https://developer.android.com/about/versions/o/background-location-limits.html">limits on background location and wi-fi scans and href="https://developer.android.com/about/versions/o/background.html">changes in the way apps run in the background. These boundaries prevent unintentional overuse of battery and memory and apply to all apps -- make sure you understand and account for these in your apps.

  • Complementary Android Vitals dashboards and IDE profilers: In the Play Console you can now see aggregate data about your app to help you href="https://developer.android.com/topic/performance/vitals/index.html">pinpoint common issues - excessive crash rate, ANR rate, frozen frames, slow rendering, excessive wakeups, and more. You'll also find new performance profilers in Android Studio 3.0, and new instrumentation in the platform.




In Android 8.0 your app can directly pin a specific app shortcut in the launcher to drive engagement (left). Notification dots keep users active in your app and let them jump directly to the app's core functions (right).

For developers, Android Oreo includes many new capabilities to help you build better, more efficient apps. Here are just a few:

  • Autosizing textview: Use href="https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview.html">autosizing TextView to automatically fill a TextView with text, regardless of the amount. You can create an array of preset text sizes, or set min and max sizes with a step granularity, and the text will grow and shrink to fill the available TextView space.

  • Fonts in XML: href="https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html">Fonts are now a fully supported resource type. You can now use fonts in XML layouts and define font families in XML.

  • Downloadable fonts and emoji: With href="https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts.html">downloadable fonts you can load fonts from a shared provider instead of including them in your APK. The provider and support library manage the download of fonts and shares them across apps. The same implementation also supports downloadable emoji, so you can get updated emoji without being limited to the emoji built into the device.

  • Adaptive icons: You can now create href="https://developer.android.com/guide/practices/ui_guidelines/icon_design_adaptive.html">adaptive icons that the system displays in different shapes, based on a mask selected by a device manufacturer. The system also animates interactions with the icons, and uses them in the launcher, shortcuts, settings, sharing dialogs, and in the overview screen.




Adaptive icons display in a variety of shapes across different device models.
  • Shortcut pinning: App shortcuts and homescreen widgets are great for engaging users and now you can let users add and href="https://android-developers.googleblog.com/2017/07/whats-new-for-shortcuts-and-widgets-in.html">pin shortcuts and widgets to the launcher from within your app. There's also a new option to add a specialized activity to help users create shortcuts. The activity is complete with custom options and confirmation.

  • Wide-gamut color for apps: Imaging apps can now take full advantage of new devices that have a wide-gamut color capable display. To display wide gamut images, apps enable a flag in their manifest files (per activity) and load bitmaps with an embedded href="https://developer.android.com/reference/android/graphics/ColorSpace.html">wide color profile (AdobeRGB, Pro Photo RGB, DCI-P3, etc.).

  • WebView enhancements: In Android Oreo, we've enabled WebView multiprocess mode by default and added an API to let your app href="https://developer.android.com/guide/webapps/managing-webview.html">handle errors and crashes. You can also opt in your app's WebView objects to href="https://developer.android.com/guide/webapps/managing-webview.html#safe-browsing">verify URLs through Google Safe Browsing.

  • Java 8 Language APIs and runtime optimizations: Android now supports several new Java Language APIs, including the new java.time API. In addition, the Android Runtime is faster than ever before, with improvements of up to 2x on some application benchmarks.




Learn more about these and other new features by visiting the href="https://developer.android.com/about/versions/o/index.html">Android 8.0 Oreo site on href="https://developer.android.com/index.html">developer.android.com. Also check out the What's New in Android Oreo? video for an overview of new features for developers.

Make sure your apps are ready

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 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.

Once you've resolved any issues, publish your app updates to Google Play in your alpha, beta, or production channels so that they're available as users start to receive Android 8.0 Oreo.

Speed your development with Android Studio

When you're ready to build with new APIs in Android Oreo, we recommend updating to the latest version of href="https://android-developers.googleblog.com/2017/05/android-studio-3-0-canary1.html">Android Studio 3.0, available for download from the href="https://developer.android.com/studio/preview/index.html">beta channel. Aside from improved app href="https://developer.android.com/studio/preview/features/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 with 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/fonts-in-xml.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.

Android Studio 3.0 includes tools for developing with Android Oreo features, such as previewing XML font resources in your app.

We also 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 26.0.2, available now from href="https://developer.android.com/studio/build/dependencies.html#google-maven">Google's Maven repository, and to the latest SDK, tools, and emulator system images, available in the SDK Manager.

If you're just getting started building for Android Oreo, read the href="https://developer.android.com/about/versions/o/migration.html#bfa">migration guide first. It gives you an overview of the process and the configuration changes you'll need to make.

To compile against the official Android 8.0 APIs, update your project's compileSdkVersion to API 26. We also recommend updating your app's targetSdkVersion to API 26 to opt-in and test your app with Android Oreo specific href="https://developer.android.com/about/versions/o/behavior-changes.html?utm_campaign=android_launch_npreview_061516&utm_source=anddev&utm_medium=blog">behavior changes. See the href="https://developer.android.com/about/versions/o/migration.html#bfa">migration guide for details on how to set up your environment to build with Android Oreo.

Publish your updates to Google Play

Google Play is open for apps compiled against or targeting API 26. When you're ready, you can publish your APK updates 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">Google Play's beta testing feature to get early feedback from a small group of users, then do a staged rollout. 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! You can href="https://issuetracker.google.com/issues/new?component=190923&template=841312">file a new issue against Android 8.0 in the AOSP issue tracker.

Thanks again to the many developers and early adopters who participated in the Android O Developer Preview and public beta. You gave us great feedback, and filed hundreds of issues that helped us to make the Android Oreo platform great for consumers and developers.

Read more

7/28/17

What’s new for shortcuts and widgets in Android O


Posted by
Gloria Liou, Associate Product Manager Intern






Why use shortcuts and widgets?




One of our favorite features in Android O is the ability
to pin shortcuts and widgets for your app onto the launcher through deep
linking.






Shortcuts let users quickly start a specific task, while widgets give users
instant access to specific actions and information from your app. Users want to
get things done, and get things done fast - shortcuts and widgets are a way to
help them and to increase user engagement with your content.




To pin a shortcut or widget, users long press your app's icon for options and
drag and drop the selected item to a location of their choice.


























Dynamic / static shortcuts


Pinned shortcuts















Adding shortcuts and widgets from within your app












The API has a new flow for adding shortcuts and widgets from within your app.
The new method uses a modal dialog, deprecating the old method of using a
broadcast, which will not work on O devices.




That's not all. We've made improvements to the user interface and experience. In
the old experience, there was no app icon on the shortcut, so users had no idea
which app the shortcut was from. Marking shortcuts with the app icon provides
better branding while protecting users from potential malware.
































Old shortcut


New shortcut








There is also a new option to add a specialized activity to help users create
shortcuts. The activity is complete with custom options and confirmation.











With these new additions and improvements, users will be more likely to use your
shortcuts and widgets, leading to more meaningful and impactful engagement with
your app and happier, more productive users.




To learn more, head over to the shortcuts and widgets page on the Android Developers website.






Read more

7/25/17

Developer Preview 4 now available, official Android O coming soon!

Posted by Dave Burke, VP of Engineering





As we put the finishing touches on the Android O platform, today we're rolling
out Developer Preview 4 to help you make sure your apps are ready.



This is the final preview before we launch the official Android O platform to
consumers later
this summer
. Take this opportunity to wrap up your testing and publish your
updates soon, to give users a smooth transition to Android O.



If you have a device that's enrolled in the href="http://www.android.com/beta">Android Beta Program, you'll receive an
update to Developer Preview 4 in the next few days. If you haven't enrolled your
device yet, just visit the Android Beta
site
to enroll and get the update.



Watch for more information on the official Android O release soon!


What's in this update?



Developer Preview 4 is a release candidate build of Android O that you can use
to complete your development and testing in time for the upcoming official
release. It includes the final system behaviors, the latest bug fixes and
optimizations, and the final APIs (API level 26) already available since href="https://android-developers.googleblog.com/2017/06/android-o-apis-are-final-get-your-apps.html">Developer
Preview 3.



We're releasing the Developer Preview 4 device system images today, together
with the stable version of the Android 26.0.0 Support Library. Incremental
updates to the SDK, tools, and Android Emulator system images are on the way
over the next few days.



We're also introducing a new version of href="http://developers.android.com/testing">Android Testing Support Library
that includes new features like Android Test Orchestrator, Multiprocess
Espresso, and more. Watch for details coming soon.


Test your apps on Android O



Today's Developer Preview 4 system images give you an excellent way to test your
current apps on the near-final version of Android O. By testing now, you can
make sure your app offers the experience you want as users start to upgrade to
the official Android O platform.



Just enroll a supported device in the Android
Beta Program
to get today's update over-the-air, install your current app
from Google Play, and test the user flows. The app should run and look great,
and should handle the Android O href="https://developer.android.com/preview/behavior-changes.html">behavior
changes properly -- in particular, pay attention to href="https://developer.android.com/preview/behavior-changes.html#abll">background
location limits, href="https://developer.android.com/preview/features/notification-channels.html">notification
channels, and changes in href="https://developer.android.com/preview/behavior-changes.html#networking-all">networking,
href="https://developer.android.com/preview/behavior-changes.html#security-all">security,
and href="https://developer.android.com/preview/behavior-changes.html#privacy-all">identifiers.



Once you've resolved any issues, publish your app updates with the current
targeting level, so that they're available as users start to receive Android O.


Enhance your apps with Android O features and APIs



Users running the latest versions of Android are typically among the most active
in terms of downloading apps, consuming content, and making purchases. They're
also more vocal about support for the latest Android features in their favorite
apps. With Android O, users are anticipating features like href="https://developer.android.com/preview/features/notification-channels.html">notification
channels and href="https://developer.android.com/preview/features/notification-badges.html">dots,
href="https://developer.android.com/preview/features/pinning-shortcuts-widgets.html">shortcut
pinning, href="https://developer.android.com/preview/api-overview.html#opip">picture-in-picture,
href="https://developer.android.com/preview/features/autofill.html#optimizing_your_app_for_autofill">autofill,
and others. These features could also help increase engagement with your app as
more users upgrade to Android O over time.












With Android O your app can directly pin a specific app shortcut in the launcher
to drive engagement.


Notification dots keep users active in your app and let them jump directly the
app's core functions.



Enhancing your apps with Android O features can help you drive engagement with
users, offer new interactions, give them more control and security, and improve
performance. Features like href="https://developer.android.com/preview/features/adaptive-icons.html">adaptive
icons, href="https://developer.android.com/preview/features/downloadable-fonts.html">downloadable
fonts, and href="https://developer.android.com/preview/features/autosizing-textview.html">autosizing
TextView can simplify your development and minimize your APK size. Battery
is also a top concern for users, so they'll appreciate your app being optimized
for href="https://developer.android.com/preview/features/background.html">background
execution limits and other important href="https://developer.android.com/preview/behavior-changes.html#o-apps">changes
in vital system behavior for O apps.



Visit the O Developer
Preview site
to learn about all of the new features and APIs and how to
build them into your apps.


Speed your development with Android Studio



When you're ready to build for Android O, we recommend updating to the latest
version of href="https://android-developers.googleblog.com/2017/05/android-studio-3-0-canary1.html">Android
Studio 3.0, available for download from the href="https://developer.android.com/studio/preview/index.html">canary
channel. Aside from improved app href="https://developer.android.com/studio/preview/features/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 with href="https://android-developers.googleblog.com/2017/05/android-instant-apps-is-open-to-all.html">Instant
Apps, href="https://developer.android.com/preview/features/working-with-fonts.html">XML
Fonts, href="https://developer.android.com/preview/features/downloadable-fonts.html">Downloadable
Fonts, and href="https://developer.android.com/preview/features/adaptive-icons.html">Adaptive
Icons.



We also recommend updating to the stable version of 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 26.0.0, available now from href="https://developer.android.com/studio/build/dependencies.html#google-maven">Google's
Maven repository, and to the latest SDK, tools, and emulator system images,
available over the next few days.



You can update your project's compileSdkVersion to API 26 to compile against the
official Android O APIs. We also recommend updating your app's targetSdkVersion
to API 26 to opt-in and test your app with Android O specific href="https://developer.android.com/preview/behavior-changes.html?utm_campaign=android_launch_npreview_061516&utm_source=anddev&utm_medium=blog">behavior
changes. See the href="https://developer.android.com/preview/migration.html#bfa">migration
guide for details on how to setup your environment to build with Android O.


Publish your updates to Google Play



Google Play is open for apps compiled against or targeting API 26. When you're
ready, you can publish your APK updates in your alpha, beta, or production
channels.



Make sure that your updated app runs well on Android O 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">Google
Play's beta testing feature to get early feedback from a small
group of users. Then do a staged rollout. We're looking forward to seeing your
app updates!


How to get Developer Preview 4



It's simple to get Developer Preview 4 if you haven't already! Just visit href="https://android.com/beta">android.com/beta and opt-in your eligible
phone or tablet. As always, you can also download and href="https://developer.android.com/preview/download.html?utm_campaign=android_launch_npreview_061516&utm_source=anddev&utm_medium=blog#flash">flash
this update manually. The O Developer Preview is available for Pixel, Pixel
XL, Pixel C, Nexus 5X, Nexus 6P, Nexus Player, and the Android Emulator.
Enrolled devices will automatically update when we release the official version
of Android O.



Thanks for all of your input throughout the preview. Continue to share your href="https://developer.android.com/preview/feedback.html">feedback and
requests, we love it!




Read more

6/9/17

Android O APIs are final, get your apps ready!

Posted by Dave Burke, VP of Engineering


Three weeks ago at Google I/O, we href="https://android-developers.googleblog.com/2017/05/whats-new-in-android-o-developer.html">announced
the second developer preview of Android O along with key themes, Fluid
Experiences
and Vitals, and highlighted our work
towards a modular base with href="https://android-developers.googleblog.com/2017/05/here-comes-treble-modular-base-for.html">Project
Treble. It was also an important milestone for us with the release
of the first beta-quality candidate. We talked a lot about what's new in Android
during the keynote and breakout sessions—if you missed the livestream, be sure
to check out the full archive of talks href="https://www.youtube.com/user/androiddevelopers/playlists?sort=dd&view=50&shelf_id=14">here.



Today we're rolling out Developer Preview 3 with the final Android O APIs, the
latest system images, and an update to Android Studio to help you get ready for
the consumer release later in the summer. Watch for one more preview update
coming in July that will bring you the near-final system images.



If you've already enrolled your device in the href="http://android.com/beta">Android Beta Program, you'll receive an
update to Developer Preview 3 shortly.


Make your app compatible with Android O



With the consumer launch approaching href="https://developer.android.com/preview/migration.html">in the coming
months, a critical first step is making your current app compatible with
Android O. This will give your users a seamless transition to the new platform
as it arrives on their devices.



If you haven't tested your app for compatibility yet, getting started is
straightforward -- just enroll a supported device in Android Beta and get the
latest update over-the-air, then install your current app from Google Play and
test. The app should run and look great, and it should handle the Android O href="https://developer.android.com/preview/behavior-changes.html">behavior
changes properly -- in particular pay attention to href="https://developer.android.com/preview/behavior-changes.html#abll">background
limits and changes in href="https://developer.android.com/preview/behavior-changes.html#networking-all">networking,
href="https://developer.android.com/preview/behavior-changes.html#security-all">security,
and href="https://developer.android.com/preview/behavior-changes.html#privacy-all">identifiers.



After you've made any necessary updates, we recommend publishing the compatible
version of your app to Google Play right away -- without changing the app's
platform targeting.


Enhance your app with Android O features and APIs



Extending your apps with Android O features can help you drive more engagement,
offer new interactions, give users more control and security, and even improve
your app's performance.



href="https://developer.android.com/preview/features/notification-channels.html">Notification
channels and href="https://developer.android.com/preview/features/notification-badges.html">dots
give you more ways to surface new content to users and bring them back into your
app. Picture-in-picture keeps your app onscreen while users are multitasking,
and href="https://developer.android.com/preview/features/autofill.html#optimizing_your_app_for_autofill">autofill
makes it simple for them to enter forms data and helps keep their data secure.
Also check out href="https://developer.android.com/preview/features/adaptive-icons.html">adaptive
icons, href="https://developer.android.com/preview/features/fonts-in-xml.html">XML font
resources, href="https://developer.android.com/preview/features/downloadable-fonts.html">downloadable
fonts and href="https://developer.android.com/preview/features/emoji-compat.html">emoji,
href="https://developer.android.com/preview/features/autosizing-textview.html">autosizing
TextView,href="https://developer.android.com/ndk/guides/audio/aaudio/aaudio.html"> AAudio
API, and href="https://developer.android.com/preview/api-overview.html">many others.
You'll also want plan your support for href="https://developer.android.com/preview/features/background.html">background
execution limits and other important href="https://developer.android.com/preview/behavior-changes.html#o-apps">changes
in vital system behavior for O apps.



Visit the O Developer
Preview site
to learn about all of the new features and APIs and how to
build them into your apps.











Picture-in-Picture mode lets you keep users engaged while they are multitasking (left). Notification dots keep users active in your app and let them jump directly the app’s core functions (right).

Get started with Developer Preview 3



Today's preview update includes the latest version of the Android O platform
with the final API level 26 and hundreds of bugfixes and optimizations. You can
download the final API 26 SDK from the SDK Manager in href="https://developer.android.com/studio/index.html?utm_campaign=android_launch_npreview_061516&utm_source=anddev&utm_medium=blog">Android
Studio, and 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 26.0.0 beta 2 from href="https://developer.android.com/studio/build/dependencies.html#google-maven">Google's
Maven repository.



Together, these give you everything you need to develop and test your apps with
the official Android O APIs. Once you've installed the final SDK, you can update
your project's compileSdkVersion to API 26 to compile against the
official Android O APIs. We also recommend updating your app's
targetSdkVersion to API 26 to opt-in and test your app with Android
O specific href="https://developer.android.com/preview/behavior-changes.html?utm_campaign=android_launch_npreview_061516&utm_source=anddev&utm_medium=blog">behavior
changes. See the href="https://developer.android.com/preview/migration.html#bfa">migration
guide for details on how to set up your environment to build with Android O.



APIs have changed since the second developer preview, so if you have existing
code using Android O preview APIs, take a look at the href="https://developer.android.com/sdk/api_diff/26-incr/changes.html">diff
report to see where your code might be affected.



If you're developing for Android O, we recommend updating to the latest version
of href="https://android-developers.googleblog.com/2017/05/android-studio-3-0-canary1.html">Android
Studio 3.0, now available in the canary channel. Aside from great new
features like improved app 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
includes build support for href="https://android-developers.googleblog.com/2017/05/android-instant-apps-is-open-to-all.html">Instant
Apps, an href="https://developer.android.com/preview/features/adaptive-icons.html">Adaptive
Icon Wizard, and support for href="https://developer.android.com/preview/features/working-with-fonts.html">XML
Fonts, href="https://developer.android.com/preview/features/working-with-fonts.html">anhref="https://developer.android.com/preview/features/working-with-fonts.html">d
href="https://developer.android.com/preview/features/downloadable-fonts.html">Downloadable
Fonts.






Android Studio 3.0 includes tools for developing with Android O features lets you preview XML font resources in your app.


If you don't plan to use those features, you now have the option of developing
for Android O using href="https://developer.android.com/studio/index.html">Android Studio 2.3.3
from the stable channel. Note that the tools for working with adaptive icons and
downloadable fonts, and XML fonts are not available in Android Studio 2.3.3.


Publish your apps to alpha, beta or production channels in Google
Play



Now that the APIs are final, you can publish APK updates compiling with, and
optionally targeting, API 26 to your alpha, beta, or even production channels in
Google Play. Publishing your O-targeted app during the preview lets you test
compatibility on existing devices and push updates to devices running API 26 --
such as users who are enrolled in the Android Beta program.



To make sure that your updated app runs well on Android O as well as older
versions, a common strategy is to use href="https://developer.android.com/distribute/engage/beta.html?utm_campaign=android_launch_npreview_061516&utm_source=anddev&utm_medium=blog">Google
Play's beta testing feature to get early feedback from a small group of
users -- including developer preview users — and then do a staged rollout as you
release the updated app to all users.


How to get the preview update



Through the Android Beta program,
developers and early adopters worldwide will soon be getting Developer Preview 3
on their devices. If you aren't yet enrolled, just visit href="https://android.com/beta">android.com/beta and opt-in your eligible
Android phone or tablet. As always, you can also download and href="https://developer.android.com/preview/download.html?utm_campaign=android_launch_npreview_061516&utm_source=anddev&utm_medium=blog#flash">flash
this update manually. The O Developer Preview is available for Pixel, Pixel
XL, Pixel C, Nexus 5X, Nexus 6P, and Nexus Player.



Thanks so much for all of your feedback so far. Please continue to share href="https://developer.android.com/preview/feedback.html">feedback or
requests as we work towards the consumer release later this summer. We're
looking forward to seeing your apps on Android O!



Read more
loading...