SlideShare une entreprise Scribd logo
1  sur  92
Building Apps for Multiple Devices Terry Ryan Developer Evangelist http://terrenceryan.com @tpryan
Let me start a process here
Poll How many have done native mobile? How many have done mobile AIR? How many have done mobile AIR with Flex? How many have done it for multiple platforms?
You can do cross platform mobile development with Adobe AIR!!!
Wooooooh!!!!!!
We a wrote very good demo project. Actual mileage may vary.
Noooooo!!!!!!
Please, I beg you, button, stop appearing off-screen
My goal: give you guys an idea of what you need to do to actually produce multi-screen apps
Using one code base
Should you do this?
Content Design Develop Publish Flex with a little ActionScript only
Designing for Multiple Devices
Resolution and DPI
DPI FUBAR
So how do we deal with this?
Application DPI This is the DPI of the device you are targeting in development Allows for resizing to denser devices
Application DPI 3 Levels 160 240 320
Media Queries CSS media queries allow you to target different DPI screens naturally
Media Queries @media all and (application-dpi: 160) { s|Button 	{ color: red; 	} } @mediaalland (application-dpi: 240) { s|Button 	{ color: green; 	} }
Media Query Options ApplicationDPI OS
Personal Thought on OS Media Queries Don’t do itif you want to keep a unified code base Handle Density and screen size, but not OS
Demo Application DPI  and Media Queries in Flex
Deeper Dive Narciso Jaramillo Deep Dive Into Multi Density & Multi Platform Application Development
ActionScript Only Roll your own looking at: stage.fullScreenWidth In development I’ve had issues with stage.stageWidth Capabilities.screenDPI
Demo Application Sizing in ActionScript
Flash Builder Simulating Flex In Design View At compile ActionScript At compile
!=
Developing for Multiple Devices
Don’t tweak for devices in code.
If you can avoid it.
But what about differences between UI controls IOS vs Android vsPlayBook
It depends
Configuring for Multiple Devices
Application Descriptor You know that XML file Special settings for Android  IOS
BlackBerry Descriptor BlackBerry Uses Application Descriptor and another file: blackberry-tablet.xml
BlackBerry Descriptor	 Allows you to make transparent apps and change preview icons. Transparent apps aren’t supported on other platforms
Android Settings Permissions Custom URI Compatibility Filtering Install Location
Android Permissions ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION ACCESS_NETWORK_STATE  ACCESS_WIFI_STATE  CAMERA  INTERNET  READ_PHONE_STATE RECORD_AUDIO WAKE_LOCK  WRITE_EXTERNAL_STORAGE
Android Custom URI Allow web pages or other android apps to launch your app from a url when the application is installed.
Android Custom URI <activity>      <intent-filter>          <action android:name="android.intent.action.MAIN"/>          <category android:name="android.intent.category.LAUNCHER"/>      </intent-filter>      <intent-filter>          <action android:name="android.intent.action.VIEW"/>          <category android:name="android.intent.category.BROWSABLE"/>          <category android:name="android.intent.category.DEFAULT"/>          <data android:scheme="myURI"/>      </intent-filter>  </activity>  URL would be: myURI://com.myApp.uniquename Where com.myApp.uniquename is the app id from your descriptor
Android compatibility filtering Permissions assume all or nothing So if a feature is optional, you have to set it such or it won’t show up in store Important for Camera, Audio
Camera Filtering <uses-permission android:name="android.permission.CAMERA" />  <uses-feature android:name="android.hardware.camera" android:required="false"/>  <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>  <uses-feature android:name="android.hardware.camera.flash" android:required="false"/>
Android Instal Location  <android>      <manifestAdditions>          <![CDATA[              <manifest android:installLocation="preferExternal"/>          ]]>      </manifestAdditions>  </android>
IOS Settings Models Resolution Custom URI Compatibility Filtering Exit or Pause
Models <key>UIDeviceFamily</key> <array> <string>1</string><!-- iPod/iPhone --> <string>2</string><!-- iPad --> </array>
Resolution <requestedDisplayResolution>high</requestedDisplayResolution> High will allow you to draw single pixels on a high resolution screen, otherwise 1 pixel = 4 pixels
Custom URI <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>myURI</string> </array> <key>CFBundleURLName</key> <string>com.myApp.uniquename</string> </dict> </array> URL would be: myURI://com.myApp.uniquename If you set this to be the same as your application id you get compatibility with Android apps.
IOS compatibility filtering Like Android it’s about discoverability and installation, not usage.
Compatibility Filtering <key>UIRequiredDeviceCapabilities</key> <array> <string>microphone</string> <string>still-camera</string> </array>
Exit or Pause <key>UIApplicationExitsOnSuspend</key> <string>YES</string>
Icon sizes
AIR Versions There are some issues with AIR version and target BlackBerry - 2.5 Android - 2.6 IOS -2.6, or 2.0 or 2.7
But that’s hard set <applicationxmlns="http://ns.adobe.com/air/application/2.6">
Multiple Descriptors Solution:
Publishing for Multiple Devices
Flash Builder Publish to all platforms at the same time
Compiling and Packaging Flash Builder uses features that are accessible  through command line tools  Often using those tools Therefore before it can be a feature in Flash Builder, has to be available in command line
Flash Builder vs Command line Flash Builder will often lack ui that the command line exposes So it behooves you to learn command line
Case in point Publishing AIR files compatible with Amazon Store
Command line Compiling OS Scripts ANT (what I use) Maven
Tools ANT MXMLC AIR Packagers ADT blackberry-airpackager pfi (no longer needed)
Process Compile SWF Gather External Resources Package for target device
Compiling Requires MXMLC In ANT requires MXMLC Task Despite the name, works for non MXML apps.  Doesn’t add the Flex Framework or anything either.
Compiling via ANT <mxmlcfile="${projectFile}"output="${device.swf}"> 	<load-configfilename="${FLEX_HOME}/frameworks/airmobile-config.xml"/> 	<source-pathpath-element="${FLEX_HOME}/frameworks"/> 	<static-link-runtime-shared-libraries/> 	<compiler.library-pathdir="${FLEX_HOME}/frameworks"append="true"> <includename="libs/*"/> </compiler.library-path> </mxmlc>
Compiling via ANT <load-configfilename="${FLEX_HOME}/frameworks/airmobile-config.xml"/> On Desktops <load-configfilename="${FLEX_HOME}/frameworks/air-config.xml"/>
Demo Command Line Compiling  with ANT
Gathering Files SWF Any assets used in application Application descriptor file
Application Descriptor Most have a line:  <content>[This value will be overwritten by Flash Builder in the output app.xml]</content> It won’t so you have to.
Packaging for Android <execexecutable="${ADT}"dir="${android.collect}"> <argvalue="-package"/> <argline="-target apk"/> <argline="-storetype pkcs12"/> <argline="-keystore ${cert}"/> <argline="-storepass ${cert.password}"/> <argvalue="${app.name}"/> <argvalue="${app.name}-app.xml"/> <argvalue="${app.name}.swf"/> <argvalue="assets"/> </exec>
Packaging for Android <argline="-target apk"/> Options include  ,[object Object]
apk-debug
apk-emulator,[object Object]
Packaging for IOS <argline="-target ipa-ad-hoc "/> Options include  ,[object Object]
ipa-debug
ipa-app-store
ipa-ad-hoc,[object Object]
Tons of options
Packaging for BlackBerry -package               - command to package    -target (bar|bar-debug) - target format bar or bar-debug    -connect <host>        - host ip address for debugging    -no-validation         - turn off air and bar validation    -list-files            - list all files in the resulting package    -env <var>=<value>     - set an extra environment variable for the runtime    -barVersion <version>  - run in compatibility mode (set older version to be compatible with)    -publisher             - set the publisher (author) name    -buildId               - set the build id (4th segment of the version)    -devMode               - package in development mode <signing options> (part of packaging options):    -signDev              - command to sign with developer's certificate    -keystore <store>      - keystore file    -storepass <pass>      - store password for certificate store    -signRim               - command to sign by rim (requires internet connection)    -cskpass <pass>        - password to encrypt long-lived keys <deployment_options>:    -installApp            - command to install the package    -launchApp             - command to launch the app    -device <deviceId>     - set host name or IP address of the target    -password <password>   - device password
Packaging for BlackBerry Debugging Installation and launching Signing
Demo Command Line Packaging with ANT
Packaging for Amazon <execexecutable="${ADT}"dir="${android.collect}"> <argvalue="-package"/> <argline="-target apk"/> 	<argline="-airDownloadURL ${amazon.url}"/> <argline="-storetype pkcs12"/> <argline="-keystore ${cert}"/> <argline="-storepass ${cert.password}"/> <argvalue="${app.name}"/> <argvalue="${app.name}-app.xml"/> <argvalue="${app.name}.swf"/> <argvalue="assets"/> </exec>
So should you do this?
My Weasely answer:It Depends
Can you wait for the next version of AIR?
Is your app your competitive advantage, or a cost center?

Contenu connexe

Tendances

Cross-Platform Development using Angulr JS in Visual Studio
Cross-Platform Development using Angulr JS in Visual StudioCross-Platform Development using Angulr JS in Visual Studio
Cross-Platform Development using Angulr JS in Visual Studio
Mizanur Sarker
 
Mobile App Development
Mobile App DevelopmentMobile App Development
Mobile App Development
Chris Morrell
 
Flash platform fitc
Flash platform fitcFlash platform fitc
Flash platform fitc
Mark Doherty
 
An overview of mobile html + java script frameworks
An overview of mobile html + java script frameworksAn overview of mobile html + java script frameworks
An overview of mobile html + java script frameworks
Sasha dos Santos
 

Tendances (20)

Your First Adobe Flash Application for Android
Your First Adobe Flash Application for AndroidYour First Adobe Flash Application for Android
Your First Adobe Flash Application for Android
 
Developing AIR for Android with Flash Professional CS5
Developing AIR for Android with Flash Professional CS5Developing AIR for Android with Flash Professional CS5
Developing AIR for Android with Flash Professional CS5
 
Android Development with Flash Platform
Android Development with Flash PlatformAndroid Development with Flash Platform
Android Development with Flash Platform
 
Cross-Platform Development using Angulr JS in Visual Studio
Cross-Platform Development using Angulr JS in Visual StudioCross-Platform Development using Angulr JS in Visual Studio
Cross-Platform Development using Angulr JS in Visual Studio
 
Adobe Flash and Device Central
Adobe Flash and Device CentralAdobe Flash and Device Central
Adobe Flash and Device Central
 
Flash for Blackberry, iPhone and Android
Flash for Blackberry, iPhone and AndroidFlash for Blackberry, iPhone and Android
Flash for Blackberry, iPhone and Android
 
Developing for Xoom with Flash and AIR
Developing for Xoom with Flash and AIRDeveloping for Xoom with Flash and AIR
Developing for Xoom with Flash and AIR
 
StackLabs-DataDriven Labs - iPhone App Development Training in Mohali
StackLabs-DataDriven Labs - iPhone App Development  Training in MohaliStackLabs-DataDriven Labs - iPhone App Development  Training in Mohali
StackLabs-DataDriven Labs - iPhone App Development Training in Mohali
 
Mobile App Development
Mobile App DevelopmentMobile App Development
Mobile App Development
 
iPhone Development Overview
iPhone Development OverviewiPhone Development Overview
iPhone Development Overview
 
Intro to Mobile Development for Web iOS and Android
Intro to Mobile Development for Web iOS and AndroidIntro to Mobile Development for Web iOS and Android
Intro to Mobile Development for Web iOS and Android
 
Programing for the iPhone
Programing for the iPhonePrograming for the iPhone
Programing for the iPhone
 
Smartface ile Crossplatform Uygulama Geliştirme
Smartface ile Crossplatform Uygulama GeliştirmeSmartface ile Crossplatform Uygulama Geliştirme
Smartface ile Crossplatform Uygulama Geliştirme
 
SmartPhone Design and Delivery
SmartPhone Design and DeliverySmartPhone Design and Delivery
SmartPhone Design and Delivery
 
Hybrid mobile app with Kendo UI Mobile
Hybrid mobile app with Kendo UI MobileHybrid mobile app with Kendo UI Mobile
Hybrid mobile app with Kendo UI Mobile
 
Flash platform fitc
Flash platform fitcFlash platform fitc
Flash platform fitc
 
Intro to PhoneGap and PhoneGap Build
Intro to PhoneGap and PhoneGap BuildIntro to PhoneGap and PhoneGap Build
Intro to PhoneGap and PhoneGap Build
 
Beginning Android Flash Development
Beginning Android Flash DevelopmentBeginning Android Flash Development
Beginning Android Flash Development
 
An overview of mobile html + java script frameworks
An overview of mobile html + java script frameworksAn overview of mobile html + java script frameworks
An overview of mobile html + java script frameworks
 
Appcelerator Titanium - An Introduction to the Titanium Ecosystem
Appcelerator Titanium - An Introduction to the Titanium EcosystemAppcelerator Titanium - An Introduction to the Titanium Ecosystem
Appcelerator Titanium - An Introduction to the Titanium Ecosystem
 

Similaire à Building apps for multiple devices

PreDevCamp San Diego slides
PreDevCamp San Diego slidesPreDevCamp San Diego slides
PreDevCamp San Diego slides
David Horn
 

Similaire à Building apps for multiple devices (20)

Developing in android
Developing in androidDeveloping in android
Developing in android
 
Geekcamp Android
Geekcamp AndroidGeekcamp Android
Geekcamp Android
 
Silver Light By Nyros Developer
Silver Light By Nyros DeveloperSilver Light By Nyros Developer
Silver Light By Nyros Developer
 
BluePrint Mobile Framework
BluePrint Mobile FrameworkBluePrint Mobile Framework
BluePrint Mobile Framework
 
Yahoo Mobile Widgets
Yahoo Mobile WidgetsYahoo Mobile Widgets
Yahoo Mobile Widgets
 
21 android2 updated
21 android2 updated21 android2 updated
21 android2 updated
 
Migration testing framework
Migration testing frameworkMigration testing framework
Migration testing framework
 
Enterprise Google Gadgets Integrated with Alfresco - Open Source ECM
Enterprise Google Gadgets Integrated with Alfresco - Open Source ECM Enterprise Google Gadgets Integrated with Alfresco - Open Source ECM
Enterprise Google Gadgets Integrated with Alfresco - Open Source ECM
 
Ui patterns
Ui patternsUi patterns
Ui patterns
 
Beautifully Usable, Multiple Screens Too
Beautifully Usable, Multiple Screens TooBeautifully Usable, Multiple Screens Too
Beautifully Usable, Multiple Screens Too
 
Creating Yahoo Mobile Widgets
Creating Yahoo Mobile WidgetsCreating Yahoo Mobile Widgets
Creating Yahoo Mobile Widgets
 
10 Things You're Not Doing [IBM Lotus Notes Domino Application Development]
10 Things You're Not Doing [IBM Lotus Notes Domino Application Development]10 Things You're Not Doing [IBM Lotus Notes Domino Application Development]
10 Things You're Not Doing [IBM Lotus Notes Domino Application Development]
 
Advanced Android gReporter
Advanced Android gReporterAdvanced Android gReporter
Advanced Android gReporter
 
Migrating JavaME Apps to Android
Migrating JavaME Apps to AndroidMigrating JavaME Apps to Android
Migrating JavaME Apps to Android
 
Client-side JavaScript Vulnerabilities
Client-side JavaScript VulnerabilitiesClient-side JavaScript Vulnerabilities
Client-side JavaScript Vulnerabilities
 
Android Intro
Android IntroAndroid Intro
Android Intro
 
Use Web Skills To Build Mobile Apps
Use Web Skills To Build Mobile AppsUse Web Skills To Build Mobile Apps
Use Web Skills To Build Mobile Apps
 
Enterprise AIR Development for JavaScript Developers
Enterprise AIR Development for JavaScript DevelopersEnterprise AIR Development for JavaScript Developers
Enterprise AIR Development for JavaScript Developers
 
IBM Lotus Notes Domino XPages and XPages for Mobile
IBM Lotus Notes Domino XPages and XPages for MobileIBM Lotus Notes Domino XPages and XPages for Mobile
IBM Lotus Notes Domino XPages and XPages for Mobile
 
PreDevCamp San Diego slides
PreDevCamp San Diego slidesPreDevCamp San Diego slides
PreDevCamp San Diego slides
 

Plus de Terry Ryan

Making the Mobile Web Work
Making the Mobile Web WorkMaking the Mobile Web Work
Making the Mobile Web Work
Terry Ryan
 
Introduction to HTML5
Introduction to HTML5Introduction to HTML5
Introduction to HTML5
Terry Ryan
 
cf.Objective ANZ Keynote
cf.Objective ANZ Keynotecf.Objective ANZ Keynote
cf.Objective ANZ Keynote
Terry Ryan
 
HTML5 Semantic Web
HTML5 Semantic WebHTML5 Semantic Web
HTML5 Semantic Web
Terry Ryan
 

Plus de Terry Ryan (20)

Making the Mobile Web Work
Making the Mobile Web WorkMaking the Mobile Web Work
Making the Mobile Web Work
 
The Users are Restless
The Users are RestlessThe Users are Restless
The Users are Restless
 
HTML Design for Devices
HTML Design for DevicesHTML Design for Devices
HTML Design for Devices
 
The Future of HTML5 Motion Design
 The Future of HTML5 Motion Design The Future of HTML5 Motion Design
The Future of HTML5 Motion Design
 
Adobe and Modern Web Development
Adobe and Modern Web DevelopmentAdobe and Modern Web Development
Adobe and Modern Web Development
 
Semantic HTML5
Semantic HTML5Semantic HTML5
Semantic HTML5
 
The Future of HTML Motion Design
The Future of HTML Motion DesignThe Future of HTML Motion Design
The Future of HTML Motion Design
 
Skip the IDE with PhoneGap Build
Skip the IDE with PhoneGap BuildSkip the IDE with PhoneGap Build
Skip the IDE with PhoneGap Build
 
D2WC Keynote
D2WC KeynoteD2WC Keynote
D2WC Keynote
 
WebDU Keynote
WebDU KeynoteWebDU Keynote
WebDU Keynote
 
Beautiful PhoneGap Apps
Beautiful PhoneGap AppsBeautiful PhoneGap Apps
Beautiful PhoneGap Apps
 
Introduction to HTML5
Introduction to HTML5Introduction to HTML5
Introduction to HTML5
 
The Future of HTML5 Motion Design
The Future of HTML5 Motion DesignThe Future of HTML5 Motion Design
The Future of HTML5 Motion Design
 
Adobe & HTML5
Adobe & HTML5Adobe & HTML5
Adobe & HTML5
 
Mobile Apps with PhoneGap and jQuery Mobile
Mobile Apps with PhoneGap and jQuery MobileMobile Apps with PhoneGap and jQuery Mobile
Mobile Apps with PhoneGap and jQuery Mobile
 
Design for Developers
Design for DevelopersDesign for Developers
Design for Developers
 
cf.Objective ANZ Keynote
cf.Objective ANZ Keynotecf.Objective ANZ Keynote
cf.Objective ANZ Keynote
 
Flex Mobile Skinning Workshop
Flex Mobile Skinning WorkshopFlex Mobile Skinning Workshop
Flex Mobile Skinning Workshop
 
HTML5 Semantic Web
HTML5 Semantic WebHTML5 Semantic Web
HTML5 Semantic Web
 
Intro to Coldfusion
Intro to ColdfusionIntro to Coldfusion
Intro to Coldfusion
 

Dernier

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Dernier (20)

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 

Building apps for multiple devices

  • 1. Building Apps for Multiple Devices Terry Ryan Developer Evangelist http://terrenceryan.com @tpryan
  • 2. Let me start a process here
  • 3. Poll How many have done native mobile? How many have done mobile AIR? How many have done mobile AIR with Flex? How many have done it for multiple platforms?
  • 4. You can do cross platform mobile development with Adobe AIR!!!
  • 6. We a wrote very good demo project. Actual mileage may vary.
  • 8. Please, I beg you, button, stop appearing off-screen
  • 9. My goal: give you guys an idea of what you need to do to actually produce multi-screen apps
  • 11. Should you do this?
  • 12. Content Design Develop Publish Flex with a little ActionScript only
  • 15.
  • 16.
  • 17.
  • 18.
  • 20. So how do we deal with this?
  • 21. Application DPI This is the DPI of the device you are targeting in development Allows for resizing to denser devices
  • 22. Application DPI 3 Levels 160 240 320
  • 23. Media Queries CSS media queries allow you to target different DPI screens naturally
  • 24. Media Queries @media all and (application-dpi: 160) { s|Button { color: red; } } @mediaalland (application-dpi: 240) { s|Button { color: green; } }
  • 25. Media Query Options ApplicationDPI OS
  • 26. Personal Thought on OS Media Queries Don’t do itif you want to keep a unified code base Handle Density and screen size, but not OS
  • 27. Demo Application DPI and Media Queries in Flex
  • 28. Deeper Dive Narciso Jaramillo Deep Dive Into Multi Density & Multi Platform Application Development
  • 29. ActionScript Only Roll your own looking at: stage.fullScreenWidth In development I’ve had issues with stage.stageWidth Capabilities.screenDPI
  • 30. Demo Application Sizing in ActionScript
  • 31. Flash Builder Simulating Flex In Design View At compile ActionScript At compile
  • 32. !=
  • 33.
  • 34.
  • 36. Don’t tweak for devices in code.
  • 37. If you can avoid it.
  • 38. But what about differences between UI controls IOS vs Android vsPlayBook
  • 41. Application Descriptor You know that XML file Special settings for Android IOS
  • 42. BlackBerry Descriptor BlackBerry Uses Application Descriptor and another file: blackberry-tablet.xml
  • 43. BlackBerry Descriptor Allows you to make transparent apps and change preview icons. Transparent apps aren’t supported on other platforms
  • 44. Android Settings Permissions Custom URI Compatibility Filtering Install Location
  • 45. Android Permissions ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION ACCESS_NETWORK_STATE ACCESS_WIFI_STATE CAMERA INTERNET READ_PHONE_STATE RECORD_AUDIO WAKE_LOCK WRITE_EXTERNAL_STORAGE
  • 46. Android Custom URI Allow web pages or other android apps to launch your app from a url when the application is installed.
  • 47. Android Custom URI <activity> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.BROWSABLE"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="myURI"/> </intent-filter> </activity> URL would be: myURI://com.myApp.uniquename Where com.myApp.uniquename is the app id from your descriptor
  • 48. Android compatibility filtering Permissions assume all or nothing So if a feature is optional, you have to set it such or it won’t show up in store Important for Camera, Audio
  • 49. Camera Filtering <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" android:required="false"/> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/> <uses-feature android:name="android.hardware.camera.flash" android:required="false"/>
  • 50. Android Instal Location <android> <manifestAdditions> <![CDATA[ <manifest android:installLocation="preferExternal"/> ]]> </manifestAdditions> </android>
  • 51. IOS Settings Models Resolution Custom URI Compatibility Filtering Exit or Pause
  • 52. Models <key>UIDeviceFamily</key> <array> <string>1</string><!-- iPod/iPhone --> <string>2</string><!-- iPad --> </array>
  • 53. Resolution <requestedDisplayResolution>high</requestedDisplayResolution> High will allow you to draw single pixels on a high resolution screen, otherwise 1 pixel = 4 pixels
  • 54. Custom URI <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>myURI</string> </array> <key>CFBundleURLName</key> <string>com.myApp.uniquename</string> </dict> </array> URL would be: myURI://com.myApp.uniquename If you set this to be the same as your application id you get compatibility with Android apps.
  • 55. IOS compatibility filtering Like Android it’s about discoverability and installation, not usage.
  • 56. Compatibility Filtering <key>UIRequiredDeviceCapabilities</key> <array> <string>microphone</string> <string>still-camera</string> </array>
  • 57. Exit or Pause <key>UIApplicationExitsOnSuspend</key> <string>YES</string>
  • 59. AIR Versions There are some issues with AIR version and target BlackBerry - 2.5 Android - 2.6 IOS -2.6, or 2.0 or 2.7
  • 60. But that’s hard set <applicationxmlns="http://ns.adobe.com/air/application/2.6">
  • 63. Flash Builder Publish to all platforms at the same time
  • 64. Compiling and Packaging Flash Builder uses features that are accessible through command line tools Often using those tools Therefore before it can be a feature in Flash Builder, has to be available in command line
  • 65. Flash Builder vs Command line Flash Builder will often lack ui that the command line exposes So it behooves you to learn command line
  • 66. Case in point Publishing AIR files compatible with Amazon Store
  • 67. Command line Compiling OS Scripts ANT (what I use) Maven
  • 68. Tools ANT MXMLC AIR Packagers ADT blackberry-airpackager pfi (no longer needed)
  • 69. Process Compile SWF Gather External Resources Package for target device
  • 70. Compiling Requires MXMLC In ANT requires MXMLC Task Despite the name, works for non MXML apps. Doesn’t add the Flex Framework or anything either.
  • 71. Compiling via ANT <mxmlcfile="${projectFile}"output="${device.swf}"> <load-configfilename="${FLEX_HOME}/frameworks/airmobile-config.xml"/> <source-pathpath-element="${FLEX_HOME}/frameworks"/> <static-link-runtime-shared-libraries/> <compiler.library-pathdir="${FLEX_HOME}/frameworks"append="true"> <includename="libs/*"/> </compiler.library-path> </mxmlc>
  • 72. Compiling via ANT <load-configfilename="${FLEX_HOME}/frameworks/airmobile-config.xml"/> On Desktops <load-configfilename="${FLEX_HOME}/frameworks/air-config.xml"/>
  • 73. Demo Command Line Compiling with ANT
  • 74. Gathering Files SWF Any assets used in application Application descriptor file
  • 75. Application Descriptor Most have a line: <content>[This value will be overwritten by Flash Builder in the output app.xml]</content> It won’t so you have to.
  • 76. Packaging for Android <execexecutable="${ADT}"dir="${android.collect}"> <argvalue="-package"/> <argline="-target apk"/> <argline="-storetype pkcs12"/> <argline="-keystore ${cert}"/> <argline="-storepass ${cert.password}"/> <argvalue="${app.name}"/> <argvalue="${app.name}-app.xml"/> <argvalue="${app.name}.swf"/> <argvalue="assets"/> </exec>
  • 77.
  • 79.
  • 80.
  • 83.
  • 85. Packaging for BlackBerry -package - command to package -target (bar|bar-debug) - target format bar or bar-debug -connect <host> - host ip address for debugging -no-validation - turn off air and bar validation -list-files - list all files in the resulting package -env <var>=<value> - set an extra environment variable for the runtime -barVersion <version> - run in compatibility mode (set older version to be compatible with) -publisher - set the publisher (author) name -buildId - set the build id (4th segment of the version) -devMode - package in development mode <signing options> (part of packaging options): -signDev - command to sign with developer's certificate -keystore <store> - keystore file -storepass <pass> - store password for certificate store -signRim - command to sign by rim (requires internet connection) -cskpass <pass> - password to encrypt long-lived keys <deployment_options>: -installApp - command to install the package -launchApp - command to launch the app -device <deviceId> - set host name or IP address of the target -password <password> - device password
  • 86. Packaging for BlackBerry Debugging Installation and launching Signing
  • 87. Demo Command Line Packaging with ANT
  • 88. Packaging for Amazon <execexecutable="${ADT}"dir="${android.collect}"> <argvalue="-package"/> <argline="-target apk"/> <argline="-airDownloadURL ${amazon.url}"/> <argline="-storetype pkcs12"/> <argline="-keystore ${cert}"/> <argline="-storepass ${cert.password}"/> <argvalue="${app.name}"/> <argvalue="${app.name}-app.xml"/> <argvalue="${app.name}.swf"/> <argvalue="assets"/> </exec>
  • 89. So should you do this?
  • 91. Can you wait for the next version of AIR?
  • 92. Is your app your competitive advantage, or a cost center?
  • 93. Is your audience spread out on devices?
  • 95. Follow up? Feel free to contact me terry.ryan@adobe.com http://terrenceryan.com Twitter: @tpryan