page.title=Android for Work Developer Guide
page.tags="work", "android for work", "afw", "developer", "android"
page.metaDescription=Android for Work provides organizations with a secure, flexible, and unified Android mobility platform combining devices, applications, and management.
page.image=images/work/cards/android-studio_600px.png

@jd:body

<div id="qv-wrapper">
  <div id="qv">
    <h2>In this document</h2>
    <ul>
      <li><a href="#managed-profiles">Managed Profiles</a></li>
      <li><a href="#app-restrictions">Implementing App Restrictions</a></li>
      <li><a href="#cosu">COSU Devices</a></li>
      <li><a href="#sso">Set up Single Sign-on with Chrome Custom Tabs</a></li>
      <li><a href="#testing">Test Your App</a></li>
    </ul>
  </div>
</div>

<p>
  Android for Work provides organizations with a secure, flexible, and
  unified Android mobility platform—combining devices, applications,
  and management. By default, Android apps are compatible with Android
  for Work. However, there are additional features you can use to make
  your Android app work best on a managed device:
</p>

<ul>
  <li>
    <a href="#managed-profiles">Managed profile compatibility</a>—Modify your Android
    app so it functions best on an Android device with a work profile.
  </li>
  <li>
    <a href="#app-restrictions">Managed configuration using app restrictions</a>—Modify
    your app to allow IT administrators the option to specify custom
    settings for your apps.
  </li>
  <li>
    <a href="#cosu">Corporate-owned, single-use (COSU)</a>—Optimize your
    app so that it can be deployed on an Android device as a kiosk.
  </li>
  <li>
    <a href="#sso">Single Sign-On (SSO)</a>—Simplify the sign-on process
    for users signing in to different apps on their Android device
    running Android for Work.
  </li>
</ul>

<h3>Prerequisites</h3>

<ol>
  <li>You’ve created an Android app.</li>
  <li>You’re ready to modify your app so that it works best with
    Android for Work.</li>
  <li>Minimum version: Android 5.0 Lollipop recommended version:
    Android 6.0 Marshmallow and later.</li>
</ol>

<p>
  <strong>Note:</strong> Android for Work functions natively on most
  Android 5.0 devices; however, Android 6.0 and later offers
  additional features for Android for Work, especially with regard to
  COSU.
</p>

<h2 id="managed-profiles">Manage Profiles</h2>

<p>
  You can manage a user’s business data and applications through a
  work profile. A work profile is a managed corporate profile
  associated with the primary user account on an Android device. A
  work profile securely isolates work apps and data from personal apps
  and data. This work profile is in a separate container from the
  personal profile, which your user controls. These separate profiles
  allow organizations to manage the business data they care about, but
  leave everything else on a user’s device under the user’s control.
  For a deep dive into best practices, see the
  <a href="{@docRoot}work/managed-profiles.html">Set up Managed Profiles</a>
  guide. For an overview of those best practices, see below.
</p>

<h3>Key features of a managed profile</h3>

<ul>
  <li>Separate and secure profile</li>
  <li>Google Play for Work for application distribution</li>
  <li>Separate badged work applications</li>
  <li>Profile-only management capabilities controlled by an administrator</li>
</ul>

<h3>Managed profile benefits on Android 5.0+</h3>

<ul>
  <li>Full device encryption</li>
  <li>One Android application package (APK) for both profiles when
    there’s a personal profile and a work profile present on the device</li>
  <li><a href="https://support.google.com/work/android/answer/6192678"
      >Device policy controller</a> (DPC) is limited to the managed profile</li>
  <li>Device administration via the
    <a href="{@docRoot}reference/android/app/admin/DevicePolicyManager.html"
    >DevicePolicyManager</a> class</li>
</ul>

<h3>Considerations for managed profiles</h3>
<ul>
  <li>The Android system prevents intents
    <a href="{@docRoot}reference/android/app/admin/DevicePolicyManager.html#clearCrossProfileIntentFilters(android.content.ComponentName)"
    >from crossing profiles</a> and IT administrators can
    <a href="{@docRoot}reference/android/app/admin/DevicePolicyManager.html#enableSystemApp(android.content.ComponentName,%20java.lang.String)"
    >enable or disable system apps</a>.</li>
  <li>A file path (Uniform Resource Identifier [URI]) that’s valid on
    one profile may not be valid on the other.</li>
</ul>

<h3>Prevent intents from failing between profiles</h3>
<p>
  It’s difficult to know which intents can cross between profiles, and
  which ones are blocked. The only way to know for sure is by testing.
  Before your app starts an activity, you should verify that the
  request is resolved by calling
  <a href="{@docRoot}reference/android/content/Intent.html#resolveActivity(android.content.pm.PackageManager)"
  ><code>Intent.resolveActivity()</code></a>.
  <ul>
    <li>If it returns <code>null</code>, the request doesn’t resolve.</li>
    <li>If it returns something, it shows that the intent resolves,
      and it’s safe to send the intent.</li>
  </ul>
</p>
<p>
  <strong>Note</strong>: For detailed testing instructions, see
  <a href="{@docRoot}work/managed-profiles.html#prevent_failed_intents"
  >Prevent Failed Intents</a>.
</p>

<h3>Share files across profiles</h3>
<p>
  Some developers use URIs to mark file paths in Android. However,
  with Android for Work, because there are separate profiles, we
  recommend:
</p>

<table>
  <tr>
    <td style="white-space:nowrap;">
      <strong>Use:</strong><br/>
      Content URIs
    </td>
    <td>
      <ul>
        <li>
          The <a href="{@docRoot}reference/android/content/ContentUris.html"
          >content URIs</a> contain the authority, path, and ID for a
          specific file. You can generate this using
          <a href="{@docRoot}reference/android/support/v4/content/FileProvider.html"
          >FileProvider</a> subclass.
          <a href="{@docRoot}training/secure-file-sharing/index.html">Learn more</a>
        </li>
        <li>
          Share and grant permissions to access the content URI using
          an Intent. Permissions can only be passed across the profile
          boundary using Intents. If you grant another app access rights
          to your file using
          <a href="{@docRoot}reference/android/content/Context.html#grantUriPermission(java.lang.String,%20android.net.Uri,%20int)"
          ><code>Context.grantUriPermission()</code></a>, it only is granted for
          that app in the same profile.</li>
      </ul>
    </td>
  </tr>
  <tr>
    <td style="white-space:nowrap;">
      <strong>Don't use:</strong><br/>
      File URI
    </td>
    <td>
      <ul>
        <li>Contains the absolute path of the file on the device’s
          storage.</li>
        <li>A file path URI that’s valid on one profile isn’t valid on
          the other.</li>
        <li>If you attach a file URI to an intent, a handler is unable
          to access the file in another profile.</li>
      </ul>
    </td>
  </tr>
</table>

<p>
  <strong>Next steps</strong>: Once your app supports managed
  profiles, test it in a work profile. See
  <a href="#testing">Test your app with Android for Work</a>.
</p>

<h2 id="app-restrictions">Implementing App Restrictions</h2>

<p>
  App restrictions are a set of instructions that IT administrators
  can use to manage their users’ mobile devices in a specific way.
  These instructions are universal and work across any EMM, allowing
  administrators to remotely configure applications on their users’
  phones.
</p>

<p>
  If you’re developing apps for business or government, you may need
  to satisfy your industry’s specific set of requirements. Using
  application restrictions, the IT administrator can remotely specify
  settings and enforce policies for their users’ Android apps; for
  example:
</p>

<ul>
  <li>Configure if an app can sync data via cellular/3G, or only Wi-Fi</li>
  <li>Whitelist or blacklist URLs on a web browser</li>
  <li>Configure an app's email settings</li>
  <li>Enable or disable printing</li>
  <li>Manage bookmarks</li>
</ul>

<h3>Best practices for implementing app restrictions</h3>

<p>
  The <a href="{@docRoot}work/app-restrictions.html">Set up App Restrictions</a>
  guide is the key source for information on how to build and deploy
  app restrictions. After you’ve reviewed this documentation, see
  recommendations below for additional guidance.
</p>

<h4>When first launching the app</h4>
<p>
  As soon as you launch an application, you can see if app
  restrictions are already set for this app in <code>onStart()</code> or
  <code>onResume()</code>. Additionally, you can find out if your
  application is managed or unmanaged. For example, if
  <a href="{@docRoot}reference/android/content/RestrictionsManager.html#getApplicationRestrictions()"
  ><code>getApplicationRestrictions()</code></a> returns:
  <ul>
    <li><strong>A set of application-specific restrictions</strong>—You
      can configure the app restrictions silently (without requiring
      user input).</li>
    <li><strong>An empty bundle</strong>—Your application acts like
      it’s unmanaged (for example, how the app behaves in a personal
      profile).</li>
    <li><strong>A bundle with a single key value pair with
      <a href="{@docRoot}reference/android/os/UserManager.html#KEY_RESTRICTIONS_PENDING"
      ><code>KEY_RESTRICTIONS_PENDING</code></a> set to true</strong>—your
      application is being managed, but the DPC isn’t configured
      correctly. You should block this user from your app, and direct
      them to their IT administrator.</li>
  </ul>
</p>

<h4>Listen for changes to app restrictions</h4>
<p>
  IT administrators can change app restrictions and what policies they
  want to enforce on their users at any time. Because of this, we
  recommend you ensure that your app can accept new restrictions as
  follows:
</p>

<ul>
  <li><strong>Fetch restrictions on launch</strong>—Your app should
    call <code>getApplicationRestrictions()</code> in <code>onStart()</code>
    and <code>onResume()</code>, and compare against old restrictions
    to see if changes are required.</li>
  <li><strong>Listen while running</strong>—Dynamically register
    <a href="{@docRoot}reference/android/content/Intent.html#ACTION_APPLICATION_RESTRICTIONS_CHANGED"
    ><code>ACTION_APPLICATION_RESTRICTIONS_CHANGED</code></a> in your
    running activities or services, after you’ve checked for new
    restrictions. This intent is sent only to listeners that are
    dynamically registered, and not to listeners declared in the app
    manifest.</li>
  <li><strong>Unregister while not running</strong>—In <code>onPause()</code>,
    you should unregister for the broadcast of
    <code>ACTION_APPLICATION_RESTRICTIONS_CHANGED</code>.</li>
</ul>

<h2 id="cosu">COSU Devices</h2>

<p>
  Corporate-owned, single-use devices (COSU) are kiosk devices used
  for a single purpose, such as digital signage displays, ticket
  printing kiosks, or checkout registers.
</p>
<p>
  When an Android device is configured as a COSU device, the user sees
  an application locked to the screen with no Home or Recent Apps
  buttons to escape the app. COSU can also be configured to show a set
  of applications, such as a library kiosk with an app for the library
  catalog and a web browser.
</p>
<p>
  For instructions, see
  <a href="{@docRoot}work/cosu.html">Set up Single-Purpose Devices</a>.
</p>

<h2 id="sso">Set up Single Sign-on with Chrome Custom Tabs</h2>

<p>
  Enterprise users often have multiple apps on their device, and they
  prefer to sign in once to access all of their work applications.
  Typically, users sign in through a
  <a href="https://developer.chrome.com/multidevice/webview/overview">WebView</a>;
  however, there are a couple reasons why this isn’t ideal:
</p>
<ol>
  <li>
    Users often need to sign in multiple times with the same
    credentials. The WebView solution often isn’t a true Single
    Sign-On (SSO) experience.
  </li>
  <li>
    There can be security risks, including malicious applications
    inspecting cookies or injecting JavaScript® to access a user’s
    credentials. Even trusted developers are at risk if they rely on
    potentially malicious third-party SDKs.
  </li>
</ol>

<p>
  A solution to both problems is to authenticate users using Chrome
  Custom Tabs, instead of WebView. This ensures that authentication:
</p>
<ul>
  <li>
    Occurs in a secure context (the system browser) where the host app
    cannot inspect contents.
  </li>
  <li>
    Has a shared cookie state, ensuring the user has to sign in only
    once.
  </li>
</ul>

<h3>Requirements</h3>

<p>
  Chrome Custom Tabs are supported using Platform APIs from API level
  23 (Android 6.0), and support libraries back to API level 4 (Android
  1.6). To implement Chrome Custom Tabs, you need to use a supported
  browser, such as Chrome 45 or later.
</p>

<h3>How do I implement Chrome Custom Tabs?</h3>

<p>
  Google, in conjunction with the OpenID Foundation, has published an
  open source library on GitHub. To set up Chrome Custom Tabs for SSO,
  see the <a href="https://github.com/openid/AppAuth-Android"
  >documentation and sample code on GitHub</a>.
</p>

<h2 id="testing">Test your App with Android for Work</h2>

<p>
  Once you’ve developed your app, you’ll want to test it in a work
  profile—both as a profile owner and device owner. See the
  instructions below.
</p>

<h3>Use TestDPC to test your Android app</h3>

<p>
  TestDPC is a tool you can use to test your Android app in a variety
  of Android for Work environments. You can configure it as a profile
  owner or a device owner to launch management APIs on your device,
  using one of these methods:
</p>
<ul>
  <li>Download the source code for TestDPC from
    <a href="https://github.com/googlesamples/android-testdpc">GitHub</a>.</li>
  <li>Install TestDPC directly from
    <a href="https://play.google.com/store/apps/details?id=com.afwsamples.testdpc"
    >Google Play</a>.</li>
</ul>
<p>
  For more information on how to configure TestDPC, see the
  instructions below and the
  <a href="https://github.com/googlesamples/android-testdpc">TestDPC User Guide</a>.
</p>

<p>
  <strong>REQUIRED</strong>: Your test Android device needs to run
  Android 5.0 or later and be able to natively support Android for Work.
</p>

<h3>Provision a profile owner</h3>

<p>
  To test your app in a work profile, you need to first provision a
  profile owner on the TestDPC app:
</p>

<ol>
  <li>Launch the TestDPC app and click <strong>Set up profile</strong>.</li>
  <li>When prompted, click <strong>Set up</strong>, ensuring the
    TestDPC’s logo is highlighted on the screen.</li>
  <li>If your device isn’t encrypted, you need to encrypt your device.
    Follow the briefcase notification after reboot to continue
    provisioning.<br/>
    Once you’ve provisioned the profile owner correctly, badged
    applications appear at the end of your app tray. Install your app
    on the device and test to see how it runs in the work profile.
  </li>
  <li>
    Install your app on the device and test to see how it runs in the
    work profile.
  </li>
</ol>

<h3>Provision a device owner</h3>

<p>
  Testing your app as a device owner requires more steps than testing
  as a profile owner. You first need to provision the device owner on
  your test device using the
  <a href="{@docRoot}samples/NfcProvisioning/index.html"
  >NfcProvisioning sample app</a>. For complete instructions to
  provision TestDPC in device owner mode using the NfcProvisioning
  app, see the <a href="https://github.com/googlesamples/android-testdpc"
  >TestDPC User Guide</a>.
</p>

<ol>
  <li>Download the <a href="{@docRoot}samples/NfcProvisioning/index.html"
    >NfcProvisioning</a> app sample files to your development environment.</li>
  <li>Unpack the project, open your shell, and <code>cd</code> to the project directory.</li>
  <li>Add a file to the directory with the <code>local.properties</code> name
    and the following content:
    <pre>sdk.dir=/path/to/your/android/sdk</pre>
  </li>
  <li>While in the project directory, enter these commands to build the NfcProvisioning APK:
    <pre>./gradlew init
./gradlew build</pre>
    The NfcProvisioning APK you need is now located in <code>./Application/build/outputs/apk</code>.
  </li>
  <li>Install the APK on your programmer device, which you can use to provision other devices.</li>
  <li>Create a text file called <code>nfcprovisioning.txt</code> and
    include the following information:
    <pre>android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME=com.afwsamples.testdpc
android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION=https://testdpc-latest-apk.appspot.com
android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM=gJD2YwtOiWJHkSMkkIfLRlj-quNqG1fb6v100QmzM9w=
# note: checksum must be URL-safe
android.app.extra.PROVISIONING_LOCALE=en_US
android.app.extra.PROVISIONING_TIME_ZONE=America/New_York</pre>
    <p>
      <strong>Note:</strong> If you’re developing for Android 5.0
      Lollipop, see the instructions in the
      <a href="https://github.com/googlesamples/android-testdpc"
      >TestDPC User Guide</a>.
    </p>
  </li>
  <li>Push that text file to your programmer device by entering:
    <pre>adb push &lt;path-to-nfcprovisioning.txt&gt; /sdcard/</pre>
  </li>
  <li>
    Ensure that the programmer device is connected to Wi-Fi on either
    an unsecured or WPA2 secured network.
    <p>
      The NFC Provisioning app will automatically pass those Wi-Fi
      credentials onto the target device.
    </p>
  </li>
  <li>Open the NFC Provisioning app and ensure <code>com.google.android.testdpc</code>
    is auto-populated.</li>
  <li>Bump the devices to transfer the data.</li>
  <li>Follow the onscreen instructions to set up your target device.</li>
  <li>Once you’ve completed provisioning the device owner, you can test your app on that device. You
    should specifically test how
    <a href="{@docRoot}work/app-restrictions.html">app restrictions</a>,
    <a href="{@docRoot}work/managed-profiles.html#sharing_files">URIs</a>, and
    <a href="{@docRoot}work/managed-profiles.html#prevent_failed_intents">intents</a>
    work on that device.</li>
</ol>

<h3>End-to-end testing</h3>

<p>
  After you’ve finished testing your app in the environments above,
  you’ll likely want to test your app in an end-to-end production
  environment. This process includes the steps a customer needs to
  take to deploy your app in their organization, including:
</p>

<ul>
  <li>App distribution through Play</li>
  <li>Server-side app restriction configuration</li>
  <li>Server-side profile policy control</li>
</ul>

<p>
  You need to access an EMM console to complete the end-to-end
  testing. The easiest way to get one is to request a testing console
  from your EMM. Once you have access, complete these tasks:
</p>

<ol>
  <li>Create a test version of your application with a
    <a href="http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename"
    >new ApplicationId</a>.</li>
  <li>Claim a <a href="https://support.google.com/work/android/answer/6174056"
    >managed Google domain</a> and bind it to your EMM. If you
    already have a testing domain that’s bound to an EMM, you may need
    to unbind it to test it with your preferred EMM. Please consult your
    EMM for the specific unbinding steps.</li>
  <li><a href="https://support.google.com/a/answer/2494992"
    >Publish your application to the private channel</a> for their
    managed Google domain.</li>
  <li>Use the EMM console and EMM application to:
    <ol>
      <li>Set up work devices.</li>
      <li>Distribute your application.</li>
      <li>Set application restrictions.</li>
      <li>Set device policies.</li>
    </ol>
</ol>

<p>
  This process will differ based on your EMM. Please consult your
  EMM’s documentation for further details. Congrats! You’ve completed
  these steps and verified that your app works well with Android for
  Work.
</p>

<p>
  <a href="https://connect.googleforwork.com/community/applicants/android/isv">
    <span class="dac-sprite dac-auto-chevron"></span>
    Learn about the Android for Work DevHub.
  </a>
</p>
