diff --git a/src/tech/framework/index.md b/src/tech/framework/index.md
new file mode 100644
index 0000000..8357891
--- /dev/null
+++ b/src/tech/framework/index.md
@@ -0,0 +1,188 @@
+<!--
+   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.
+-->
+
+# Android Framework Technical Information
+
+This document provides some general information about how the Android platform
+works that is useful for system integrators.
+
+# Shared libraries
+
+System integrators who are building their own system image can optionally
+add in their own runtime shared libraries that can be used by applications --
+both other built-in applications as well as regular third party applications.
+A shared library is identified with a unique name, following standard Java-style
+naming conventions.  Applications link to these libraries using the
+[uses-library](http://developer.android.com/guide/topics/manifest/uses-library-element.html)
+tag.
+
+There are two types of shared libraries you can create: traditional simple .jar
+libraries, and newer shared libraries that are bundled in a regular .apk.
+
+## Jar libraries
+
+A jar library is simply a loose jar file placed somewhere on the system image.  For
+the platform to recognize your library, you will also need to add a file in
+`/system/etc/permissions` that declares the shared library.  For example,
+you may have a `/system/etc/permissions/com.example.mylib.xml` file containing:
+
+    <?xml version="1.0" encoding="utf-8"?>
+    <permissions>
+        <library name="com.example.mylib"
+                file="/system/framework/com.example.mylib.jar" />
+    </permissions>
+
+The jar file itself would then be placed at `/system/framework/com.example.mylib.jar`.
+
+Note that jar-based shared libraries can not contain Android resources.  Any resources
+they need will generally need to come from the base platform resources, so if your
+library does have resources it is recommended that you use an apk library instead.
+These libraries also can not be updated outside of system updates that modify the
+system image.  If you can live with these limitations, they are the preferred approach,
+since they are the most efficient way to provide a shared library.
+
+## APK libraries
+
+Starting with Jelly Bean MR2, Android provides a new shared library feature based
+on standard APK files.  Implementing such a shared library is easy: include the
+[library](http://developer.android.com/guide/topics/manifest/library-element.html)
+tag in your apk that is pre-installed on the system image.  Android's package manager
+will automatically detect this shared library and make it available to other
+applications.
+
+There are some significant advantages to APK-based shared libraries, but they also
+have more overhead than jar libraries as well.  The additional features you get are:
+
++ These libraries can also run as a regular Android application.  For example, your
+apk may primarily consist of a Service that clients interact with.  You
+can define an aidl interface to that service in the apk, which the service implements
+and the library API uses for calling to the service.  Bundling this all together in
+one apk makes maintenance easier since you know that the internal aidl protocol will
+always be consistent between clients and service.
+
++ These libraries can contain Android resources.  Not only can you use them when the
+apk operates as a normal app, but you can also access them from clients using the
+library.  Note, however, that these resources are **not** linked or merged with the
+client application's resources -- to access them from within a client application,
+you will need to use
+[Context.createPackageContext](http://developer.android.com/reference/android/content/Context.html#createPackageContext(java.lang.String, int)).
+The client application can not directly access these resources, so you can not do
+things like publish XML attribute or drawable resources that the app could reference
+in its layout files.
+
++ You can deliver updates to these libraries outside of core system updates.  Since
+this is just a regular apk, you can update the library through the normal mechanism
+of installing updated applications.  When this is done, all client processes will be
+killed and use the new version of the library the next time they run.
+
+There are also some limitations and down-sides to apk libraries that you should be
+aware of:
+
++ Pre-installed applications that link against an apk library can not be installed
+as a pre-dexopt on the system image.  They must exist as their full apk, with the
+platform generating the dexopt file into /data at first boot.  This is required because
+the library can change on the application, requiring that it be re-linked to it,
+which would break the application if it is in its pre-dexopt form (which on the system
+image means the apk doesn't contain the .dex code in the apk, and it has the final
+.odex file next to it which is directly used when running).
+
++ When an update to the shared library apk is installed, all client applications
+must be re-dexopt'd in addition to the library apk itself.  If there are many
+client applications, this means that installing a library update can take a significant
+amount of time.  This will also result in any processes currently using the library
+being killed -- for example if a music app is currently playing music and links to
+the library, playback will be disrupted during the install.
+
++ Updates to system apks can not add new shared libraries to the apk.  You must declare
+the available libraries in the apk that is on the system image; if you want to add any
+libraries to an apk you must update it on the system image.  This is done to avoid getting
+into bad situations for example if the user uninstalls updates to the apk -- without such
+a restriction, a newer update an be uninstalled, removing the new shared library and breaking
+any applications depending on it that had been allowed to be installed when the library
+was there.
+
+## Library versioning
+
+Android does not provide any support for versioning shared libraries, besides the normal
+application versioning available if you are using an apk library.  The base implementation
+of your shared library should always provide the necessary APIs for applications to check
+its version.  A typical API for an apk shared library would look like:
+
+    public class SharedLibraryMain {
+        static String LIBRARY_PACKAGE = "com.google.android.test.shared_library";
+
+        /**
+         * Base version of the library.
+         */
+        public static int VERSION_BASE = 1;
+
+        /**
+         * The second version of the library.
+         */
+        public static int VERSION_SECOND = 2;
+
+        /**
+         * Return the version number of the currently installed library.
+         */
+        public static int getVersion(Context context) {
+            PackageInfo pi = null;
+            try {
+                pi = context.getPackageManager().getPackageInfo(LIBRARY_PACKAGE, 0);
+                return pi.versionCode;
+            } catch (PackageManager.NameNotFoundException e) {
+                throw new IllegalStateException("Can't find my package!", e);
+            }
+        }
+
+        /**
+         * Check that the library's version is at least the given minimum version,
+         * displaying a dialog to have the user install an update if that is not true.
+         * The dialog is displayed as a DialogFragment in your activity if a newer
+         * version is needed.  If a newer version is needed, false is returned.
+         */
+        public static boolean ensureVersion(final Activity activity, int minVersion) {
+            final FragmentManager fm = activity.getFragmentManager();
+            final String dialogTag = LIBRARY_PACKAGE + ":version";
+            Fragment curDialog = fm.findFragmentByTag(dialogTag);
+
+            if (getVersion(activity) >= minVersion) {
+                // Library version is sufficient.  Make sure any version dialog
+                // we had shown is removed before returning.
+                if (curDialog != null) {
+                    fm.beginTransaction().remove(curDialog).commitAllowingStateLoss();
+                }
+                return true;
+            }
+
+            // The current version of the library does not meet the required version.
+            // If we don't already have a version dialog displayed, display it now.
+            if (curDialog == null) {
+                curDialog = new VersionDialog();
+                fm.beginTransaction().add(curDialog, dialogTag).commitAllowingStateLoss();
+            }
+
+            // Tell the caller that the current version is not sufficient.
+            return false;
+        }
+    }
+
+If you are writing a simple jar library, you will need to put the current version as
+a contant in the code of the library intead of pulling it from the apk version.
+
+## Library samples
+
+Complete samples of an apk library and client can be found in the Android source tree
+at `frameworks/base/tests/SharedLibrary`.
diff --git a/src/tech/index.md b/src/tech/index.md
index ef6d019..8b6728b 100644
--- a/src/tech/index.md
+++ b/src/tech/index.md
@@ -74,6 +74,13 @@
 
 [&raquo; Accessory Protocol Information](/tech/accessories/index.html)
 
+## Android Framework Technical Information
+The Android application framework includes a number of features that are
+only available to systems integrators.  This document describes how to define
+and use runtime shared libraries when building a system.
+
+[&raquo; Android Framework Technical Information](/tech/framework/index.html)
+
 ## External Storage Technical Information
 Android supports devices with external storage, typically provided by physical
 media or an emulation layer.  This document is designed to help systems
diff --git a/src/tech/sidebar.md b/src/tech/sidebar.md
index 09f2f2f..e0ed375 100644
--- a/src/tech/sidebar.md
+++ b/src/tech/sidebar.md
@@ -5,4 +5,6 @@
 - [Security](/tech/security/index.html)
 - [Input](/tech/input/index.html)
 - [Data Usage](/tech/datausage/index.html)
-- [Accessories](/tech/accessories/index.html)
\ No newline at end of file
+- [Accessories](/tech/accessories/index.html)
+- [Framework](/tech/framework/index.html)
+- [Storage](/tech/storage/index.html)
