29.4.11

Скрипт для сбоки flash приложений под iOS и Android

В последнее время часто приходится готовить приложения на flash под мобильные девайсы. Очень полезно в рамках прототипной или предпродажной деятельности.

Так как задача по расшариванию этого умения передо мной вставала уже больше чем два раза, пора написать пост.

Итак, приступим. Для сборки нам потребуется:
Всё распаковываем и устанавливаем как надо.
Начнем с описания дескрипторов для приложений:

 

Android:



<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<application xmlns="http://ns.adobe.com/air/application/2.5">
    <id>com.example.myapp</id>
    <filename>MyApp</filename>
    <description></description>
    <name>MyApp</name>
    <copyright></copyright>
    <initialWindow>
        <content>MyApp.swf</content>
        <systemChrome>standard</systemChrome>
        <transparent>false</transparent>
        <visible>true</visible>
        <fullScreen>false</fullScreen>
        <autoOrients>false</autoOrients>
        <aspectRatio>portrait</aspectRatio>
        <renderMode>gpu</renderMode>
    </initialWindow>
    <customUpdateUI>false</customUpdateUI>
    <allowBrowserInvocation>false</allowBrowserInvocation>
    <icon>
      
    </icon>
    <android>
        <manifestAdditions><![CDATA[<manifest>
        <uses-permission android:name="android.permission.INTERNET"/>
        
</manifest>
]]></manifestAdditions>
    </android>
    <versionNumber>1.0</versionNumber>
    <versionLabel></versionLabel>
</application>


Для своего приложения надо поменять:



  • id - идентификатор вашего приложения
  • filename - имя файла, который должен быть после сборки
  • name - имя приложения, как оно будет отображаться на экране android'а
  • content - имя swf приложения, из которого собираем
  • fillScreen - true/false - говорит о том, показывать ли сверху системную панельку с часами
  • autoOrients - true/false - говорит о том, надо ли поворачивать приложение при изменении ориентации телефона
  • aspectRation - portrait/landscape - при запске прложения оно должно быть либо в ландшафтной лиюо в портретной ориентации
  • manifestAddiotins - манифест, понятен тем кто знаком с android приложениями
  • versionNumber - версия приложения. не забывайте накручивать перед обновлением
  • icon - описание иконок как и у всех остальных air приложений


iOS:






<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<application xmlns="http://ns.adobe.com/air/application/2.0">
    <id>com.exmple.myapp</id>
    <version>1.0</version>
    <filename>MyApp</filename>
    <description></description>
    <name>MyApp</name>
    <copyright></copyright>
    <initialWindow>
        <content>MyApp.swf</content>
        <systemChrome>standard</systemChrome>
        <transparent>false</transparent>
        <visible>true</visible>
        <fullScreen>false</fullScreen>
        <autoOrients>false</autoOrients>
        <aspectRatio>portrait</aspectRatio>
        <renderMode>gpu</renderMode>
    </initialWindow>
    <customUpdateUI>false</customUpdateUI>
    <allowBrowserInvocation>true</allowBrowserInvocation>
    <icon>
       
    </icon>
    <iPhone>
    <InfoAdditions>
        <![CDATA[
            <key>UIDeviceFamily</key>
            <array>
<string>1</string>
                <string>2</string>
            </array>
        ]]>
    </InfoAdditions>
</iPhone>
</application>

Для своего приложения надо поменять:

Всё аналогично
Важно только 


InfoAdditions - тут условие на каких девайсах будет работать:




1- iPodTouch и iPhone



2- iPad
Теперь напишем build скрипт для ant'а:




<?xml version="1.0" ?>
<project>
    <!-- SDK properties -->
    <property name="SDK_HOME" value="/workspace/AdobeAIRSDK"/>
    <property name="ADT.JAR" value="${SDK_HOME}/lib/adt.jar"/>

    <!-- Project properties -->
    <property name="APP_NAME" value="MyApp"/>
    <property name="APP_ROOT_DIR" value="."/>
    <property name="BUILD_DIR" location="."/>
    <property name="APP_ROOT_FILE" value="MyApp.swf"/>
   
    <property name="STORETYPE" value="pkcs12"/>
    
    <property name="PROVISIONING_PROFILE" value="xxx.mobileprovision"/>
    
    <property name="APP_DESCRIPTOR_IOS" value="ios-app.xml"/>
    <property name="APP_DESCRIPTOR_ANDROID" value="android-app.xml"/>
    
    <property name="KEYSTORE_IOS" value="xxx.p12"/>
    <property name="STOREPASS_IOS" value="xxx"/>
    
    <property name="KEYSTORE_ANDROID" value="xxx.p12"/>
    <property name="STOREPASS_ANDROID" value="xxx"/>
    
    

    <target name="package-ios">
     <echo message="Packaging for iOS"/>
        <java jar="${ADT.JAR}" fork="true" failonerror="true">
            <arg value="-package"/>
            <arg value="-target"/>
            <arg value="ipa-test"/>
            <arg value="-provisioning-profile"/>
            <arg value="${PROVISIONING_PROFILE}"/>
            <arg value="-storetype"/>
            <arg value="${STORETYPE}"/>
            <arg value="-keystore"/>
            <arg value="${KEYSTORE_IOS}"/>
            <arg value="-storepass"/>
            <arg value="${STOREPASS_IOS}"/>
            <arg value="${APP_ROOT_DIR}/${APP_NAME}.ipa"/>
            <arg value="${BUILD_DIR}/${APP_DESCRIPTOR_IOS}"/>
            <arg value="-C"/>
            <arg value="${BUILD_DIR}"/>
            <arg value="${APP_ROOT_FILE}"/>
            <arg value="-C"/>
            <arg value="${BUILD_DIR}"/>
            <arg value="assets"/>
        </java>
    </target>
    
    <target name="package-android">
<echo message="Packaging for Android"/>
<java jar="${ADT.JAR}" fork="true" failonerror="true">
<arg value="-package"/>
<arg line="-target apk"/>
<arg line="-storetype pkcs12"/>
<arg line="-keystore ${


KEYSTORE_ANDROID
}" />


                        <arg line="-storepass 
${STOREPASS_ANDROID}" />

                        <arg value="${APP_ROOT_DIR}/${APP_NAME}.apk"/>

<arg value="${BUILD_DIR}/${APP_DESCRIPTOR_ANDROID}"/>
            <arg value="-C"/>
            <arg value="${BUILD_DIR}"/>
            <arg value="${APP_ROOT_FILE}"/>
            <arg value="-C"/>
            <arg value="${BUILD_DIR}"/>
            <arg value="assets"/>
</java>
</target>
</project>

Здесь надо поменять:



 SDK_HOME - путь до папки где распакован AIR SDK 2.6
 APP_NAME - имя приложения
 APP_ROOT_FILE - имя файла swf приложения
 PROVISIONING_PROFILE - имя mobileprovision профайла ios приложения
 KEYSTORE_IOS - имя p12 файла с сертификатом iOS разработчика (выдается apple)
 STOREPASS_IOS - пароль к нему
 KEYSTORE_ANDROID - имя p12 файла с сертификатом air разработчика 
 STOREPASS_ANDROID - пароль к нему




Сборка


Всё что теперь осталось это собрать в одной папке:
  • build.xml
  • ios-app.xml
  • android.app.xml
  • MyApp.swf
  • xxx.p12
  • xxx.mobileprovision
  • xxx.p12

запустить консоль/терминал, перети в эту папку и выполнить такие команды:

ant package-android

ant package-ios


В результате в той же папке получим ipa и apk файлы, которые можно устанавливать на девайсы.




2 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. Про сертификаты: я для сборка под android использовал сертификат, созданный флешом Почему-то тот же сертификат от apple почему-то был не принят ля сборки под android.

    ОтветитьУдалить