SlideShare a Scribd company logo
1 of 26
Download to read offline
Building and Distributing
SDK Add-ons
Dave Smith
NewCircle, Inc.
@devunwired
+DaveSmithDev
ā€“The Pointy Haired Boss
How do we connect developers with the
additional features and functionality we have
built into our Android-based device?
DISTRIBUTION VERSIONING
DOCUMENTATION VALIDATION
SDK Add-On
SDK Add-On
Library Package
Java stubs Java docs Meta
System Image Package
System Data Ramdisk Kernel Meta
SDK Repository
SDK Add-On
Library Package
Java stubs Java docs Meta
System Image Package
System Data Ramdisk Kernel Meta
Repo XML Meta
SDK Repository
SDK Add-On
Library Package
Java stubs Java docs Meta
System Image Package
System Data Ramdisk Kernel Meta
Repo XML Meta
SOLVED
Get The Tools!
$ repo init -u https://android.googlesource.com/platform/manifest 
-b android-5.0.1_r1 
-g all
$ repo sync
<manifest>ā€Ø
ā€¦ā€Ø
<project path="tools/adt/eclipse" name="platform/tools/adt/eclipse" groups="notdefault,tools" />ā€Ø
<project path="tools/adt/idea" name="platform/tools/adt/idea" groups="notdefault,tools" />ā€Ø
<project path="tools/base" name="platform/tools/base" groups="notdefault,tools" />ā€Ø
ā€¦ā€Ø
</manifest>
platform/manifest/default.xml
Android Shared Libraries
ā€¢ Exposed from the /system/framework for use by applications.
ā€¢ Applications reference via <uses-library> in the AndroidManifest.xml
ā€¢ Library is appended to application's classpath
ā€¢ No copy necessary in application's APK
ā€¢ Exposed via XML deļ¬nition in /system/etc/permissions
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<library name="com.example.library1"
file="/system/framework/com.example.library1.jar"/>
</permissions>
/system/etc/permissions/com.example.library1.xml
Exposing Your Libs
# Build the library
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := com.example.library1
LOCAL_SRC_FILES := $(call all-java-files-under,.)
include $(BUILD_JAVA_LIBRARY)
# Copy XML to /system/etc/permissions/
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := com.example.library1.xml
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)
Android.mk
Documentation
ā€¢ Javadoc parser wrapper
ā€¢ Generated HTML from class/method comments
ā€¢ Accessible to developers through the IDE
ā€¢ Don't include in the system image packages list.
# Build the documentation
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files) $(call all-
subdir-html-files)
LOCAL_MODULE:= com.example.library1_doc
LOCAL_DROIDDOC_OPTIONS := com.example.library1
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_DROIDDOC_USE_STANDARD_DOCLET := true
include $(BUILD_DROIDDOC)
Android.mk
Hook Into Thisā€¦
ā€¦Developers Understand This
Inform SDK Manager
#Identify the component
name=SDK Add-On
name-id=addon
#Identify yourself
vendor=NewCircle
vendor-id=newcircle
#Identify the base target
api=21
#What did you add?
libraries=com.example.library1;com.example.library2
com.example.library1=com.example.library1.jar;Example Library
com.example.library2=com.example.library2.jar;Example Service
manifest.ini
Stubs!
SDK Package System Image
Internal Classes
Public ClassesPublic Classes
Stubs!
+com.example.library1.*
-com.example.library1.internal.*
+com.example.library2.*
-com.example.library2.internal.*
addon_stub_defs.txt
SDK Package System Image
Internal Classes
Public Classes
Public Classes
System Image Metadata
Addon.VendorDisplay=NewCircle
Addon.VendorId=newcircle
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
Pkg.Desc=NewCircle SDK Platform ${PLATFORM_VERSION}
Pkg.Revision=1
SystemImage.Abi=${TARGET_CPU_ABI}
#Link this image to your add-on via the tag
SystemImage.TagDisplay=SDK Add-On
SystemImage.TagId=addon
source.prop_template
PRODUCT_PACKAGES += ā€¦
PRODUCT_SDK_ADDON_NAME := device_sdk_addon
PRODUCT_SDK_ADDON_COPY_FILES := manifest.ini:manifest.ini
# Use this to copy your library modules
PRODUCT_SDK_ADDON_COPY_MODULES := 
com.example.library1:libs/com.example.library1.jar 
com.example.library2:libs/com.example.library2.jar
PRODUCT_SDK_ADDON_STUB_DEFS := addon_stub_defs.txt
# New on Lollipop+, system images are built as a separate package
PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := source.prop_template
PRODUCT_SDK_ADDON_DOC_MODULES := com.example.library1_doc
# This add-on extends the default sdk product.
$(call inherit-product, $(SRC_TARGET_DIR)/product/sdk.mk)
PRODUCT_NAME := device_sdk_addon
PRODUCT_DEVICE := device
PRODUCT_MODEL := SDK Add-on For My Device
device_sdk_addon.mk
Add to Existing Targetā€¦
# Your existing product makefiles
PRODUCT_MAKEFILES := $(LOCAL_DIR)/full_device.mk
# Append your SDK add-on
PRODUCT_MAKEFILES += $(LOCAL_DIR)/device_sdk_addon.mk
AndroidProducts.mk
$ make PRODUCT-device_sdk_addon-sdk_addon
Repositories<sdk:sdk-sys-img xmlns:sdk="http://schemas.android.com/sdk/android/sys-img/3"ā€Ø
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">ā€Ø
<sdk:license type="text" id="addon-license"> ā€¦ </sdk:license>ā€Ø
<sdk:system-image>ā€Ø
<sdk:revision>1</sdk:revision>ā€Ø
<sdk:description>NewCircle SDK Platform 5.0.1</sdk:description>ā€Ø
<sdk:api-level>21</sdk:api-level>ā€Ø
<sdk:abi>x86</sdk:abi>ā€Ø
<sdk:archives>ā€Ø
<sdk:archive>ā€Ø
<sdk:size>187303276</sdk:size>ā€Ø
<sdk:checksum
type="sha1">33f9a1d41f16cb6f5b8099752131b8f01d5f53c3
</sdk:checksum>ā€Ø
<sdk:url>alpha_sdk_img_r1.zip</sdk:url>ā€Ø
</sdk:archive>ā€Ø
</sdk:archives>ā€Ø
<sdk:uses-license ref="addon-license"/>ā€Ø
<!-- Link this system image to our add-on library -->ā€Ø
<sdk:add-on>ā€Ø
<sdk:vendor-id>newcircle</sdk:vendor-id>ā€Ø
<sdk:vendor-display>NewCircle</sdk:vendor-display>ā€Ø
</sdk:add-on>ā€Ø
<sdk:tag-id>addon</sdk:tag-id>ā€Ø
</sdk:system-image>ā€Ø
</sdk:sdk-sys-img>
<?xml version="1.0" encoding="utf-8"?>ā€Ø
<sdk:sdk-addon xmlns:sdk="http://schemas.android.com/sdk/android/addon/7"ā€Ø
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">ā€Ø
<sdk:license type="text" id="addon-license"> ā€¦ </sdk:license>ā€Ø
<sdk:add-on>ā€Ø
<sdk:vendor-id>newcircle</sdk:vendor-id>ā€Ø
<sdk:vendor-display>NewCircle</sdk:vendor-display>ā€Ø
<sdk:name-id>addon</sdk:name-id>ā€Ø
<sdk:name-display>SDK Add-On</sdk:name-display>ā€Ø
<sdk:api-level>21</sdk:api-level>ā€Ø
<sdk:revision>1</sdk:revision>ā€Ø
<sdk:description>NewCircle SDK Add-On</sdk:description>ā€Ø
<sdk:desc-url>http://thenewcircle.com/</sdk:desc-url>ā€Ø
<sdk:uses-license ref="addon-license"/>ā€Ø
<sdk:archives>ā€Ø
<sdk:archive>ā€Ø
<sdk:size>104797</sdk:size>ā€Ø
<sdk:checksum
type="sha1">7418c038e40bdd82ebc8533183ab9404ad6860ec
</sdk:checksum>ā€Ø
<sdk:url>addon_r1.zip</sdk:url>ā€Ø
</sdk:archive>ā€Ø
</sdk:archives>ā€Ø
<!-- Note the extra libraries present in the add-on -->ā€Ø
<sdk:libs>ā€Ø
<sdk:lib>ā€Ø
<sdk:name>com.example.library1</sdk:name>ā€Ø
<sdk:description>Example Library</sdk:description>ā€Ø
</sdk:lib>ā€Ø
<sdk:lib>ā€Ø
<sdk:name>com.example.library2</sdk:name>ā€Ø
<sdk:description>Example Service</sdk:description>ā€Ø
</sdk:lib>ā€Ø
</sdk:libs>ā€Ø
</sdk:add-on>ā€Ø
</sdk:sdk-addon>
Tips & Tricks
ā€¢ Archive SHA: sha1sum archive.zip | cut -d " " -f 1
ā€¢ Archive Size: stat -c %s archive.zip
ā€¢ Repository Schema Files
ā€¢ $AOSP/prebuilts/devtools/repository/*.xsd
ā€¢ xmllint --schema sdk-addon-07.xsd repository.xml
ā€¢ Repository XML Generator Script
ā€¢ $AOSP/development/build/tools/mk_sdk_repo_xml.sh
ā€¢ Parses manifest.ini or source.properties for metadata
Learn More
Android Internals Public Class
Private On-Site Training Also Available
http://thenewcircle.com/training/android
Device Target + SDK Sample:
http://github.com/thenewcircle/alpha

More Related Content

Similar to Build and Distributing SDK Add-Ons

Application Deployment with Zend Server 5.5 beta
Application Deployment with Zend Server 5.5 betaApplication Deployment with Zend Server 5.5 beta
Application Deployment with Zend Server 5.5 beta
10n Software, LLC
Ā 
Spring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsugSpring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsug
Toshiaki Maki
Ā 

Similar to Build and Distributing SDK Add-Ons (20)

SFDX Presentation
SFDX PresentationSFDX Presentation
SFDX Presentation
Ā 
MuleSoft Surat Live Demonstration Virtual Meetup#3 - Building JWT OAuth 2.0 C...
MuleSoft Surat Live Demonstration Virtual Meetup#3 - Building JWT OAuth 2.0 C...MuleSoft Surat Live Demonstration Virtual Meetup#3 - Building JWT OAuth 2.0 C...
MuleSoft Surat Live Demonstration Virtual Meetup#3 - Building JWT OAuth 2.0 C...
Ā 
Apache DeltaSpike: The CDI Toolbox
Apache DeltaSpike: The CDI ToolboxApache DeltaSpike: The CDI Toolbox
Apache DeltaSpike: The CDI Toolbox
Ā 
Apache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolboxApache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolbox
Ā 
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
Ā 
Application Deployment with Zend Server 5.5 beta
Application Deployment with Zend Server 5.5 betaApplication Deployment with Zend Server 5.5 beta
Application Deployment with Zend Server 5.5 beta
Ā 
Operator SDK for K8s using Go
Operator SDK for K8s using GoOperator SDK for K8s using Go
Operator SDK for K8s using Go
Ā 
Let's build Developer Portal with Backstage
Let's build Developer Portal with BackstageLet's build Developer Portal with Backstage
Let's build Developer Portal with Backstage
Ā 
Intro to Eclipse Che, by Tyler Jewell
Intro to Eclipse Che, by Tyler JewellIntro to Eclipse Che, by Tyler Jewell
Intro to Eclipse Che, by Tyler Jewell
Ā 
Spring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsugSpring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsug
Ā 
Salesforce Developer eXperience (SFDX)
Salesforce Developer eXperience (SFDX)Salesforce Developer eXperience (SFDX)
Salesforce Developer eXperience (SFDX)
Ā 
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
Accelerate Your Automation Testing Effort using TestProject & Docker | Docker...
Ā 
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
Ā 
Red Hat OpenShift Operators - Operators ABC
Red Hat OpenShift Operators - Operators ABCRed Hat OpenShift Operators - Operators ABC
Red Hat OpenShift Operators - Operators ABC
Ā 
DevOps Interview Questions and Answers 2019 | DevOps Tutorial | Edureka
DevOps Interview Questions and Answers 2019 | DevOps Tutorial | EdurekaDevOps Interview Questions and Answers 2019 | DevOps Tutorial | Edureka
DevOps Interview Questions and Answers 2019 | DevOps Tutorial | Edureka
Ā 
Understanding and extending p2 for fun and profit
Understanding and extending p2 for fun and profitUnderstanding and extending p2 for fun and profit
Understanding and extending p2 for fun and profit
Ā 
Titanium Studio [Updated - 18/12/2011]
Titanium Studio [Updated - 18/12/2011]Titanium Studio [Updated - 18/12/2011]
Titanium Studio [Updated - 18/12/2011]
Ā 
Light-up-your-out-of-the-box LightSwitch Application
Light-up-your-out-of-the-box LightSwitch ApplicationLight-up-your-out-of-the-box LightSwitch Application
Light-up-your-out-of-the-box LightSwitch Application
Ā 
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
Ā 
GradleFX
GradleFXGradleFX
GradleFX
Ā 

Recently uploaded

Abortion Pill Prices Tembisa [(+27832195400*)] šŸ„ Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] šŸ„ Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] šŸ„ Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] šŸ„ Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
Ā 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
Ā 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
Ā 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
Ā 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
Ā 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
Ā 

Recently uploaded (20)

%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
Ā 
Abortion Pill Prices Tembisa [(+27832195400*)] šŸ„ Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] šŸ„ Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] šŸ„ Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] šŸ„ Women's Abortion Clinic in T...
Ā 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
Ā 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
Ā 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
Ā 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
Ā 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
Ā 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
Ā 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
Ā 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
Ā 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Ā 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Ā 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
Ā 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
Ā 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
Ā 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
Ā 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
Ā 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
Ā 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
Ā 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
Ā 

Build and Distributing SDK Add-Ons

  • 1. Building and Distributing SDK Add-ons Dave Smith NewCircle, Inc. @devunwired +DaveSmithDev
  • 2. ā€“The Pointy Haired Boss How do we connect developers with the additional features and functionality we have built into our Android-based device?
  • 3.
  • 6. SDK Add-On Library Package Java stubs Java docs Meta System Image Package System Data Ramdisk Kernel Meta
  • 7. SDK Repository SDK Add-On Library Package Java stubs Java docs Meta System Image Package System Data Ramdisk Kernel Meta Repo XML Meta
  • 8. SDK Repository SDK Add-On Library Package Java stubs Java docs Meta System Image Package System Data Ramdisk Kernel Meta Repo XML Meta SOLVED
  • 9. Get The Tools! $ repo init -u https://android.googlesource.com/platform/manifest -b android-5.0.1_r1 -g all $ repo sync <manifest>ā€Ø ā€¦ā€Ø <project path="tools/adt/eclipse" name="platform/tools/adt/eclipse" groups="notdefault,tools" />ā€Ø <project path="tools/adt/idea" name="platform/tools/adt/idea" groups="notdefault,tools" />ā€Ø <project path="tools/base" name="platform/tools/base" groups="notdefault,tools" />ā€Ø ā€¦ā€Ø </manifest> platform/manifest/default.xml
  • 10. Android Shared Libraries ā€¢ Exposed from the /system/framework for use by applications. ā€¢ Applications reference via <uses-library> in the AndroidManifest.xml ā€¢ Library is appended to application's classpath ā€¢ No copy necessary in application's APK ā€¢ Exposed via XML deļ¬nition in /system/etc/permissions <?xml version="1.0" encoding="utf-8"?> <permissions> <library name="com.example.library1" file="/system/framework/com.example.library1.jar"/> </permissions> /system/etc/permissions/com.example.library1.xml
  • 11. Exposing Your Libs # Build the library include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_MODULE := com.example.library1 LOCAL_SRC_FILES := $(call all-java-files-under,.) include $(BUILD_JAVA_LIBRARY) # Copy XML to /system/etc/permissions/ include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_MODULE := com.example.library1.xml LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions LOCAL_SRC_FILES := $(LOCAL_MODULE) include $(BUILD_PREBUILT) Android.mk
  • 12. Documentation ā€¢ Javadoc parser wrapper ā€¢ Generated HTML from class/method comments ā€¢ Accessible to developers through the IDE ā€¢ Don't include in the system image packages list. # Build the documentation include $(CLEAR_VARS) LOCAL_SRC_FILES := $(call all-subdir-java-files) $(call all- subdir-html-files) LOCAL_MODULE:= com.example.library1_doc LOCAL_DROIDDOC_OPTIONS := com.example.library1 LOCAL_MODULE_CLASS := JAVA_LIBRARIES LOCAL_DROIDDOC_USE_STANDARD_DOCLET := true include $(BUILD_DROIDDOC) Android.mk
  • 14. Inform SDK Manager #Identify the component name=SDK Add-On name-id=addon #Identify yourself vendor=NewCircle vendor-id=newcircle #Identify the base target api=21 #What did you add? libraries=com.example.library1;com.example.library2 com.example.library1=com.example.library1.jar;Example Library com.example.library2=com.example.library2.jar;Example Service manifest.ini
  • 15. Stubs! SDK Package System Image Internal Classes Public ClassesPublic Classes
  • 17. System Image Metadata Addon.VendorDisplay=NewCircle Addon.VendorId=newcircle AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION} Pkg.Desc=NewCircle SDK Platform ${PLATFORM_VERSION} Pkg.Revision=1 SystemImage.Abi=${TARGET_CPU_ABI} #Link this image to your add-on via the tag SystemImage.TagDisplay=SDK Add-On SystemImage.TagId=addon source.prop_template
  • 18. PRODUCT_PACKAGES += ā€¦ PRODUCT_SDK_ADDON_NAME := device_sdk_addon PRODUCT_SDK_ADDON_COPY_FILES := manifest.ini:manifest.ini # Use this to copy your library modules PRODUCT_SDK_ADDON_COPY_MODULES := com.example.library1:libs/com.example.library1.jar com.example.library2:libs/com.example.library2.jar PRODUCT_SDK_ADDON_STUB_DEFS := addon_stub_defs.txt # New on Lollipop+, system images are built as a separate package PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := source.prop_template PRODUCT_SDK_ADDON_DOC_MODULES := com.example.library1_doc # This add-on extends the default sdk product. $(call inherit-product, $(SRC_TARGET_DIR)/product/sdk.mk) PRODUCT_NAME := device_sdk_addon PRODUCT_DEVICE := device PRODUCT_MODEL := SDK Add-on For My Device device_sdk_addon.mk
  • 19. Add to Existing Targetā€¦ # Your existing product makefiles PRODUCT_MAKEFILES := $(LOCAL_DIR)/full_device.mk # Append your SDK add-on PRODUCT_MAKEFILES += $(LOCAL_DIR)/device_sdk_addon.mk AndroidProducts.mk
  • 21.
  • 22.
  • 23. Repositories<sdk:sdk-sys-img xmlns:sdk="http://schemas.android.com/sdk/android/sys-img/3"ā€Ø xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">ā€Ø <sdk:license type="text" id="addon-license"> ā€¦ </sdk:license>ā€Ø <sdk:system-image>ā€Ø <sdk:revision>1</sdk:revision>ā€Ø <sdk:description>NewCircle SDK Platform 5.0.1</sdk:description>ā€Ø <sdk:api-level>21</sdk:api-level>ā€Ø <sdk:abi>x86</sdk:abi>ā€Ø <sdk:archives>ā€Ø <sdk:archive>ā€Ø <sdk:size>187303276</sdk:size>ā€Ø <sdk:checksum type="sha1">33f9a1d41f16cb6f5b8099752131b8f01d5f53c3 </sdk:checksum>ā€Ø <sdk:url>alpha_sdk_img_r1.zip</sdk:url>ā€Ø </sdk:archive>ā€Ø </sdk:archives>ā€Ø <sdk:uses-license ref="addon-license"/>ā€Ø <!-- Link this system image to our add-on library -->ā€Ø <sdk:add-on>ā€Ø <sdk:vendor-id>newcircle</sdk:vendor-id>ā€Ø <sdk:vendor-display>NewCircle</sdk:vendor-display>ā€Ø </sdk:add-on>ā€Ø <sdk:tag-id>addon</sdk:tag-id>ā€Ø </sdk:system-image>ā€Ø </sdk:sdk-sys-img>
  • 24. <?xml version="1.0" encoding="utf-8"?>ā€Ø <sdk:sdk-addon xmlns:sdk="http://schemas.android.com/sdk/android/addon/7"ā€Ø xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">ā€Ø <sdk:license type="text" id="addon-license"> ā€¦ </sdk:license>ā€Ø <sdk:add-on>ā€Ø <sdk:vendor-id>newcircle</sdk:vendor-id>ā€Ø <sdk:vendor-display>NewCircle</sdk:vendor-display>ā€Ø <sdk:name-id>addon</sdk:name-id>ā€Ø <sdk:name-display>SDK Add-On</sdk:name-display>ā€Ø <sdk:api-level>21</sdk:api-level>ā€Ø <sdk:revision>1</sdk:revision>ā€Ø <sdk:description>NewCircle SDK Add-On</sdk:description>ā€Ø <sdk:desc-url>http://thenewcircle.com/</sdk:desc-url>ā€Ø <sdk:uses-license ref="addon-license"/>ā€Ø <sdk:archives>ā€Ø <sdk:archive>ā€Ø <sdk:size>104797</sdk:size>ā€Ø <sdk:checksum type="sha1">7418c038e40bdd82ebc8533183ab9404ad6860ec </sdk:checksum>ā€Ø <sdk:url>addon_r1.zip</sdk:url>ā€Ø </sdk:archive>ā€Ø </sdk:archives>ā€Ø <!-- Note the extra libraries present in the add-on -->ā€Ø <sdk:libs>ā€Ø <sdk:lib>ā€Ø <sdk:name>com.example.library1</sdk:name>ā€Ø <sdk:description>Example Library</sdk:description>ā€Ø </sdk:lib>ā€Ø <sdk:lib>ā€Ø <sdk:name>com.example.library2</sdk:name>ā€Ø <sdk:description>Example Service</sdk:description>ā€Ø </sdk:lib>ā€Ø </sdk:libs>ā€Ø </sdk:add-on>ā€Ø </sdk:sdk-addon>
  • 25. Tips & Tricks ā€¢ Archive SHA: sha1sum archive.zip | cut -d " " -f 1 ā€¢ Archive Size: stat -c %s archive.zip ā€¢ Repository Schema Files ā€¢ $AOSP/prebuilts/devtools/repository/*.xsd ā€¢ xmllint --schema sdk-addon-07.xsd repository.xml ā€¢ Repository XML Generator Script ā€¢ $AOSP/development/build/tools/mk_sdk_repo_xml.sh ā€¢ Parses manifest.ini or source.properties for metadata
  • 26. Learn More Android Internals Public Class Private On-Site Training Also Available http://thenewcircle.com/training/android Device Target + SDK Sample: http://github.com/thenewcircle/alpha