尝试使用FlashDevelop将SWF转换为AIR中的独立EXE

时间:2015-11-07 12:10:57

标签: actionscript-3 flash air adobe flashdevelop

这个问题一直困扰着我一段时间,我正试图从我正在制作的游戏的SWF中制作一个独立的EXE,但是我在这期间遇到了很多麻烦。我希望它是独立的,这意味着没有安装程序,我希望用户能够打开EXE并自动开始播放。我正在使用FlashDevelop的AIR AS3投影机项目并且几乎已经解决了所有问题,但最后我仍然遇到了麻烦。我已经能够构建EXE了,但是在启动尝试时我遇到了一个错误:“此应用程序需要一个无法找到的Adobe AIR版本。”我确保我的AIR项目和游戏项目都使用AIR版本17,但它仍然无效。

我将为下面的蝙蝠提供代码,希望有人可以解决这个问题。

Packager.bat

@echo off

:: Set working dir
cd %~dp0 & cd ..

if not exist %CERT_FILE% goto certificate

:: AIR output
if not exist %AIR_PATH% md %AIR_PATH%
set OUTPUT=%AIR_PATH%\%AIR_NAME%%AIR_TARGET%.air

:: Package
echo.
echo Packaging %AIR_NAME%%AIR_TARGET%.air using certificate %CERT_FILE%...
adt -package -keystore bat\TheLabyrinth.p12 -storetype pkcs12 -target bundle The_Labyrinth application.xml -C bin TheLabyrinth.swf TheLabyrinthGame.swf lib\backgrounds\cobblestone.png lib\backgrounds\frameBackground.png lib\backgrounds\fullscreenCobble.png lib\backgrounds\parchment.png lib\backgrounds\parchmentFrameBackground.png lib\spritesheet.png
call adt -package %OPTIONS% %SIGNING_OPTIONS% %OUTPUT% %APP_XML% %FILE_OR_DIR%
if errorlevel 1 goto failed
goto end

:certificate
echo.
echo Certificate not found: %CERT_FILE%
echo.
echo Troubleshooting: 
echo - generate a default certificate using 'bat\CreateCertificate.bat'
echo.
if %PAUSE_ERRORS%==1 pause
exit

:failed
echo AIR setup creation FAILED.
echo.
echo Troubleshooting: 
echo - verify AIR SDK target version in %APP_XML%
echo.
if %PAUSE_ERRORS%==1 pause
exit

:end
echo.

的Application.xml

<?xml version="1.0" encoding="utf-8" ?> 
<application xmlns="http://ns.adobe.com/air/application/17.0">

    <id>TheLabyrinth</id> 
    <versionNumber>1.0</versionNumber> 
    <filename>TheLabyrinth</filename> 

    <name>The Labyrinth</name> 
    <description></description> 
    <copyright></copyright> 

    <initialWindow> 
        <title>The Labyrinth</title> 
        <content>TheLabyrinth.swf</content> 
        <systemChrome>standard</systemChrome> 
        <transparent>false</transparent> 
    <visible>true</visible> 
    <minimizable>true</minimizable> 
    <maximizable>true</maximizable> 
    <resizable>true</resizable> 
</initialWindow> 

<!-- 
More options:
http://livedocs.adobe.com/flex/3/html/File_formats_1.html#1043413
-->
</application>

感谢您对此提供的任何帮助,我已经广泛搜索了答案,我还没有找到解决办法。

1 个答案:

答案 0 :(得分:1)

好的,我忘记了这个问题,但是我会回来回答它,以防其他人偶然发现它。每当使用FlashDevelop创建独立可执行文件时,我都会在创建新项目时选择AIR AS3投影仪。这将包含您需要使用下面的文件进行更改所需的批处理文件(我还将显示您需要进行的任何独特更改)。从那里开始,我从以前的项目中复制批处理文件的设置。

首先我会显示application.xml,因为我们有一些事情需要事先检查。在Debug或Release模式下启动程序时,这些设置将自动填充到此xml中。这个具体的例子来自我女朋友的标题为Charlene的游戏:

<?xml version="1.0" encoding="utf-8"?>
<application xmlns="http://ns.adobe.com/air/application/21.0">
    <id>Charlene</id>
    <versionNumber>1.0</versionNumber>
    <filename>Charlene</filename>
    <name>Charlene</name>
    <initialWindow>
        <title>Charlene</title>
        <content>Charlene.swf</content>
        <systemChrome>standard</systemChrome>
        <transparent>false</transparent>
        <visible>true</visible>
        <minimizable>true</minimizable>
        <maximizable>false</maximizable>
        <resizable>false</resizable>
        <x>0</x>
        <y>0</y>
        <minSize>800 800</minSize>
    </initialWindow>
    <!-- 
    More options:
    http://livedocs.adobe.com/flex/3/html/File_formats_1.html#1043413
    -->
    <supportedProfiles>extendedDesktop</supportedProfiles>
    <android>
        <manifestAdditions><![CDATA[<manifest android:installLocation="auto" xmlns:android="http://schemas.android.com/apk/res/android" />]]></manifestAdditions>
    </android>
</application>

这里有两点需要注意:application xmlns版本必须与您正在使用的AIR版本相同(可以通过单击“项目”,“属性”查看)。如果这不是同一版本,只需更改属性中的xml或版本,否则您的程序将无法编译。

接下来要注意的是supportedProfiles。如果您希望键盘在程序全屏显示时工作,则需要extendedDesktop设置。

现在我们要查看CreateCertificate.bat。您需要在任何其他文件之前运行此批处理文件,因为编译器需要证书来打包您的程序。这将为您的程序创建一个唯一的键,名称为&#34; YourProgramTitle.p12&#34;:

@echo off

:: Set working dir
cd %~dp0 & cd ..

set PAUSE_ERRORS=1
call bat\SetupSDK.bat
call bat\SetupApp.bat

:: Generate
echo.
echo Generating a self-signed certificate...
call adt -certificate -cn %CERT_NAME% 2048-RSA %CERT_FILE% %CERT_PASS%
if errorlevel 1 goto failed

:succeed
echo.
echo Certificate created: %CERT_FILE% with password "%CERT_PASS%"
echo.
if "%CERT_PASS%" == "fd" echo Note: You did not change the default password
echo.
echo HINTS: 
echo - you only need to generate this certificate once,
echo - wait a minute before using this certificate to package your AIR application.
echo.
goto end

:failed
echo.
echo Certificate creation FAILED.
echo.

:end
pause

此处没有特殊设置,转到PackageApp.bat。这是另一个不需要特定更改的批次,此处的设置应该适用于编译项目:

@echo off

:: Set working dir
cd %~dp0 & cd ..

set PAUSE_ERRORS=1
call bat\SetupSDK.bat
call bat\SetupApp.bat

set AIR_TARGET=air/Setup.exe
::set AIR_TARGET=-captive-runtime
set OPTIONS=-tsa none
call bat\Packager.bat

pause

接下来是最重要的一个,Packager.bat。同样,这里没有特殊设置,这个批处理文件应该很好地复制而不是改变:

@echo off

:: Set working dir
cd %~dp0 & cd ..

if not exist %CERT_FILE% goto certificate

:: AIR output
if not exist %AIR_PATH% md %AIR_PATH%
set OUTPUT=-target bundle %AIR_NAME%

:: Package
echo.
echo Packaging %AIR_NAME%%AIR_TARGET%.air using certificate %CERT_FILE%...
call adt -package %OPTIONS% %SIGNING_OPTIONS% %OUTPUT% %APP_XML% %FILE_OR_DIR%
if errorlevel 1 goto failed
goto end

:certificate
echo.
echo Certificate not found: %CERT_FILE%
echo.
echo Troubleshooting: 
echo - generate a default certificate using 'bat\CreateCertificate.bat'
echo.
if %PAUSE_ERRORS%==1 pause
exit

:failed
echo AIR setup creation FAILED.
echo.
echo Troubleshooting: 
echo - verify AIR SDK target version in %APP_XML%
echo.
if %PAUSE_ERRORS%==1 pause
exit

:end
echo.

接下来是RunApp.bat。这里并不多,但无论如何我都会把它包括在内:

@echo off

:: Set working dir
cd %~dp0 & cd ..

set PAUSE_ERRORS=1
call bat\SetupSDK.bat
call bat\SetupApp.bat

echo.
echo Starting AIR Debug Launcher...
echo.

adl "%APP_XML%" "%APP_DIR%"
if errorlevel 1 goto error
goto end

:error
pause

:end

如果您希望cmd在调试器启动之前显示不同的消息,您实际上可以更改echo Starting AIR Debug Launcher...行。

我们会看SetupApp.bat。这有一些参数,你必须改变以适应你的程序:

:: Set working dir
cd %~dp0 & cd ..

:user_configuration

:: About AIR application packaging
:: http://livedocs.adobe.com/flex/3/html/help.html?content=CommandLineTools_5.html#1035959
:: http://livedocs.adobe.com/flex/3/html/distributing_apps_4.html#1037515

:: NOTICE: all paths are relative to project root

:: Your certificate information
set CERT_NAME="Charlene"
set CERT_PASS=fd
set CERT_FILE="bat\Charlene.p12"
set SIGNING_OPTIONS=-storetype pkcs12 -keystore %CERT_FILE% -storepass %CERT_PASS%

:: Application descriptor
set APP_XML=application.xml

:: Files to package
set APP_DIR=bin
set FILE_OR_DIR=-C %APP_DIR% .

:: Your application ID (must match <id> of Application descriptor) and remove spaces
for /f "tokens=3 delims=<>" %%a in ('findstr /R /C:"^[  ]*<id>" %APP_XML%') do set APP_ID=%%a
set APP_ID=%APP_ID: =%

:: Output
set AIR_PATH=air
set AIR_NAME=Charlene

:validation
findstr /C:"<id>%APP_ID%</id>" "%APP_XML%" > NUL
if errorlevel 1 goto badid
goto end

:badid
echo.
echo ERROR: 
echo   Application ID in 'bat\SetupApp.bat' (APP_ID) 
echo   does NOT match Application descriptor '%APP_XML%' (id)
echo.
if %PAUSE_ERRORS%==1 pause
exit

:end

此处,set CERT_NAME="Charlene"行的字符串名称应等于name中的application.xml参数。 set CERT_FILE="bat\Charlene.p12"文件名应与您CreateCertification.bat运行时创建的名称相同(如果您还没有,请立即运行)。 set AIR_NAME=Charlene应该再次与CERT_NAME具有相同的名称(假设您希望已完成的项目与已调试的项目具有相同的名称)。

最后,我们要查看SetupSDK.bat。这个有一行你将不得不改变:

:: Set working dir
cd %~dp0 & cd ..

:user_configuration

:: Static path to Flex SDK
set FLEX_SDK=C:\Users\Alec\AppData\Local\FlashDevelop\Apps\flexairsdk\4.6.0+21.0.0

:: Use FD supplied SDK path if executed from FD
if exist "%FD_CUR_SDK%" set FLEX_SDK=%FD_CUR_SDK%

:validation
if not exist "%FLEX_SDK%\bin" goto flexsdk
goto succeed

:flexsdk
echo.
echo ERROR: incorrect path to Flex SDK in 'bat\SetupSDK.bat'
echo.
echo Looking for: %FLEX_SDK%\bin
echo.
if %PAUSE_ERRORS%==1 pause
exit

:succeed
set PATH=%FLEX_SDK%\bin;%PATH%

set FLEX_SDK应该有Flex + AIR SDK的路径。如果您需要知道路径,请点击Project标签,然后点击Properties,导航至SDK标签,点击Manage,点击Installed Flex SDK参数,单击InstalledSDK[] Array右侧的省略号方块,确保您已在左侧Members侧(或具有相同版本的版本)选择了最新版本的SDK作为application.xml文件),展开窗口,您应该会看到Location字段下的路径。

好的,这是漫长的道路。测试您的项目以确保更新本地swf,然后运行PackageApp.bat。如果一切设置正确,应该没有错误,几秒后,cmd会说&#34;按任意键继续&#34;一个带有项目名称的新文件夹应该出现在项目的目录中。此文件夹应包含另一个名为Adobe AIR的文件夹,一个lib文件夹,一个META-INF文件夹,一个包含项目名称的exe文件,一个包含项目名称的swf和mimetype文件。你应该能够毫无问题地运行exe。你有它!希望这适用于其他任何有这个问题的人。

快速说明:我注意到在打包相对较大的项目时,有时批处理文件不会编译完整的项目。在完全编译之前可能需要多次尝试,但我发现了一个骗子。它需要一个已经存在的完全编译的项目。您需要做的就是将项目的swf(通常位于bin文件夹中)复制到打包的项目文件夹中。您可能还需要复制其他文件(如果您已更改它们),例如application.xml(已编译的文件位于META-INF\AIR目录中)或lib文件夹如果你在运行时导入任何东西。这可以让你绕过重新编译!