В последнее время часто приходится готовить приложения на flash под мобильные девайсы. Очень полезно в рамках прототипной или предпродажной деятельности.
Для своего приложения надо поменять:
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>
Для своего приложения надо поменять:
Всё аналогично
Важно только
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 ${
<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>
Здесь надо поменять:
Так как задача по расшариванию этого умения передо мной вставала уже больше чем два раза, пора написать пост.
Итак, приступим. Для сборки нам потребуется:
- Flash приложение в формате swf
- Adobe AIR 2.6 SDK
- Apahe ant
- p12 сертификат для сборки air приложений
- p12 сертификат и mobileprovision профиль от Apple iOS Developer Program
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>
<?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 приложений
<?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_NAME - имя приложения
APP_ROOT_FILE - имя файла swf приложения
PROVISIONING_PROFILE - имя mobileprovision профайла ios приложения
KEYSTORE_IOS - имя p12 файла с сертификатом iOS разработчика (выдается apple)
STOREPASS_IOS - пароль к нему
KEYSTORE_ANDROID - имя p12 файла с сертификатом air разработчика
STOREPASS_ANDROID - пароль к нему
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 файлы, которые можно устанавливать на девайсы.
Этот комментарий был удален автором.
ОтветитьУдалитьПро сертификаты: я для сборка под android использовал сертификат, созданный флешом Почему-то тот же сертификат от apple почему-то был не принят ля сборки под android.
ОтветитьУдалить