| page.title=Codelines, Branches, and Releases | |
| @jd:body | |
| <!-- | |
| Copyright 2013 The Android Open Source Project | |
| Licensed under the Apache License, Version 2.0 (the "License"); | |
| you may not use this file except in compliance with the License. | |
| You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| --> | |
| <div id="qv-wrapper"> | |
| <div id="qv"> | |
| <h2>In this document</h2> | |
| <ol id="auto-toc"> | |
| </ol> | |
| </div> | |
| </div> | |
| <p> | |
| The Android Open Source Project (AOSP) maintains a complete software stack to be ported by | |
| OEMs and other device implementors and run on their own hardware. To maintain the quality of | |
| Android, Google has contributed full-time engineers, product managers, user interface designers, | |
| quality assurance testers, and all the other roles required to bring modern devices to market. | |
| </p> | |
| <p> | |
| Accordingly, we maintain a number of "code lines" to clearly separate the current stable | |
| version of Android from unstable experimental work. We roll the open source administration | |
| and maintenance of the Android code lines into the larger product development cycle. | |
| </p> | |
| <p> | |
| The chart below depicts at a conceptual level how AOSP manages code and releases. We're | |
| referring to these as "code lines" instead of "branches" simply because at any given moment | |
| there may be more than one branch for a given "code line". For instance, when a | |
| release is cut, it may or may not become a new branch based on the needs of the moment. | |
| </p> | |
| <ol> | |
| <li> | |
| <p> | |
| At any given moment, there is a current latest release of the Android platform. This | |
| typically takes the form of a branch in the tree. | |
| </p> | |
| </li> | |
| <li> | |
| <p> | |
| Device builders and contributors work with the current latest release, fixing bugs, | |
| launching new devices, experimenting with new features, and so on. | |
| </p> | |
| </li> | |
| <li> | |
| <p> | |
| In parallel, Google works internally on the next version of the Android platform and | |
| framework according to the product's needs and goals. We develop the next | |
| version of Android by working with a device partner on a flagship device whose | |
| specifications are chosen to push Android in the direction we believe it should go. | |
| </p> | |
| </li> | |
| <li> | |
| <p> | |
| When the "n+1"th version is ready, it will be published to the public source tree and | |
| become the new latest release. | |
| </p> | |
| </li> | |
| </ol> | |
| <img src="{@docRoot}images/code-lines.png" alt="code-line diagram" id="figure1" > | |
| <p class="img-caption"> | |
| <strong>Figure 1.</strong> AOSP code and releases | |
| </p> | |
| <h2 id="terms-and-caveats"> | |
| Terms and Caveats | |
| </h2> | |
| <ul> | |
| <li> | |
| <p> | |
| A <em>release</em> corresponds to a formal version of the Android platform, such as 1.5, | |
| 2.1, and so on. Generally speaking, a release of the platform corresponds to the version in | |
| the <code>SdkVersion</code> field of AndroidManifest.xml files and defined within | |
| <code>frameworks/base/api</code> in the source tree. | |
| </p> | |
| </li> | |
| <li> | |
| <p> | |
| An <em>upstream</em> project is an open-source project from which the Android stack is | |
| pulling code. These include obvious projects such as the Linux kernel and WebKit. | |
| Over time we are migrating some of the semi-autonomous Android projects (such as ART, | |
| the Android SDK tools, Bionic, and so on) to work as "upstream" projects. Generally, | |
| these projects are developed entirely in the public tree. For some upstream projects, | |
| development is done by contributing directly to the upstream project itself. See <a href= | |
| "submit-patches.html#upstream-projects">Upstream Projects</a> for details. In both cases, | |
| snapshots will be periodically pulled into releases. | |
| </p> | |
| </li> | |
| <li> | |
| <p> | |
| At all times, a release code-line (which may actually consist of more than one actual | |
| branch in git) is considered the sole canonical source code for a given Android platform | |
| version. OEMs and other groups building devices should pull only from a release branch. | |
| </p> | |
| </li> | |
| <li> | |
| <p> | |
| "Experimental" code-lines are established to capture changes from the community so they can | |
| be iterated on with an eye toward stability. | |
| </p> | |
| </li> | |
| <li> | |
| <p> | |
| Changes that prove stable will eventually be pulled into a release branch. Note this | |
| applies only to bug fixes, application improvements, and other changes that do not affect the | |
| APIs of the platform. | |
| </p> | |
| </li> | |
| <li> | |
| <p> | |
| Changes will be pulled into release branches from upstream projects (including the | |
| Android "upstream" projects) as necessary. | |
| </p> | |
| </li> | |
| <li> | |
| <p> | |
| The "n+1"th version (that is, next major version of the framework and platform APIs) will | |
| be developed by Google internally. See <a href= | |
| "#about-private-code-lines">About Private Codelines</a> for details. | |
| </p> | |
| </li> | |
| <li> | |
| <p> | |
| Changes will be pulled from upstream, release, and experimental branches into Google's | |
| private branch as necessary. | |
| </p> | |
| </li> | |
| <li> | |
| <p> | |
| When the platform APIs for the next version have stabilized and been fully tested, Google | |
| will cut a release of the next platform version. (This specifically refers to a new | |
| <code>SdkVersion</code>.) This will also correspond to the internal code-line being made | |
| a public release branch, and the new current platform code-line. | |
| </p> | |
| </li> | |
| <li> | |
| <p> | |
| When a new platform version is cut, a corresponding experimental code-line will be | |
| created at the same time. | |
| </p> | |
| </li> | |
| </ul> | |
| <h2 id="about-private-code-lines"> | |
| About Private Codelines | |
| </h2> | |
| <p> | |
| The source management strategy above includes a code-line that Google will keep private. The | |
| reason for this is to focus attention on the current public version of Android. | |
| </p> | |
| <p> | |
| OEMs and other device builders naturally want to ship devices with the latest version of | |
| Android. Similarly, application developers don't want to deal with more platform | |
| versions than strictly necessary. Meanwhile, Google retains responsibility for the strategic | |
| direction of Android as a platform and a product. Our approach focuses on a small number of | |
| flagship devices to drive features while securing protections of Android-related intellectual | |
| property. | |
| </p> | |
| <p> | |
| As a result, Google frequently has possession of confidential information from third parties. | |
| And we must refrain from revealing sensitive features until we've secured the appropriate | |
| protections. In addition, there are real risks to the platform arising from having too many | |
| platform versions extant at once. For these reasons, we have structured the open-source | |
| project -- including third-party contributions -- to focus on the currently-public stable | |
| version of Android. "Deep development" on the next version of the platform will happen in | |
| private until it's ready to become an official release. | |
| </p> | |
| <p> | |
| We recognize many contributors will disagree with this approach. We respect others | |
| may have a different point of view; however, this is the approach we feel is best, and | |
| the one we've chosen to implement. | |
| </p> |