service-element.jd revision 7f877069274c94b373478a8d0c969c9cfd93864f
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpage.title=<service>
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@jd:body
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dl class="xml">
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt>syntax:</dt>
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dd><pre class="stx">&lt;service android:<a href="#enabled">enabled</a>=["true" | "false"]
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         android:<a href="#exported">exported[</a>="true" | "false"]
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         android:<a href="#icon">icon</a>="<i>drawable resource</i>"
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         android:<a href="#label">label</a>="<i>string resource</i>"
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         android:<a href="#nm">name</a>="<i>string</i>"
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         android:<a href="#prmsn">permission</a>="<i>string</i>"
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         android:<a href="#proc">process</a>="<i>string</i>" &gt;
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    . . .
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project&lt;/service&gt;</pre></dd>
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt>contained in:</dt>
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dd><code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code></dd>
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt>can contain:</dt>
207f877069274c94b373478a8d0c969c9cfd93864fElliott Hughes<dd><code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">&lt;intent-filter&gt;</a></code>
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<br/><code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html">&lt;meta-data&gt;</a></code></dd>
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt>description:</dt>
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dd>Declares a service (a {@link android.app.Service} subclass) as one 
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectof the application's components.  Unlike activities, services lack a 
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvisual user interface.  They're used to implement long-running background 
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectoperations or a rich communications API that can be called by other 
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectapplications.
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectAll services must be represented by {@code &lt;service&gt;} elements in 
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectthe manifest file.  Any that are not declared there will not be seen 
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectby the system and will never be run.
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</p></dd>
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt>attributes:</dt>
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dd><dl class="attr">
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt><a name="enabled"></a>{@code android:enabled}</dt>
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dd>Whether or not the service can be instantiated by the system &mdash; 
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project"{@code true}" if it can be, and "{@code false}" if not.  The default value 
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectis "{@code true}".
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectThe <code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> element has its own 
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all 
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectapplication components, including services.  The 
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> and {@code &lt;service&gt;} 
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectattributes must both be "{@code true}" (as they both
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectare by default) for the service to be enabled.  If either is 
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project"{@code false}", the service is disabled; it cannot be instantiated.
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</p></dd>
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt><a name="exported"></a>{@code android:exported}</dt>
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dd>Whether or not components of other applications can invoke 
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectthe service or interact with it &mdash; "{@code true}" if they can, and 
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project"{@code false}" if not.  When the value is "{@code false}", only 
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectcomponents of the same application or applications 
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectwith the same user ID can start the service or bind to it.
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectThe default value depends on whether the service contains intent filters.  The 
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectabsence of any filters means that it can be invoked only by specifying 
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectits exact class name.  This implies that the service is intended only for 
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectapplication-internal use (since others would not know the class name).  So in 
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectthis case, the default value is "{@code false}".
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectOn the other hand, the presence of at least one filter implies that the service 
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectis intended for external use, so the default value is "{@code true}".
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</p>
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectThis attribute is not the only way to limit the exposure of a service to other
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectapplications.  You can also use a permission to limit the external entities that 
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectcan interact with the service (see the <code><a href="{@docRoot}guide/topics/manifest/service-element.html#prmsn">permission</a></code> 
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectattribute).
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</p></dd>
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt><a name="icon"></a>{@code android:icon}</dt>
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dd>An icon representing the service.  This attribute must be set as a 
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectreference to a drawable resource containing the image definition.  
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIf it is not set, the icon specified for the application 
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectas a whole is used instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> 
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectelement's <code><a href="{@docRoot}guide/topics/manifest/application-element.html#icon">icon</a></code> attribute).
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</p>
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectThe service's icon &mdash; whether set here or by the 
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> element &mdash; is also the 
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectdefault icon for all the service's intent filters (see the 
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">&lt;intent-filter&gt;</a></code> element's 
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html#icon">icon</a></code> attribute).
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</p></dd> 
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt><a name="label"></a>{@code android:label}</dt>
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dd>A name for the service that can be displayed to users.  
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIf this attribute is not set, the label set for the application as a whole is 
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectused instead (see the <code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> element's 
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/application-element.html#label">label</a></code> attribute).
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectThe service's label &mdash; whether set here or by the 
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> element &mdash; is also the 
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectdefault label for all the service's intent filters (see the 
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">&lt;intent-filter&gt;</a></code> element's 
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html#label">label</a></code> attribute). 
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</p>
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectThe label should be set as a reference to a string resource, so that
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectit can be localized like other strings in the user interface.  
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectHowever, as a convenience while you're developing the application, 
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectit can also be set as a raw string.
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</p></dd>
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt><a name="nm"></a>{@code android:name}</dt>
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dd>The name of the {@link android.app.Service} subclass that implements 
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectthe service.  This should be a fully qualified class name (such as, 
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project"{@code com.example.project.RoomService}").  However, as a shorthand, if 
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectthe first character of the name is a period (for example, "{@code .RoomService}"),
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectit is appended to the package name specified in the 
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a></code> element.  
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectThere is no default.  The name must be specified.
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</p></dd>
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt><a name="prmsn"></a>{@code android:permission}</dt>
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dd>The name of a permission that that an entity must have in order to 
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectlaunch the service or bind to it.  If a caller of 
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code>{@link android.content.Context#startService startService()}</code>,
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code>{@link android.content.Context#bindService bindService()}</code>, or
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code>{@link android.content.Context#stopService stopService()}</code>,
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecthas not been granted this permission, the method will not work and the
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIntent object will not be delivered to the service.
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIf this attribute is not set, the permission set by the 
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> element's
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/application-element.html#prmsn">permission</a></code> 
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectattribute applies to the service.  If neither attribute is set, the service is
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnot protected by a permission.
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</p>
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectFor more information on permissions, see the 
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<a href="{@docRoot}guide/topics/manifest/manifest-intro.html#sectperm">Permissions</a> 
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectsection in the introduction and a separate document, 
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a>.
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</p></dd>
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt><a name="proc"></a>{@code android:process}</dt>
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dd>The name of the process where the service is to run.  Normally, 
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectall components of an application run in the default process created for the 
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectapplication.  It has the same name as the application package.  The 
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> element's 
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<code><a href="{@docRoot}guide/topics/manifest/application-element.html#proc">process</a></code> 
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectattribute can set a different 
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectdefault for all components.  But component can override the default
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectwith its own {@code process} attribute, allowing you to spread your 
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectapplication across multiple processes.
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<p>
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIf the name assigned to this attribute begins with a colon (':'), a new 
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprocess, private to the application, is created when it's needed and 
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectthe service runs in that process.
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIf the process name begins with a lowercase character, the service will run 
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectin a global process of that name, provided that it has permission to do so.
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectThis allows components in different applications to share a process, reducing 
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectresource usage.
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</p></dd>
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</dl></dd>
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt>see also:</dt>
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dd><code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code>
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<br><code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code></dd>
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1769c3209db78bf171f5055baae376f7bdfdfba4a9fDirk Dougherty<!-- ##api level indication## -->
1779c3209db78bf171f5055baae376f7bdfdfba4a9fDirk Dougherty<dt>introduced in:</dt>
1789c3209db78bf171f5055baae376f7bdfdfba4a9fDirk Dougherty<dd>API Level 1</dd>
1799c3209db78bf171f5055baae376f7bdfdfba4a9fDirk Dougherty
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</dl>
181