| Platform Library Example |
| ~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| |
| This directory contains a full example of writing your own Android platform |
| shared library, without changing the Android framework. It also shows how to |
| write JNI code for incorporating native code into the library, and a client |
| application that uses the library. |
| |
| This example is ONLY for people working with the open source platform to |
| create a system image that will be delivered on a device which will include |
| a custom library as shown here. It can not be used to create a third party |
| shared library, which is not currently supported in Android. |
| |
| To declare your library to the framework, you must place a file with a .xml |
| extension in the /system/etc/permissions directory with the following contents: |
| |
| <?xml version="1.0" encoding="utf-8"?> |
| <permissions> |
| <library name="com.example.android.platform_library" |
| file="/system/framework/com.example.android.platform_library.jar"/> |
| </permissions> |
| |
| There are three major parts of this example, supplying three distinct |
| build targets and corresponding build outputs: |
| |
| |
| com.example.android.platform_library |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The top-level Android.mk defines the rules to build the shared library itself, |
| whose target is "com.example.android.platform_library". The code for this |
| library lives under java/. |
| |
| Note that the product for this library is a raw .jar file, NOT a .apk, which |
| means there is no manifest or resources associated with the library. |
| Unfortunately this means that if you need any resources for the library, such |
| as drawables or layout files, you will need to add these to the core framework |
| resources under frameworks/base/res. Please make sure when doing this that |
| you do not make any of these resources public, they should not become part of |
| the Android API. In the future we will allow shared libraries to have their |
| own resources. |
| |
| Other than that, the library is very straight-forward, and you can write |
| basically whatever code you want. You can also put code in other Java |
| namespaces -- the namespace given in the <library> tag above is just the |
| public unique name by which clients will link to your library, but once this |
| link happens all of the Java namespaces in that library will be available |
| to the client. |
| |
| |
| libplatform_library_jni |
| ~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| This is an optional example of how to write JNI code associated with a |
| shared library. This code lives under jni/. The jni/Android.mk file defines |
| the rules for building the final .so in which the code lives. This example |
| provides everything needed to hook up the native code with the Java library |
| and call through to it, plus a very simple JNI call. |
| |
| |
| PlatformLibraryClient |
| ~~~~~~~~~~~~~~~~~~~~~ |
| |
| This shows an example of how you can write client applications for your new |
| shared library. This code lives under client/. Note that the example is |
| simply a regular Android .apk, like all of the other .apks created by the |
| build system. The only two special things needed to use your library are: |
| |
| - A LOCAL_JAVA_LIBRARIES line in the Android.mk to have the build system link |
| against your shared library. |
| |
| - A <uses-library> line in the AndroidManifest.xml to have the runtime load |
| your library into the application. |