java - एंड्रॉइड के लिए एडोब एयर 3.1 नेटिव एक्सटेंशन-एक्शनस्क्रिप्ट में रिक्त एक्सटेंशन संदर्भ




android actionscript-3 (4)

मैं एंड्रॉइड प्लेटफ़ॉर्म के लिए नेटिव एक्सटेंशन पर काम कर रहा हूं और मैं फंस गया हूं ...

Google Nexus One (2.3.6) पर एंड्रॉइड 2.1 परीक्षण ...

यह पंक्ति नल रिटर्न करती है

this.context = ExtensionContext.createExtensionContext("com.company.ane.LocationManager", "");

यह विस्तार विवरण फ़ाइल है:

<extension xmlns="http://ns.adobe.com/air/extension/3.1">
<id>com.company.ane.LocationManager</id>
<versionNumber>0.0.1</versionNumber>
<platforms>
<platform name="iPhone-ARM">
  <applicationDeployment>
    <nativeLibrary>libANELocationManager.a</nativeLibrary>
    <initializer>ExtInitializer</initializer>
    <finalizer>ExtFinalizer</finalizer>
  </applicationDeployment>
</platform>
<platform name="Android-ARM">
<applicationDeployment>         
   <nativeLibrary>libANELocationManager.jar</nativeLibrary>
     <initializer>com.company.ane.android.ANELocationManager</initializer>
</applicationDeployment> 
       </platform></platforms></extension>

यह मेरा पैकेज कमांड है:

adt -package -target ane ./../../app/libs/locationmanager.ane ./../extension.xml -swc ane_location_manager.swc -platform iPhone-ARM library.swf libANELocationManager.a -platform Android-ARM library.swf libANELocationManager.jar

इस स्तर पर विस्तार वास्तव में सरल है ... मैं बस स्ट्रिंग मान वापस अपने ऐप पर लौटने की कोशिश कर रहा हूं ...

package com.company.ane.android;

import java.util.HashMap;
import java.util.Map;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;

import android.location.LocationListener;
import android.location.LocationManager;

public class ANELocationManagerContext extends FREContext {

public LocationManager locationManager;
public LocationListener locationListener;

@Override
public void dispose() {
    // TODO Auto-generated method stub

}

@Override
public Map<String, FREFunction> getFunctions() {

    Map<String, FREFunction> functionMap = new HashMap<String, FREFunction>();

    functionMap.put("ExtensionTest", new ExtensionTest());

    return functionMap;
}

    }


 package com.company.ane.android;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.adobe.fre.FREObject;
import com.adobe.fre.FREWrongThreadException;

public class ExtensionTest implements FREFunction {

@Override
public FREObject call(FREContext context, FREObject[] args) {

    FREObject result = null;
    //ANELocationManagerContext ctx = (ANELocationManagerContext) context;


    try 
    {
        result  = FREObject.newObject("It works!");  

    }
    catch (FREWrongThreadException fwte)
    {
        fwte.printStackTrace();
    }

    return result;
}

 }


package com.company.ane.android;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREExtension;

public class ANELocationManager implements FREExtension {

@Override
public FREContext createContext(String contextType) {

    return new ANELocationManagerContext();
}

@Override
public void dispose() {
    // TODO Auto-generated method stub

}

@Override
public void initialize() {
    // TODO Auto-generated method stub

}

}

आपको नल संदर्भ कहां मिल रहा है? क्या यह उपकरण या आकाशवाणी सिम्युलेटर में चल रहा है?

अगर वर्तमान प्लेटफॉर्म के लिए एक्सटेंशन कंटैन्टेक्स नहीं पाया जा सकता है जो आप चल रहे हैं (जैसे: विंडोज सिम्युलेटर) NULL लौटा है, भले ही यह डिवाइस पर ठीक चल सकता है एएनई को संकलित करते समय आप एक डिफ़ॉल्ट संदर्भ सेट कर सकते हैं जिसका उपयोग तब किया जाएगा जहां कभी विशिष्ट मैच नहीं मिला। यह डिफ़ॉल्ट लक्ष्य पूरी तरह से AS3 में लिखा जा सकता है, और असमर्थित डिवाइसों को फ़िक्र करने या उनका संचालन करने के लिए उपयोगी है।

एडोब एयर दस्तावेज में एक डिफ़ॉल्ट कार्यान्वयन शामिल करने के बारे में अधिक जानकारी है यहां देखें: http://help.adobe.com/en_US/air/extensions/WSf268776665d7970d-2482335412ffea65006-8000.html

संपादित करें: वूप्स, मुझे लगता है कि आप डिवाइस पर चल रहे हैं। मैं अभी भी एक डिफ़ॉल्ट कोशिश करूँगा और देखें कि क्या आप यह काम कर सकते हैं, यह समस्या को कम करने में मदद कर सकता है।

2 संपादित करें: क्या आप फ्रीक्वेंसी इंटरफेस (जावा में) को लागू कर रहे हैं? मुझे नहीं लगता कि आपके पोस्ट कोड में


सबसे बुनियादी विस्तार में अभी 2 वर्ग शामिल हैं

आपको मुफ़्त एक्सटेंशन इंटरफेस को कार्यान्वित करने की आवश्यकता है:

package com.your.package;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREExtension;

public class YourExtension implements FREExtension 
{
public static FREContext context;

@Override
public FREContext createContext(String contextType) 
{
    return context = new YourContext();
}

@Override
public void dispose() 
{
    context = null;
}

@Override
public void initialize() 
{
}
}

और फिर संदर्भ आपके ऊपर दिया गया वर्ग है:

package com.your.package;

import java.util.HashMap;
import java.util.Map;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;

public class YourContext extends FREContext 
{
@Override
public void dispose() 
{
}

@Override
public Map<String, FREFunction> getFunctions() 
{
    Map<String, FREFunction> functionMap = new HashMap<String, FREFunction>();
    // Create your map      
    return functionMap;
}
}

एक्सटेंशन एक्सएमएल का वर्ग यहां सबसे पहले होना चाहिए, अर्थात मुफ़्त एक्सटेंशन क्रियान्वयन।

इसके अलावा जब तक आप इस एक्सटेंशन का आईफोन संस्करण नहीं बना रहे हैं, तो आपको अपने एक्सटेंशन.एक्सएमएल से आईफोन नोड को निकालना चाहिए।


मुझे पहले भी यही समस्या मिली थी और वास्तव में समस्या पैदा नहीं हुई थी एक्स्टेंशन कंसोर्ट () फ़ंक्शन ही, लेकिन क्लास FREContext और ज्यादातर समय यह विधि में सार्वजनिक map getFunctions ()

मूल रूप से, उदाहरण के लिए मैंने अपने FREContext में उपयोग करने के लिए 3 FREFunctions की घोषणा की है:

functionMap.put("initMe", new initFunction() );
functionMap.put("getVersion", new getVersion() );
functionMap.put("showBrowser", new showBrowser() ); // For example, I got some exceptions in this function as I declare some Java variable that is not supported by the current Android SDK version like LocationManager (for example)

तो जब FREContext को आरम्भिक किया जाता है, तो यह वर्ग प्रत्येक फ़ंक्शन के कंस्ट्रक्टर के माध्यम से चलाएगा और अगर मुझे मिलकर मिलते-जुलते समारोह के कन्स्ट्रक्टर में कुछ अपवाद मिले, तो FREContext क्रैश हो जाता है और एक्स्टेंशन कंसोर्ट () बनाने के लिए वापस लौटा सकता है। इस समस्या का समाधान यह है कि यदि आपको यह सुनिश्चित नहीं है कि आपको अपवाद कहां मिलता है, तो अपने सभी फ़्रेफंक्शन को एक-एक करके टिप्पणी करने के लिए कहें, जो अपवाद का कारण बनता है। आपके मामले में, मैं 2 चर पर शक है

  public LocationManager locationManager;
  public LocationListener locationListener;

अपवाद के कारण हैं कृपया उन्हें बाहर कीजिए और पुनः प्रयास करें। एएनई के निर्माण में आपकी मदद करने वाली एक और चीज एडीटी के डीबगर को चालू एआईआर एंड्रॉइड ऐप के बंदरगाह को जोड़कर अपने एडीटी से एएनई को डिबग करने की कोशिश कर रही है। आप इस लेख http://www.adobe.com/devnet/air/articles/ane-android-devices.html से एएनई को डीबग कैसे करें के बारे में अधिक जान सकते हैं

आशा करता हूँ की ये काम करेगा।


एएनई-वीडियो बनाने की कोशिश करते समय मैं एक ही समस्या में गया था:

_context = ExtensionContext.createExtensionContext(EXTENSION_ID, null);

// _context is set to null, with no other error info

मैंने 1.7 जेडीके (मैक ओएस एक्स मैवरिक्स पर चल रहे) के बजाय 1.6 जेडीके के साथ संकलित करके समस्या का हल किया।

इस पोस्ट ने अस्थायी रूप से जेडीके को 1.6 पर वापस रोल करने में मदद की।

इस एडोब आलेख से सुराग आया:

इस समय Adobe टूलिंग 7 जावा के साथ काफी संगत नहीं है और आप लिंकिंग और पैकेजिंग समय पर त्रुटियों में चल सकते हैं।







air-native-extension