1## 3.6\. API Namespaces
2
3Android follows the package and class namespace conventions defined by the Java
4programming language.  To ensure compatibility with third-party applications,
5device implementers MUST NOT make any prohibited modifications (see below) to
6these package namespaces:
7
8*   `java.*`
9*   `javax.*`
10*   `sun.*`
11*   `android.*`
12*   `com.android.*`
13
14That is, they:
15
16*    [C-0-1] MUST NOT modify the publicly exposed APIs on the Android platform
17     by changing any method or class signatures, or by removing classes or class
18     fields.
19*    [C-0-2] MUST NOT add any publicly exposed elements (such as classes or
20     interfaces, or fields or methods to existing classes or interfaces) or Test
21     or System APIs to the APIs in the above namespaces. A “publicly exposed
22     element” is any construct that is not decorated with the “@hide” marker as
23     used in the upstream Android source code.
24
25Device implementers MAY modify the underlying implementation of the APIs, but
26such modifications:
27
28*    [C-0-3] MUST NOT impact the stated behavior and Java-language signature of
29     any publicly exposed APIs.
30*    [C-0-4] MUST NOT be advertised or otherwise exposed to developers.
31
32However, device implementers MAY add custom APIs outside the standard Android
33namespace, but the custom APIs:
34
35*    [C-0-5] MUST NOT be in a namespace owned by or referring to another
36     organization. For instance, device implementers MUST NOT add APIs to the
37     `com.google.*` or similar namespace: only Google may do so. Similarly,
38     Google MUST NOT add APIs to other companies' namespaces.
39*    [C-0-6] MUST be packaged in an Android shared library so that only apps
40     that explicitly use them (via the <uses-library> mechanism) are
41     affected by the increased memory usage of such APIs.
42
43If a device implementer proposes to improve one of the package namespaces above
44(such as by adding useful new functionality to an existing API, or adding a new
45API), the implementer SHOULD visit [source.android.com](
46http://source.android.com/) and begin the process for contributing changes and
47code, according to the information on that site.
48
49Note that the restrictions above correspond to standard conventions for naming
50APIs in the Java programming language; this section simply aims to reinforce
51those conventions and make them binding through inclusion in this Compatibility
52Definition.