developing embedded / mobile device software * Extensive experience throughout software stack, numerous operating systems * Android development since first AOSP * Android native dev / debug, before NDK * Lead architect and dev on 3 custom Android platforms * Experienced trainer
to take advantage of value-added features * Extends the core Android feature set * Features sometimes adopted by AOSP * Special shared library on OEM device * Integrates with ADT or Android Studio
OEMs in order to use Android name * Hardware and software requirements * Applies to specific Android versions * Continues to evolve * Section 3.6 prohibits altering the Android public APIs: Android follows the package and class namespace conventions defined by the Java programming language. To ensure compatibility with third-party applications, device implementers MUST NOT make any prohibited modifications (see below) to these package namespaces: java.* javax.* sun.* android.* com.android.* Prohibited modifications include: Device implementations MUST NOT modify the publicly exposed APIs on the Android platform by changing any method or class signatures, or by removing classes or class fields. Device implementers MAY modify the underlying implementation of the APIs, but such modifications MUST NOT impact the stated behavior and Java language signature of any publicly exposed APIs. Device implementers MUST NOT add any publicly exposed elements (such as classes or interfaces, or fields or methods to existing classes or interfaces) to the APIs above. * SDK add-on uses OEM namespace
OEM HTC: http://developer.htc.com Motorola: http://developer.motorola.com Samsung: http://developer.samsung.com * Not always easy to find! * Not always straightforward to setup! * Not all SDK add-ons created equal * Some provide emulators + APIs * Some provide just emulators
device/vendor tree * Be careful in the core framework! * Can include JNI component(s) * Source tree must contain: * Makefiles * Permission declaration * SDK Add-on details * The library source(s) (private)
your module (library) * PRODUCT_SDK_ADDON_COPY_FILES * A list of special files to be copied into the SDK itself as part of the add-on * PRODUCT_SDK_ADDON_COPY_MODULES * A mapping of the Java library FQN to device filesystem * PRODUCT_SDK_ADDON_STUB_DEFS * A file name which contains public APIs from the library * PRODUCT_SDK_ADDON_DOC_MODULES * The name of the module to auto-generate documents (same as ADDON_NAME) * Modify standard make variables * PRODUCT_PACKAGES * A list of libraries or apps to be included the device build * PRODUCT_COPY_FILES * A list of special files to be copied to the device filesystem
special files to define accessible APIs and the library * On device * Uses XML lpermissionsz file * Copied via PRODUCT_COPY_FILES * Sample contents: <?xml version="1.0" encoding="utf-8"?> <permissions> <library name="com.hiqes.android.utility_libraryl file="/system/framework/com.hiqes.android.utility_library.jar"/> </permissions> * On build machine * Declares all APIs (classes) publicly exposed * File specified in PRODUCT_SDK_ADDON_STUB_DEFS * Simple format +com.hiqes.android.utility_library.*
etc. * Included in the SDK add-on * Specified via PRODUCT_SDK_ADDON_COPY_FILES * Can included hardware.ini and skins * manifest.ini declares API level, version, description, etc. # Name and vendor of the add-on. This with the vendor and API uniquely id it. # Mandatory character set: a-z A-Z 0-9 _.- name=HiQES Utility Add-on vendor=HiQES LLC description=Utilities for the platform # version of the Android platform on which this add-on is built. api=15 # revision of the add-on. This must be a strict integer. revision=1 # list of libraries, separated by a semi-colon. libraries=com.hiqes.android.utility_library # details for each library. format is: # <library.name>=<name>.jar;<desc> com.hiqes.android.utility_library=utility_library.jar; HiQES utility library
rule to build: make PRODUCT-<name>-sdk_addon * The add-on is pre-zipped for you, located in: out/host/<build-platform>/sdk_addon * Contains a stub jar, emulator images, etc. from the build files
format * Use the <sdk:extra> tag instead of <sdk:addon> * Provide a <sdk:path> tag to specify where it goes locally <sdk:extra> <sdk:vendor-id>hiqes</sdk:vendor-id> <sdk:vendor-display>HiQES LLC</sdk:vendor-display> <sdk:name-display>HiQES Android Helper APIs</sdk:name-display> <sdk:revision>1</sdk:revision> <sdk:path>utilities</sdk:path> <sdk:description>HiQES Android Helper APIs Library</sdk:description> <sdk:desc-url>http://www.hiqes.com/</sdk:desc-url> <sdk:uses-license ref="hiqes-bin-license"/> <sdk:archives> <sdk:archive os="any" arch="anyl> <sdk:size>90033</sdk:size> <sdk:checksum type="sha1"> 7c8958d8c13c1837ca865b7e9c6ba13ab59abe20 </sdk:checksum> <sdk:url>sdk/hiqes_helper_apis-8_r01.zip</sdk:url> </sdk:archive> </sdk:archives> </sdk:extra>
static libs are manually copied into your project * Create a llibsz directory in your project * Copy the jar file into the llibsz directory * Update build path to include the llibsz directory * Sometimes extras can be demonstrated/used in-place * EX: Google webdriver, Intel HAXM installer * No built-in support for Eclipse Android Library projects
created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License. Android SDK Documentation http://developer.android.com/sdk/index.html http://developer.android.com/sdk/exploring.html Android Open Source Project (AOSP) http://source.android.com Github Repository of Samples https://github.com/hiq-larryschiefer/android-device-ballard.git https://github.com/hiq-larryschiefer/android-DemoPlatInfo.git HiQES Pre-built Android Add-ons (for Android SDK Manager) http://developer.hiqes.com/android/addon.xml Android Compatibility http://source.android.com/compatibility/index.html Presentation http://copy.com/g74rZllWktiu