如何通过Adt.jar用的NativeProcess的在Adobe AIR帮助建立.air文件?文件、NativeProcess、jar、Adt

2023-09-08 15:13:29 作者:念卿抚琴

<?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">
<fx:Declarations>       
</fx:Declarations>
<fx:Script>
    <![CDATA[

        private var nativeProcess:NativeProcess;

        private function onGo() : void {
            outputField.text = "";

            var file:File = new File("C:\\Program Files (x86)\\Java\\jdk1.6.0_18\\bin\\java.exe");
            var descriptorFile:File = new File("C:\\AirPackageApp-app.xml");
            var swfFile:File = new File("C:\\AirPackageApp.swf");
            var processArgs:Vector.<String> = new Vector.<String>;
            processArgs.push("-jar");
            processArgs.push("C:\\adt.jar");
            processArgs.push("-checkstore");
            processArgs.push("-storetype");
            processArgs.push("pkcs12");
            processArgs.push("-keystore");
            processArgs.push("-storepass");
            processArgs.push("sybrant"); 
            processArgs.push("c:\\nodename.air");           
            processArgs.push(descriptorFile.nativePath);           
            processArgs.push(swfFile.nativePath);           

            var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
            nativeProcessStartupInfo.arguments = processArgs;
            nativeProcessStartupInfo.executable = file;

            nativeProcess = new NativeProcess();
            nativeProcess.addEventListener(ProgressEvent.STANDARD_ERROR_DATA,onCertErrOutputData);
            nativeProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA,onCertOutputData);
            nativeProcess.start(nativeProcessStartupInfo);
        }

        private function onCertErrOutputData(event:ProgressEvent) : void {
            var certResponse:String = new String();
            certResponse = nativeProcess.standardError.readUTFBytes(nativeProcess.standardError.bytesAvailable);
            trace(certResponse);
            outputField.text += certResponse;   
            if ( certResponse.substr(0,5) == "valid") {
                trace("Correct password!");
                nativeProcess.removeEventListener(ProgressEvent.STANDARD_ERROR_DATA,onCertOutputData);
                nativeProcess.exit();
            } else {
                trace("Incorrect password! Error...");
                nativeProcess.removeEventListener(ProgressEvent.STANDARD_ERROR_DATA,onCertOutputData);
                nativeProcess.exit();
            }
        }

        protected function onCertOutputData(event:ProgressEvent):void
        {
            trace(nativeProcess.standardOutput.readUTFBytes(nativeProcess.standardOutput.bytesAvailable));
        }

    ]]>
</fx:Script>
<s:layout>
    <s:VerticalLayout/>
</s:layout>
<s:Button label="go" click="onGo()" />
<s:TextInput id="passField"/>
<s:TextArea id="outputField" width="100%" height="100%"/>   

这与命令prompt.It工作产生在C中nodename.air文件时,工作一切正常:\ nodename.air。但是,使用本机的过程时,它的工作原理高达下面的参数

It works everything fine when working with command prompt.It generate nodename.air file in C:\nodename.air. But when using native process it works upto following arguments

  processArgs.push("-storepass");
 processArgs.push("sybrant");

在,如果我missspelled我的空气descriptor.xml文件或我的SWF文件,它不会引发任何错误味精,但它在命令提示符下抛出错误。(操作系统Windows 7,Java版本1.6)

After that if i missspelled my air-descriptor.xml file or my swf file it doesn't throw any error msg but it throws error in command prompt.(OS Windows 7, Java version 1.6)

谢谢, Raja.J

Thanks, Raja.J

推荐答案

试试这个

本类可能对你有帮助 air_command.bat Java的罐子adt.jar -package -storetype PKCS12 -keystore keyfile.p12 -storepass输入mypassword SampleApp.air SampleApp-app.xml中SampleApp.swf

This class might helpful for you air_command.bat java -jar adt.jar -package -storetype pkcs12 -keystore keyfile.p12 -storepass mypassword SampleApp.air SampleApp-app.xml SampleApp.swf

在运行应用程序

确保Java类路径设置 在桌面extendedDesktop mobileDevice exendedMobileDevice

extendedDesktop

extendedDesktop

    package
{
 import flash.desktop.NativeProcess;
 import flash.desktop.NativeProcessStartupInfo;
 import flash.events.ProgressEvent;
 import flash.filesystem.File;

 import mx.controls.Alert;

public class PlatformPackaging
 {
 private var nativeProcess:NativeProcess;
 private var isErrorOccured:Boolean;

 private var batFile:File;
 private var cmdFile:File;

 private function get isWindows():Boolean
 {
 return true;
 }

 public function PlatformPackaging()
 {
 }

 public function start(targetPlatform:String):void
 {
 if(isWindows)
 {
 if(targetPlatform == TargetPlatform.APPLE_IPA)
 {
 batFile = File.applicationDirectory.resolvePath("publish/ipa_command.bat");
 cmdFile = new File("c:\\Windows\\System32\\cmd.exe");
 }
 else if(targetPlatform == TargetPlatform.WINDOWS_AIR)
 {
 batFile = File.applicationDirectory.resolvePath("publish/air_command.bat");
 cmdFile = new File("c:\\Windows\\System32\\cmd.exe");
 }
 else if(targetPlatform == TargetPlatform.ANDROID_APK)
 {
 batFile = File.applicationDirectory.resolvePath("publish/apk_command.bat");
 cmdFile = new File("c:\\Windows\\System32\\cmd.exe");
 }
 }

 proceedToPackaging();

 }

 private function proceedToPackaging():void {

 var processArgs:Vector.<String> = new Vector.<String>;

 processArgs.push("/c");
 processArgs.push(batFile.nativePath);

 var workingDirectory:File = File.applicationDirectory.resolvePath("publish/");
 var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();

 nativeProcessStartupInfo.arguments = processArgs;
 nativeProcessStartupInfo.executable = cmdFile;
 nativeProcessStartupInfo.workingDirectory = workingDirectory;

 nativeProcess = new NativeProcess();
 nativeProcess.addEventListener(ProgressEvent.STANDARD_ERROR_DATA,onStandardErrorOutputDataHandler);
 nativeProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA,onStandardOutputDataHandler);
 nativeProcess.start(nativeProcessStartupInfo);
 }

 private function onStandardErrorOutputDataHandler(event:ProgressEvent) : void
 {
 var certResponse:String = nativeProcess.standardError.readUTFBytes(nativeProcess.standardError.bytesAvailable);

 trace(certResponse);
 nativeProcess.removeEventListener(ProgressEvent.STANDARD_ERROR_DATA,onStandardOutputDataHandler);
 nativeProcess.exit();
 }

 Alert.show(certResponse,'Error');
 }

 protected function onStandardOutputDataHandler(event:ProgressEvent):void
 {
 var status:String = nativeProcess.standardOutput.readUTFBytes(nativeProcess.standardOutput.bytesAvailable);

 Alert.show(status)
 }

 }
}
 
精彩推荐
图片推荐