Welcome to the AIR Runtime and SDK version 29 beta! We've been hard at work adding new features to AIR and we're looking forward to receiving feedback from our development community.
This beta release includes new features as well as enhancements and bug fixes related to security, stability, performance, and device compatibility for AIR Runtime and SDK 29. For full details, please see our release notes
New and Updated Features
New SoftKeyboard Types for Android & iOS
Starting AIR 29, TextField and StageText enable developers to set two more types of soft keyboard.
Use swf-version 40 or greater and namespace 29.0 or greater to access these newly added keypads.Developers can set a softKeyboard property based on the input expected from the user. For example, if the phone input is expected, a device can use SoftKeyboardType.PHONE to display only phone numbers on the soft keyboard. Valid values are defined as constants in the SoftKeyboardType class:
var tfKeyBoard:TextField=new TextField(); keyBoard.softKeyboard=SoftKeyboardType.DECIMAL; //Setting SoftKeyboard type as DECIMAL OR var stKeyBoard:StageText = new StageText(); stKeyBoard.softKeyboardType=SoftKeyboardType.PHONE; //Setting SoftKeyboard type as PHONE
Geolocation Permission on iOS
Starting AIR 29, developers requesting Geolocation permission on iOS in their applications will have an option to request for WHEN_IN_USE or ALWAYS permission through a new property locationAlwaysUsePermission.
The default value of this property is false.
private var geo:Geolocation = new Geolocation(); geo.requestPermission(); //this would request for WHEN_IN_USE permission OR private var geo:Geolocation = new Geolocation(); geo.locationAlwaysUsePermission=true; //applicable for iOS11 geo.requestPermission(); //this would request for WHEN_IN_USE and ALWAYS permission
1. On iOS 11 and later if you initially request for WHEN_IN_USE permission, you can request for ALWAYS permission at a later time. The OS allows you to do this just once and any subsequent calls of requestPermission() are ignored by the OS.
2. On iOS 10, the OS allows you to request for permission just once. The requested permission WHEN_IN_USE/ALWAYS depends on the cocoa key added in the application descriptor. Hence, the property locationAlwaysUsePermission does not apply to iOS 10 and below.
3. Developers need to add cocoa keys in their application descriptor as per the level of authorization required by their application. For more details see https://developer.apple.com/documentation/corelocation/choosing_the_authorization_level_fo r_location_services/requesting_always_authorization
Media AutoPlay for Android and iOS
With AIR 29, we have made some changes to feature "Media AutoPlay for iOS & Android" introduced in AIR 21.
Now, a new argument has been added to StageWebView constructor mediaPlaybackRequiresUserAction with a default value true. Setting this argument as false will ensure autoplay of the media inside StageWebView.
public function StageWebView(useNative:Boolean = false, mediaPlaybackRequiresUserAction:Boolean = true)
For iOS, setting mediaPlaybackRequiresUserAction property after creating StageWebView will be a no-op, and developers can only set media autoplay through StageWebView constructor.
For Android, developers can set media autoplay in, either way, using the property mediaPlaybackRequiresUserAction or through the constructor argument.
Android SDK Upgrade
With AIR 29, Android SDK has been upgraded in the AIR Runtime. Here is the list of version numbers of the tools upgraded in AIR 29. There have been significant changes in the tools used to build the runtime. Raise your issues on AIR user forums if you observe any performance or functional issues.
|Android Build Tool||27.0.3|
|Android Support Repository||47.0.0|
|Android Google Repository||58|
|Gradle plugin version for Android||3.0.1|
Combined Windows 32-bit and 64-bit AIR SDK
Earlier, separate AIR SDKs were made available over Windows for packaging 32-bit and 64-bit AIR applications. The AIR SDK for 64-bit AIR applications had the functionality to package 64-bit captive applications only. AIR 29 onwards, a combined AIR SDK for packaging 32-bit and 64-bit captive AIR applications is made available for Windows.
Deciding the architecture of AIR applications
The decision of packaging 32-bit and 64-bit using the combined AIR SDK is different for Adobe Flash Builder and Adobe Animate/adt
- Packaging using Adobe Animate and adt:
With Adobe Animate and adt this decision will be done by adding an extra tag <architecture> in the application XML. The value of this tag could be either “32” for packaging 32-bit captive AIR applications and “64” for packaging 64-bit captive AIR applications.
The tag <architecture> must be added under <application> tag. Here is a sample app-xml:
<?xml version="1.0" encoding="utf-8" standalone="no"?> <application xmlns="http://ns.adobe.com/air/application/29.0"> <id>Sample</id> <filename>Sample</filename> <architecture>64</architecture> <name>Sample</name> <versionNumber>0.0.0</versionNumber> <initialWindow> <content>Sample.swf</content> <autoOrients>false</autoOrients> <fullScreen>false</fullScreen> <visible>true</visible> </initialWindow> </application>
- Packaging using Adobe Flash Builder:
With Adobe Flash builder this decision can be made by adding a Windows environment variable AIR_WIN_ARCH before launching the Adobe Flash Builder. The value of this variable could be 32 and 64 for packaging 32-bit captive AIR applications and 64-bit captive AIR applications respectively. Setting the tag <architecture> will have no effect when the application is packaged using Adobe Flash Builder. The decision will be completely dependent only on the environment variable’s value.
The packaging of shared and native AIR application will not be affected by any of the above-mentioned methods. They will continue to be supported as 32-bit applications on Windows. Also, packaging AIR applications on Mac won’t be affected.
Enhanced Profile on AIR Desktop
The Enhanced profile will be available on AIR for Windows8.1+ and Mac OS 10.9+ from AIR 29. This profile has been made available on mobile from AIR 26. It can be used in both requestContext3D and requestContext3DMatchingProfiles methods. AGAL4 can be used with the Enhanced profile.
AGAL4 introduces a new opcode “tld” and new Vertex Sampler register “vs” for fetching texture in a vertex shader. ‘tld’ requires a level of detail ( LOD ) value for parameter since GPU does not support the automatic calculation of LOD in the vertex shader.
Latest version of AGALMiniAssembler is available here: https://github.com/adobe-flash/graphicscorelib/pull/14/commits/a20d4773459b01e86acceac4524 0a2b4e88f67e3
Vertex Texture Fetch on AIR Desktop
With the introduction of new Stage3D profile i.e. ‘ENHANCED’ on the desktop, Vertex Texture Fetch is now available on AIR Desktop too. Vertex Texture Fetch was made available on mobile from AIR 26. It will be available on Desktop AIR 29 (SWF version 40) onwards. The feature will be supported on Windows 8.1+ and Mac OS 10.9+. The feature is dependent on the availability of Enhanced Profile and hence, it will not be supported on Windows 7.
Texture Data will be available in Vertex Shader using AGAL4 and Enhanced profile.
AGAL 4 introduces a new opcode “tld” and new Vertex Sampler register “vs” for fetching texture in the vertex shader. ‘tld’ is similar to 'tex' opcode used in the fragment shader. But unlike ‘tex’ opcode, ‘tld’ requires a level of detail ( LOD ) value as a parameter since GPU does not support the automatic calculation of LOD in the vertex shader.
tld dst, src, sampler
dst: a destination register for the sampler texture pixel
src: a register containing texture coordinate where the pixel is sampled and containing a level of detail indication as an index of mipmap to use.
The XY components of the src register: a texture coordinate where a texture pixel is sampled. The z component will be used for indicating the side of the cube map texture if the vertex texture is a cube map.
The w component of the src register: an index of mipmap to use, with a value range from 0 to n-1 where n is the total number of the mipmaps. The zero index indicates a mipmap in the highest resolution. The fractional part of src.w is how much a selected mipmap would be interpolated with the next level of the mipmap in lower resolution based on the mipmap filter (mipnearest or miplinear) passed in the shader or set from the setSamplerStateAt() API. Mipnearest uses nearest-neighbor mipmap, while miplinear uses linearly filtered mipmapping.
vertex sampler ‘vs’
tld vt0, va0, vs0<2d,linear,miplinear>
The above example code fetches texture pixels from the texture bound to vertex sampler 0 (vs0) to a vertex temporary register 0 (vt0) with a texture coordinate provided in a vertex attribute register 0 (va0) and a sampler state(< 2d, linear, miplinear >) provided in the vertex shader. The LOD value is provided in va0.w in the example.
A total number of vertex samplers available is 4. The sum of vertex and fragment samplers is restricted to 16.
Please note that tld opcode cannot be used inside fragment sampler.
To provide a texture for a vertex sampler in the vertex shader, developers must use existing ActionScript API, SetTextureAt().
The above example code binds 'texture' to the vertex sampler 0 (vs0). Note that this call would set up 'texture' to the fragment sampler in the same index, which is the fragment sampler 0 (fs0) if there is access to fs0 in the fragment shader.
A sampler state of the vertex sampler in the vertex shader code could be overridden with the existing AS API, SetSamplerStateAt:
SetSamplerStateAt(0, Context3DWrapMode.CLAMP, Context3DTextureFilter.LINEAR, Context3DMipFilter.MIPNEAREST );
Like the SetTextureAt API, the above call would also set up the state of the fragment sampler in the same index, which is the fragment sampler 0 (fs0), if fs0 is used in the fragment shader.
Please note, Anisotropic Filtering is not available for texture sampling used in vertex shaders.
Vertex Texture Fetch feature is useful for a number of effects like displacement mapping, water simulation, and explosion mapping etc.
Application of HIDPI Scaling to non-client areas
Support for HiDPI displays on Windows was introduced in AIR version 23. The feature allowed display of AIR contents to render higher quality on HiDPI displays.
The feature 'Application of HIDPI Scaling to non-client areas' is an extension to the earlier support for HiDPI scaling, wherein scaling of non-client areas, upon the dynamic change in the DPI value would be supported on AIR Windows. The feature would cover the scaling of the dialog boxes, file browsers and ‘non-client area’ UI components such as title bar, native menu and Windows icons.
The feature will be available from AIR 29 onwards and Windows 10 (Redstone 1) Version 1607 onwards.
AIR Desktop - Ability to disable/enable vsync on the fly(Beta Only)
Till AIR 28, frame buffer rendering rate of the AIR Runtime was synchronized to the display device refresh rate.
We have provided an enhancement in AIR 29 where a user will have an extra ability to sync or a-sync the display device rate. The synchronization feature can be toggled with the help of a property added to a stage variable “vsyncEnabled”.
The “vsyncEnabled” variable is available to toggle between true and false, if and only if an event “VsyncStateChangeAvailabilityEvent” returns true.
On windows 7 machine DisplayContext object, Event.CONTEXT3D_CREATE will be triggered again whenever the vsyncEnabled value is set as true and flickering may be observed.This phenomenon will not be reflected on Windows 8 and above and on MAC machines.
AIR Desktop-Increase GPU memory Limits(Beta Only)
Until AIR 28, maximum GPU memory provided for uploading the Normal and Rectangular textures was 512 MB. With AIR 29 beta, we have enhanced the GPU memory limits to 2048MB. These new limits will be available with the Stage3D profile “Standard_Extended” and "Enhanced". For other profiles, maximum GPU limit will be 512MB.
This feature is AIR 64 bit only and will be available for Normal and Rectangular textures. For Cube texture, memory limits will be same as before i.e. 256 MB.
AIR Desktop-Increase in Texture Limit (Beta Only)
Till AIR 28, maximum texture size supported by AIR is 4096x4096. In AIR 29 beta(SWF version 40), we have increased the texture limit to 8192x8192 pixels. A new read-only property Context3D::supports8kTexture has been introduced which returns true only if the 8k texture is supported by the hardware.
This feature only supports the rendering of Normal and Rectangular textures. Textures such as Cube, Video, Compressed, and Compressed_Alpha will not be supported. The feature is available in AIR 64 for Mac, Windows 8.1 and above.
Since 8K textures are quite heavy, it is recommended to upload the textures asynchronously.
- Air apps quit unexpectedly when bytearray is attached to domainMemory(AIR-4198585)
- Video flickers with containsVideo=true (AIR-4130641)
- [Mac]GESTURE_PAN event is not fired.(AIR-4198492)
- Screen turns half black when iOS goes into standby and user resume again for IOS 10+ (AIR-4198539)
- Bluetooth Headset not working with microphone.getEnhancedMicrophone() on iOS (AIR-4198549)
- Asynchronous texture upload fails after uploading more than 6500 texture(AIR-4198527)
- [Android]Incomplete textures are rendered when uploading large textures.(AIR-4198475)
- Flash Builder quits unexpectedly on High Sierra when "Export release build" is selected from the Project menu.
- Unexpected margin at the top of StageWebView on iOS 11 (AIR-4198537)
- clipboard.dataForFormat returns null for Custom data in the Clipboard(AIR-4198553).
- Asynchronous texture upload fails after uploading 5000 texture(AIR-4198527)
- Various cases of SWF loading in HTML fail on AIR 64 bit Windows
- Packaging 64-bit captive app results in error through adt.bat
- The launch of two AIR captive apps simultaneously packaged with windows 64-bit runtime causes the second app to quit unexpectedly.
- ATF texture with LZMA compressions is not rendering.
- InvokeEvent.arguments is empty on Android (AIR-4198552)
- Delay in dispatching TOUCH events on device borders on iOS 11 (AIR-4198551)
- StageWebView does not load nor display local HTML content (AIR-4198420)
- Status bar appears when app is in fullscreen and showing soft keyboard on Samsung devices (4189175)
- Audio stops playing on interruption when SoundMixer.audioPlaybackMode = AudioPlaybackMode.VOICE and SoundMixer.useSpeakerphoneForVoice = false (4189377)
- NetworkInfo.isSupported returns TRUE on Android even when permissions are missing in application descriptor (AIR-4198485)
- Stage shift offset error on StageText focus when status bar is hidden on Samsung S8 (AIR-4198421)
Authoring for Flash Player 29 and AIR 29
- Update application descriptor namespace to 29
- SWF version should be 40
For system requirements of the current release of AIR in production, visithttp://www.adobe.com/products/air/systemreqs/
About the Beta Channel
To get the latest Beta build of AIR Runtime and SDK visit Adobe labs
If you would like real-time notification for announcements related to the AIR Beta Channel please follow the Flash Runtime Announcements forums by choosing "Follow this forum" from the right-hand menu on the Forums page.