相关疑难解决方法(0)

适用于Android的AIR 3原生扩展 - 可以/如何包含第三方库?

随着围绕AIR 3中的本机扩展支持的所有新的炒作,我没有找到确认或否认可以在本机Android实现中包含和使用外部JAR的单一事物.

所有这些示例基本上都展示了嵌入内置Android API的能力.但是,如果有人想要使用数百个库中的一个使其更容易呢?当然看起来这应该是可能的.我将尝试概述我所做的事情,也许有人会发现一个缺陷:

  1. 使用第三方Android库XYZ的编译导入成功创建了原生Android库.
  2. 导出的Android项目为JAR文件. 注意:引用的第三方JAR位于jar内的/ lib中.
  3. 成功创建了ActionScript库(SWC)以与本机Android库进行交互.
  4. 从SWC,extension.xml,Android JAR和library.swc创建了ANE包(用于从SWC中提取的平台Android-ARM).
    注意:还尝试将第三方库放在此处概述的文件结构中:http://help.adobe.com/en_US/air/extensions/WSf268776665d7970d-24823354 12ffea65006-8000.html#WSf268776665d7970d-6be13ace1308aaebeca-7fff.我认为这更适合使用JNI或其他任何运行时类型执行,因此该文章让我有点困惑.
  5. 在示例Flex Mobile项目中使用ANE.
  6. 在测试DroidX设备上构建并安装APK文件.
  7. 可以在LogCat中成功查看AIR应用程序加载(和跟踪语句) "ActivityManager: Displayed com.me.androidapp/.AppEntry"
  8. 可以成功地看到AIR应用程序通过运行时调用本机Android Java代码来实例化扩展和上下文. "mye_native: MyExtension.initialize", "mye_native: MyExtensionContext.createContext"
  9. 一旦AIR应用程序尝试调用本机函数,它就会爆炸,无法从第三方Android库中找到这些类: E dalvikvm: Could not find class 'com.thirdparty.SomeClass', referenced from method com.me.nativeExtentions.MyExtensionFunction.call

有任何想法吗?它似乎应该以这种方式工作.

我注意到的一件事是,当我从我的纯Java Android应用程序(也有第三方安卓库)中分离出APK和Dex时,看起来第三方的类已包含在其中(不仅仅是jar参考).当我使用我的Flex APK做同样的事情时,我发现只有我自己的Java类和Adobe的,而第三方无法找到我能看到的.

我在Adobe论坛上发布了这个,但我想我会试试SO智囊团.谢谢.

air android flex-mobile

11
推荐指数
1
解决办法
5681
查看次数

AdvertisingIdClient.getAdvertisingIdInfo(context) 正在抛出 NoClassDefFoundError

我正在尝试使用 AdvertisingIdClient 获取我的 AIR 应用程序的广告 ID。所以我确实喜欢dvertisingIdClient.Info adInfo = AdvertisingIdClient.getAdvertisingIdInfo(context)A。我没有收到任何编译时错误。我ANE由此生成。当控制遇到这个语句时,它立即抛出NoClassDefFoundError。我不明白到底发生了什么。这是我的扩展代码

public class GetAdvertismentID implements FREFunction
{
    @Override
    public FREObject call(FREContext arg0, FREObject[] arg1)
    {
        Activity activity = arg0.getActivity();
        Context context = activity.getApplicationContext();

        String advertId = "initializeByGet\n";

        try
        {
            AdvertisingIdClient.Info adInfo = AdvertisingIdClient.getAdvertisingIdInfo(context);
            //if (!adInfo.isLimitAdTrackingEnabled())
                    //advertId = advertId + adInfo.getId();
        } catch(Error e) {

            String stackTrace = "";
            StackTraceElement[] stackArray = e.getStackTrace();
            for(int i = 0; i < stackArray.length; i++)
                stackTrace += stackArray[i].toString() + "\n";

            advertId …
Run Code Online (Sandbox Code Playgroud)

air android ads air-native-extension google-play-services

5
推荐指数
1
解决办法
4400
查看次数