3D Android Air Apps

Hi everyone I am currently part of a group of students which is creating an Android Air Application.
We have been doing pretty well so far (we are creating a game which is a periscope simulator) but getting 3d models in the app has been a bit troubling.
We have been using 3dsMax for the models and using Swift3D in order to convert the file to swf. We then rendered the ship and exported to .swf and then added it to the project in flashbuilder and then used SWFLoader to add it to the app. When we use the emulator the ship which we rendered appears perfectly but when we create the apk and put it on our phone (HTC EVO 4G) the only thing that appears is an old school image not able to be shown image.
First off we have been doing lots of research on what we could do with the 3d models and everyone has told us that we have to convert them to an .swf in order get in the 3d model because their is no other way to get it in. Is this true or do we really have to use swift3d? Others have suggested that we use some of flashes game engines but would any of these even be compatible with adobe air?
All we really need to do is import the 3d model then be able to randomly generate its location on the screen as well as its viewing angle. Our application is never actually moving its just providing a still image which is randomly chosen from the 360 degree view of the ship.
If anyone has any advice we would really appreciate it. At this point we are not really sure what we should do.

I've not tried any Swift3D but have run some Papervision3D stuff in AIR on Android.  Seems fairly happy but I'm only pushing around simple planes (card game) so the load isn't particularly heavy - more complex models might start to grind it.   Seems to benefit well from GPU acceleration so keep that in mind.  From your description though it sounds as though you're not going to be rendering high fps, which is the real killer, so this may be perfect for your app.
On PV3D against Alternativa, (broad statement warning) I think it's generally agreed that PV3D is fast, Alternativa is more precise.  PV3D being optimised for speed may be key on Android devices - depends what you're trying to do, but with PV3D you will probably sacrifice some more accurate z-sorting that Alternativa can provide.  Personally I'd test both to see pros and cons - it's going to be on a case by case basis.
If you've got a more recent version of Swift3D, I believe you can export to a PV3D scene quickly and easily with no knowledge of that engine.  Think it's one of the publish options (v6+ ?).  So presumably you can run a PV3D test on your app with little effort and you can take it from there.  If it's all z-fighting issues on your models, give it a go with Alternativa.
hth

Similar Messages

  • Needed. Android Air app to watch live FMS video stream.

    Does anyone have an Android Air app that can be used to watch a live video stream from Flash Media Server?
    I've been trying to get our live stream viewable on Android devices and can't find any solutions.
    Thanks,
    Dave

    Hey, I am having the same issue.  Did you find a solution?

  • Can I update my Android AIR app with a non-AIR app?

    A few years ago I published an Android app using Adobe AIR. Now I've created a new version of the app with a different technology (HaxeFlixel / OpenFL) which uses native C++ code.
    The certificate I used for the AIR version is in "p12" format, and it seems that I need to use "jks" format. I tried using a p12 to jks converter I found online, which seemed to work, but when I try to submit the app I get an error saying that the certificates don't match.
    Any suggestions on how I can update the app with a non-AIR app? Is it possible? Thanks in advance.

    I'm still having trouble with this, I asked in the OpenFL forums but nobody responded.
    I converted the p12 file to JKS from the site you suggested (I think I've actually tried it before), and the file was created successfully, the apk compiled fine with the JKS file, but when I try to update the app for Google Play it says "Upload failed
    You uploaded an APK that is signed with a different certificate to your previous APKs. You must use the same certificate. Your existing APKs are signed with the certificate(s) with fingerprint(s):"
    When I try to sign with the original p12 file, I get the error "Invalid keystore format"
    I noticed that for the AIR app, I also had a file called SelfSigned.pfx, which I think was used to create the p12 certificate? Can this have something to do with the problem? I even tried using this pfx file to sign the app, which didn't work either.

  • Displaying PDF content in Android Air app - how?

    Hi, I'm fairly new to developing Air apps for mobile devices. I'm looking to have my app display PDF files and can't find a dfinitive way of doing it. I've read that using the StageWebView would be the way to do it.
    Here's the relevant part of my code (PDF path changed):
    if (StageWebView.isSupported)
    currentState = "normal";
    webView.stage = stage;
    webView.viewPort = new Rectangle(20, 100, 450, 450);
    webView.addEventListener(LocationChangeEvent.LOCATION_CHANGE,onURLChange);
    webView.loadURL("http://path.to.my.pdf");
    addEventListener(ViewNavigatorEvent.REMOVING,onRemove);
    else {
    currentState = "unsupported";
    lblSupport.text = "StageWebView feature not supported";
    Its working up until the point of actually displaying the PDF content, I get nothing (blank screen).
    I'm using Flash Builder 4.5 / Air 2.6 and debugging on a Motorola Xoom tablet. Adobe Reader is installed on the device.
    Any help with this would be greatly appreciated.

    Solved.
    For some reason I couldn't access the HTMLLoader object outside of the function that initialised it, despite the fact that I was listening for EVENT_COMPLETE.
    Basically, to get round this bug, just put all the initialise and load code in the same function and you should be laughing.

  • Flash CC - Publish iOS/Android AIR App stuck at 5 seconds

    I have a few Flash made apps, I've published them to my devices before, but now I can't. Flash get's stuck at 5 seconds. Flash freezes, I can't cancel.
    Any suggestions?

    I would recommend to use "Captive".
    Difference is pretty simple...
    Shared Basically means that it compiles the "apk" without the Adobe AIR runtime, resulting in a smaller file size apk but REQUIRES users to have the "Adobe AIR App" installed.
    Captive means that it compiles the "apk" with the Adobe AIR runtime, resulting in a larger file size apk but DOES NOT REQUIRE users to have the "Adobe AIR App" installed.
    If you want to Guarantee everyone can run your app, use captive. If you want to rely on users to hope the have the correct version of AIR installed to view your app, use Shared.

  • How to use GooglePlayServices libs in Native Extension of Android AIR app?

    I am trying to use some features of Google Play Services lib but I could not make it work. I have added the reference to the google play service libs to the manifest file (from Flash Builder)
    <application android:enabled="true">
    <meta-data  android:name="com.google.android.gms.version"
                    android:value="@integer/google_play_services_version" />
    <activity android:excludeFromRecents="false">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    </application>
    In my ANE, I have added the reference to the source of google-play-services_lib, but when I tried to call the FREFunction to check the availability of Google Play Service
    @Override
    public FREObject call(FREContext context, FREObject[] args){
         boolean result = false;
         try{
          Activity activitiy = context.getActivity();
          activityContext = activitiy.getBaseContext();
              result = isGooglePlayServiceExists();
         }catch(IllegalStateException e){
          Log.e(AneUtils.TAG, "Failed to get AIR current activity", e);
         FREObject obj = null;
        try{
            obj = FREObject.newObject(result);
        }catch(FREWrongThreadException e){
            Log.e(AneUtils.TAG, "Failed to create FREObject from [" + result + "]");
        return obj;
    private boolean isGooglePlayServiceExists(Context activityContext){
        int googlePlayServicesCheck = -1;
        try{
            googlePlayServicesCheck = GooglePlayServicesUtil.isGooglePlayServicesAvailable(activityContext);
        }catch(Exception e){
            Log.e(AneUtils.TAG, "Error getting googlePlayService state",e);
        if(googlePlayServicesCheck == ConnectionResult.SUCCESS){
             return true;
        return false;
    The ANE crashed at the line GooglePlayServicesUtil.isGooglePlayServicesAvailable(activityContext) so I really doubted the Google Play Service libs was not added.
    Has anyone successfully imported the Google Play Serivce libs into Adobe AIR Android app?
    Any advice or help will be appreciated. Thank you.

    hey sshk5,
    I have managed to make it work. The solution is quite simple, i will explain the steps below
    1. Download the latest Android SDK from ADT (including the latest version of GooglePlay lib)
    2. Check the version number of Google Play lib ( for example 412312....) something and in your FlashBuilder project, make sure you use the  exact number like
    <meta-data  android:name="com.google.android.gms.version" android:value="412312" />
    3. Use tool to merge the googlelib jar file with your native extension before importing the native extension to FlashBuilder. If you do not want to use any other tool, you can use the AIR 4.0 which will allow you to use commandline to merge jars (and even dependency resources)
    Hope it helps

  • Android AIR app stops unexpectedly during debugging/running on device

    FlashBuilder 4.5.1, AIR 2.6, device: HTC Wildfire S. The problem occurs everytime I try run a mobile app- just the Android error view. Please help

    Hi,
    go first here and do check-list:
    http://help.adobe.com/en_US/air/build/WS144092a96ffef7cc16ddeea2126bb46b82f-8000.html
    it lists supported/non-supported/check-at-runtime features - as you could use a feature that is not supported at your device (application could work in Air/Flash Builder device emulator though)
    What is happening in your application when it starts? Does it load video/audio or does request to local or remote content?
    regards,
    Peter

  • Android Air App using AdMob "NULL Object" Error?!?

    Hi,
    I am currently developing an app using adobe air flashbuilder and I have incorporated AdMob type html adverts into it. The Adverts do come up nicely however if I run the app in debug mode I get this error:
    TypeError: Error #1009: Cannot access a property or method of a null object reference.
        at model::AdMob/createAd()[C:\Users\Jack\Documents\Dropbox\Projects\App\App Final\src\model\AdMob.as:37]
    The Ads do still work regardless of this however this is then affecting other elements within the app so I would like to get rid of the error that is happening. Below is my code in the "AdMob.as" file where I believe the issue to be occuring, can someone please help me with this?
    package model
        import flash.display.Stage;
        import flash.events.Event;
        import flash.events.LocationChangeEvent;
        import flash.events.MouseEvent;
        import flash.geom.Rectangle;
        import flash.media.StageWebView;
        import flash.net.URLRequest;
        import flash.net.navigateToURL;
        public class AdMob
            // setup variables
            private var _stageWebView:StageWebView;
            private var myAdvertURL:String = "http://www.test.co.uk/AdMob/test.html";
            //private var myAdvertURL:String;
            private var adWidth:Number=480;
            private var adHeight:Number=85;
            private var stage:Stage;
            public function AdMob(adURL:String,_stage:Stage)
                myAdvertURL=adURL;
                stage=_stage;
                createAd();
            public function createAd():void {
                // check that _stageWebView doersn't exist
                if (! _stageWebView) {
                    _stageWebView = new StageWebView () ;
                    // set the size of the html 'window'
                    _stageWebView.viewPort = new Rectangle(0,stage.stageHeight-adHeight, 800, adHeight);
                    //_stageWebView.viewPort = new Rectangle((stage.stageWidth-adWidth)/2,stage.stageHeight-adHeight,adWidth,adHeight);
                    // add a listener for when the content of the StageWebView changes
                    _stageWebView.addEventListener(LocationChangeEvent.LOCATION_CHANGE,onLocationChange);
                    //add a listener for when the ad is loaded
                    _stageWebView.addEventListener(Event.COMPLETE,onComplete);
                    // start loading the URL;
                    _stageWebView.loadURL(myAdvertURL);
                // show the ad by setting it's stage property;
                //showAd();
            public function destroyAd():void {
                // check that the instace of StageWebView exists
                if (_stageWebView) {
                    trace("removing advert");
                    // destroys the ad
                    _stageWebView.stage = null;
                    _stageWebView = null;
            public function toggleAd():void {
                trace("toggling advert",_stageWebView);
                // check that StageWebView instance exists
                if (_stageWebView) {
                    trace("_stageWebView.stage:"+_stageWebView.stage);
                    if (_stageWebView.stage == null) {
                        //show the ad by setting the stage parameter
                        _stageWebView.stage = stage;
                    } else {
                        // hide the ad by nulling the stage parameter
                        _stageWebView.stage = null;
                } else {
                    // ad StageWebView doesn't exist - show create it
                    createAd();
            public function onLocationChange(event:LocationChangeEvent):void {
                // check that it's not our ad URL loading
                if (_stageWebView.location != myAdvertURL) {
                    // destroy the ad as the user has kindly clicked on my ad
                    destroyAd();
                    // Launch a normal browser window with the captured  URL;
                    navigateToURL( new URLRequest( event.location ) );
            public function onComplete(event:Event):void{
                //add the ad when it is loaded. If not it will apear a white rectangle until the load is complete.
                showAd();
            public function updateAd(adURL:String=null):void{
                if (adURL!=null){
                    myAdvertURL = adURL;
                destroyAd();
                createAd();
            public function showAd():void{
                if (_stageWebView)
                    _stageWebView.stage = stage;
            public function hideAd():void{
                if (_stageWebView)
                    _stageWebView.stage = null;

    @zhenya1919 - since you're currently going through this, could you please open a new bug report on this over at https://bugbase.adobe.com?  When adding the bug, please include some sample code or a sample application so we can quickly test this out internally.  If you'd like to keep this private, feel free to email the attachment to me directly ([email protected]). 
    Once added, please post back with the URL so that others effected can add their comments and votes.
    Thanks,
    Chris

  • Android AIR App Random Error #2032: Stream Error (HTTPStatusEvent = 0)

    Hello
    I am investigating an issue with failed requests and it's been difficult to narrow it down. When I put the URL into a browser I get a valid / expected response. However when I try to access the same URL using Actionscript 3 on my Android Devices (Nexus S and Xoom), I get stream error #2032 at random.
    I am using URLRequest with a custom RequestListener class:
    var loader:URLLoader = new URLLoader();                 
    if(action == "zip") loader.dataFormat = URLLoaderDataFormat.BINARY;
    var listener:RequestListener = new RequestListener(action, loader, endFunction, extra);
    loader.addEventListener(Event.COMPLETE, listener.requestSuccessful);
    loader.addEventListener(IOErrorEvent.IO_ERROR, listener.requestFailed);
    loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHTTPStatusChange);
    var req:URLRequest = new URLRequest(Global.apiURL);
    req.method = URLRequestMethod.POST;
    req.data = new URLVariables(paramString);
    loader.load(req);
    return loader;
    Note that it works on one of my routers but not the access point:
    onHTTPStatusChange: 0
    requestFailed: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: { ... }" errorID=2032]
    Since it works on one router but not the other, I can't say that it's an issue with the app, phone, or our request URL.
    Note that I am using SSL / https.
    Is it a timeout issue?? This is really frustrating.
    Thanks.

    @zhenya1919 - since you're currently going through this, could you please open a new bug report on this over at https://bugbase.adobe.com?  When adding the bug, please include some sample code or a sample application so we can quickly test this out internally.  If you'd like to keep this private, feel free to email the attachment to me directly ([email protected]). 
    Once added, please post back with the URL so that others effected can add their comments and votes.
    Thanks,
    Chris

  • AIR app on Android for live chat crashes

    No matter which streaming server I use, I regularly have a crash. My scenario is:
    One side is on browser on PC, the other side is on android air app. Application is receiving a live stream and publishing a live stream at the same time, using two different Netstreams. Half of the time the application crashes. Crashes are rearly occuring during chat, but most of the time after a chat session is ended, and some time after netstreams are closed. There is no exceptions.
    If I run the same AIR application on Windows Desktop, no problem occurs.
    My application also records video and views recorded video. No problem occurs there. So, play("recorded.flv") and publish("someFLV", "record") has no problems.
    When it comes to live streaming, problem occurs.
    I use netstream.buffer = 0 for publishing live content, and netstream.buffer with its default value for playing live content.
    When chat ends, I detach camera and microphone from netstream, remove eventlisteners from netstream, remove camera from Video object, set microphone and camera to null.
    I tried closing and not closing netstreams, but nothing changed.
    I tried sound only and video only streams on both sides, but nothing changed.
    I compiled with AIR on Android 2.6 and 3.0, but nothing changed.
    I tried compiling with Flash Builder Burrito and Flash Builder 4.5, but nothing changed.
    I investigated Android adb logcats, but nothing useful is traced.
    Application just crashes without any message or warning.
    Is there a bug for playing and receiving live content at the same time on AIR on Android?

    For those who are interested in this crash, I'll give a few more experiments and hope for an answer.
    I investigated a few adb logcat deeper and noticed something about AIR runtime:
    1. The crash does not happen all time, but randomly. Followings will explain the reason.
    2. If I try sound-only streams, and if app crashes after disposing resources, logcat has messages related to Android microphone. After painful research, I found that logs mean: "someone requested microphone data, but it didn't consume microphone data fast enough."
    3. If I try video-only streams, and if app crashes after disposing resources, logcat has messages related to Android camera. After painful research, I found that logs mean: "someone requested camera data, but it didn't consume microphone data fast enough."
    So, maybe, only maybe, because AIR doesn not support multi-threading, when we dispose a microphone or a netstream, AIR stops receiving microphone data immediately, but until our calling function ends its execution, AIR does not notify Android OS about dispose. So, in Android's point of view, it sends microphone data but nobody consumes that data, thus nobody empties Android's buffer. Hence Android OS thinks that something is wrong and kills AIR application. That may explain why we get crash randomly: If Android's microphone, or camera, buffer is nearly empty when we dispose, buffer is not get filled until we fully dispose resources and everything is fine. But if the buffer is nearly full when we call dispose, buffer gets filled to its maximum until we finish our disposing and Android OS suspects about buffer and AIR app is killed with a signal 11, a segmentation fault.
    This is only a theory, and I found one evidence that supports the theory: Android developers are suggested not to use camera and microphone resources directly. Instead, they are advised to create another thread to consume camera and microphone and use that thread for their needs. That is impossible in AIR as AIR don't have multi-threading.
    Well, is there anybody now who has an idea?

  • How to use expansion files for AIR app (flash cs6) on Google Play Store

    I am currently working on an app that will undoubtedly end up bigger than the maximum size of 50 MB for the APK, and I have no clue how to add files to an expansion pack, how to load expansion pack, what files need to be in expansion pack, or even what an expansion pack does/how it works. If anyone can point me in the right direction, that would be great, I want to make an expansion pack now before I get even more files.

    Haven't had a need to do this for file size purposes but since we can now download and use SWFs with ABC, I just specify my external SWFs when I compile and once my app is run it downloads the SWFs (with a pretty preloader) before the user can do anything. I have my own servers so I believe that's all that Amazon Bucket is actually used for. That user didn't have their own web servers to serve up the SWF content from.
    Aside that, check the answer here. Google will turn any extra files uploaded for your app into OBB for you. You just upload the SWF:
    Create expansion file for AS3 android Air App Flash cs6 - Stack Overflow
    It also outlines if you need to upload multiple files then .zip them up and use an AS3 .zip library to extract the files.

  • External Swf on Android Air and IOS Air

    Hello
    Can android AIR and IOS AIR app download and play external SWF with code inside?
    I have created android AIR app(SDK version 4.0) which load external swf with simple movie clip on the scene.
    var loader:Loader=new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
    loader.load(new URLRequest("2.swf"));
    function onLoaded(e:Event):void
         addChild(loader);
    I have installed this android AIR app on device but i do not see external swf on the scene.
    Thanks in advance

    So for ios as3 code must be like this one.?
    var _urlRequest:URLRequest = new URLRequest("2.swf");
    var _loader:Loader = new Loader();
    var _lc:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);
    _loader.load(_urlRequest, _lc);
    addChild(_loader);
    One more question: How exactly  i can add the external swf to the included files?
    Can you give link with information or some sample? Also, does it work on Android Air?
    If you have sample for ios Air or for Andoid Air i will be very appreciative.
    Sorry for my english.

  • Flash Builder 4.7 won't debug air app on Android devices  anymore

    Hi there,
    A strange thing happened today to my Flash Builer 4.7 installation on OS 10.8.5 : it suddenly refused installing and debugging AIR apps.
    At -the famous- 57% of compilation completion I can see the "installing app on device" message, but nothing happens then, and the one minute connection to app timeout is finally triggered.
    I had a look at other threads dealing with this problem here http://forums.adobe.com/thread/1154269 and here http://www.androidpolice.com/2013/02/12/new-android-4-2-2-feature-usb-debug-whitelist-prev ents-adb-savvy-thieves-from-stealing-your-data-in-some-situations/ and I downloaded the latets Android SDK and replaced a bunch of files into the /Applications/Adobe Flash Builder 4.6/sdks/4.6.0/lib/android/bin folder but nothing worked.
    The fun side of the issue is that yesterday it worked, and this morning it did not worked anymore, but I swear I did not ugraded Android on my phone nor I upgraded AIR SDK in FLash Builder or OS X. The Android phone is the same as usual, a Nexus 4 with Android 4.3, that I upgraded 1 month ago.
    I can't debug my Android app anymore, this drives me crazy, and I spent the day trying to find a solution.
    Do you guys had a similar problem ?

    My mistake...
    There was a typo into the XML application descriptor, that prevented the app to install properly on the device.
    Precisely, it wasn't a typo but raher a malformed <intent-filter> node. I launched adb tool from the console with adb install MyApp.apk command, and I saw this : Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED] in the terminal. From here it was easy to find the culprit.
    What would be cool is to have this feature inside the Flash Builder's Console panel.

  • Example working Flex AIR app for Android?

    I'm having trouble getting even the most basic AIR app working on Android. Here is the code:
    <?xml version="1.0" encoding="utf-8"?>
    <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                            xmlns:s="library://ns.adobe.com/flex/spark"
                            xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:local="*"
                            width="600" height="600">
         <fx:Declarations>
             <!-- Place non-visual elements (e.g., services, value objects) here -->
         </fx:Declarations>
         <mx:Label text="Hello World"/>
    </s:WindowedApplication>
    It works fine running on  Windows in Flash Builder, obviously it's pretty simple. Here are the  commands I use to put it on a Samsung Galaxy Tab with Android 2.2.
    C:\Users\Ryan\Adobe  Flash Builder 4\Test2\bin-release>adt -package -storetype pkcs12  -keystore C:\Users\Ryan\STG-Android.pfx Test2.air Test2-app.xml  Test2.swf
    password:
    C:\Users\Ryan\Adobe Flash Builder 4\Test2\bin-release>adt -package  -target apk -storetype pkcs12 -keystore C:\Users\Ryan\STG-Android.pfx  Test2.apk Test2-app.xml Test2.swf
    password:
    test
    C:\Users\Ryan\Adobe Flash Builder 4\Test2\bin-release>adb install -r Test2.apk
    2286 KB/s (419172 bytes in 0.179s)
             pkg: /data/local/tmp/Test2.apk
    Success
    A Test2 app icon shows up on my Galaxy Tab  under Applications but when I run the app I just see a plain white  screen, I don't see the words "Hello World". Any ideas? Does anyone have  an example Flex AIR app that works on Android and can post the code so I  can try it on my Galaxy Tab? I know AIR is installed correctly on my  Galaxy because I installed an AIR app called South Park Avatar Creator  that I got from the market and it works fine.
    Thanks,
    Ryan
    P.S.  Here is the Test2-app.xml from my non-working project above in case it  helps. This is the default generated with a new Flex app in Flash  Builder 4 using the Flex 4.1.0 AIR 2.5 SDK but I uncommented the andoid  tags and set the visible tag to true.
    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <application xmlns="http://ns.adobe.com/air/application/2.5">
    <!-- Adobe AIR Application Descriptor File Template.
        Specifies parameters for identifying, installing, and launching AIR applications.
        xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/2.5
                 The last segment of the namespace specifies the version
                 of the AIR runtime required for this application to run.
         minimumPatchLevel - The minimum patch level of the AIR runtime required to run
                 the application. Optional.
    -->
        <!-- A universally unique application identifier. Must be unique across all AIR applications.
         Using a reverse DNS-style name as the id is recommended. (Eg. com.example.ExampleApplication.) Required. -->
         <id>Test2</id>
        <!-- Used as the filename for the application. Required. -->
         <filename>Test2</filename>
        <!-- The name that is displayed in the AIR application installer.
         May have multiple values for each language. See samples or xsd schema file. Optional. -->
         <name>Test2</name>
         <!-- A string value of the format  <0-999>.<0-999>.<0-999> that represents application  version which can be used to check for application upgrade.
         Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
         An updated version of application must have a versionNumber value  higher than the previous version. Required for namespace >= 2.5 .  -->
         <versionNumber>1.0.0</versionNumber>
         <!-- A string value (such as "v1", "2.5", or "Alpha 1") that  represents the version of the application, as it should be shown to  users. Optional. -->
         <!-- <versionLabel></versionLabel> -->
        <!-- Description, displayed in the AIR application installer.
         May have multiple values for each language. See samples or xsd schema file. Optional. -->
         <!-- <description></description> -->
        <!-- Copyright information. Optional -->
         <!-- <copyright></copyright> -->
        <!-- Publisher ID. Used if you're updating an application created prior to 1.5.3 -->
         <!-- <publisherID></publisherID> -->
        <!-- Settings for the application's initial window. Required. -->
         <initialWindow>
             <!-- The main SWF or HTML file of the application. Required. -->
             <!-- Note: In Flash Builder, the SWF reference is set automatically. -->
             <content>[This value will be overwritten by Flash Builder in the output app.xml]</content>
             <!-- The title of the main window. Optional. -->
             <!-- <title></title> -->
            <!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
             <!-- <systemChrome></systemChrome> -->
            <!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
             <!-- <transparent></transparent> -->
            <!-- Whether the window is initially visible. Optional. Default false. -->
             <visible>true</visible>
            <!-- Whether the user can minimize the window. Optional. Default true. -->
             <!-- <minimizable></minimizable> -->
            <!-- Whether the user can maximize the window. Optional. Default true. -->
             <!-- <maximizable></maximizable> -->
            <!-- Whether the user can resize the window. Optional. Default true. -->
             <!-- <resizable></resizable> -->
            <!-- The window's initial width in pixels. Optional. -->
             <!-- <width></width> -->
            <!-- The window's initial height in pixels. Optional. -->
             <!-- <height></height> -->
            <!-- The window's initial x position. Optional. -->
             <!-- <x></x> -->
            <!-- The window's initial y position. Optional. -->
             <!-- <y></y> -->
            <!-- The window's minimum size, specified as a width/height pair in pixels, such as "400 200". Optional. -->
             <!-- <minSize></minSize> -->
            <!-- The window's initial maximum size, specified as a  width/height pair in pixels, such as "1600 1200". Optional. -->
             <!-- <maxSize></maxSize> -->
         </initialWindow>
        <!-- We recommend omitting the supportedProfiles element, -->
         <!-- which in turn permits your application to be deployed to all -->
         <!-- devices supported by AIR. If you wish to restrict deployment -->
         <!-- (i.e., to only mobile devices) then add this element and list -->
         <!-- only the profiles which your application does support. -->
         <!-- <supportedProfiles>desktop extendedDesktop mobileDevice extendedMobileDevice</supportedProfiles> -->
        <!-- The subpath of the standard default installation location to use. Optional. -->
         <!-- <installFolder></installFolder> -->
        <!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
         <!-- <programMenuFolder></programMenuFolder> -->
        <!-- The icon the system uses for the application. For at least one resolution,
         specify the path to a PNG file included in the AIR package. Optional. -->
         <!-- <icon>
             <image16x16></image16x16>
             <image32x32></image32x32>
             <image36x36></image36x36>
             <image48x48></image48x48>
             <image72x72></image72x72>
             <image128x128></image128x128>
         </icon> -->
        <!-- Whether the application handles the update when a user double-clicks an update version
         of the AIR file (true), or the default AIR application installer handles the update (false).
         Optional. Default false. -->
         <!-- <customUpdateUI></customUpdateUI> -->
         <!-- Whether the application can be launched when the user clicks a link in a web browser.
         Optional. Default false. -->
         <!-- <allowBrowserInvocation></allowBrowserInvocation> -->
        <!-- Listing of file types for which the application can register. Optional. -->
         <!-- <fileTypes> -->
            <!-- Defines one file type. Optional. -->
             <!-- <fileType> -->
                <!-- The name that the system displays for the registered file type. Required. -->
                 <!-- <name></name> -->
                <!-- The extension to register. Required. -->
                 <!-- <extension></extension> -->
                 <!-- The description of the file type. Optional. -->
                 <!-- <description></description> -->
                 <!-- The MIME content type. -->
                 <!-- <contentType></contentType> -->
                 <!-- The icon to display for the file type. Optional. -->
                 <!-- <icon>
                     <image16x16></image16x16>
                     <image32x32></image32x32>
                     <image48x48></image48x48>
                     <image128x128></image128x128>
                 </icon> -->
             <!-- </fileType> -->
         <!-- </fileTypes> -->
        <!-- Specify Android specific tags that get passed to AndroidManifest.xml file. -->
         <android>
             <manifestAdditions>
             <![CDATA[
                 <manifest android:installLocation="auto">
                     <uses-permission android:name="android.permission.INTERNET"/>
                     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
                     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
                     <uses-configuration android:reqFiveWayNav="true"/>
                     <supports-screens android:normalScreens="true"/>
                     <uses-feature android:required="true" android:name="android.hardware.touchscreen.multitouch"/>
                     <application android:enabled="true">
                         <activity android:excludeFromRecents="false">
                             <intent-filter>
                                 <action android:name="android.intent.action.MAIN"/>
                                 <category android:name="android.intent.category.LAUNCHER"/>
                             </intent-filter>
                         </activity>
                     </application>
                 </manifest>
             ]]>
             </manifestAdditions>
         </android>
         <!-- End of the schema for adding the android specific tags in AndroidManifest.xml file -->
    </application>

    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                            xmlns:s="library://ns.adobe.com/flex/spark"
                            xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:local="*"
                            width="600" height="600">
         <fx:Declarations>
             <!-- Place non-visual elements (e.g., services, value objects) here -->
         </fx:Declarations>
         <mx:Label text="Hello World"/>
    </s:Application>

  • Can I run an html/javascript AIR app on Android or iOS?

    Is it possible to compile an already-existing HTML/javascript app to install/run it on any mobile OS (Android or iOS, in particular)? I haven't found anything that says it's possible, only instructions for doing it with a Flash/Flex based AIR app.
    I have a large html/javascript app, with a lot of value put into it, and my client would like to be able to package it for use on tablets. Ideally, I'd like to be able to not only have it run there, but also be able to "hide" the html/js code from prying eyes, if there's a way to do that.
    Thanks much in advance... I've done considerable research trying to get an answer to these questions.
    - Jack

    Hi Ross,
    the certificate used for APK files is a self-signed one so at this point, no need to use Google Console yet.
    See http://helpx.adobe.com/digital-publishing-suite/kb/publishing-process-android-amazon-mobil e.html (Create a certificate file using Keytool)
    Testing is only a matter of installing the APK file on the device where you should be able to test.
    The Android developer account will be useful for testing if you have in-app purchases matching 'retail' folios.

Maybe you are looking for