这个问题一直困扰着我一段时间,我正试图从我正在制作的游戏的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>
感谢您对此提供的任何帮助,我已经广泛搜索了答案,我还没有找到解决办法。
答案 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
文件夹如果你在运行时导入任何东西。这可以让你绕过重新编译!