Adobe AIR ANE 中的 FragmentActivity

Posted

技术标签:

【中文标题】Adobe AIR ANE 中的 FragmentActivity【英文标题】:FragmentActivity in Adobe AIR ANE 【发布时间】:2014-12-18 22:05:37 【问题描述】:

android 编写原生扩展,以显示来自 github 的“更好的选择器”。为了显示这个库中的组件,我编写了 Activity extends FragmentActivity 来获取 FragmentManager。我将 android-support-v4.jar 中的类包含到我的项目中 - 没有结果,我尝试使用带有 packagedDependencies 标记的 platform.xml 将此 jar 包含到 ane 中 - 没有结果。我无法完成这项工作。

我也尝试包含

jar -uf nativepickers.jar android

android-support-v4.jar 到我的 ane jar 中。它没有帮助。 我的 android-arm 的 platform.xml :

<platform xmlns="http://ns.adobe.com/air/extension/15.0">

<packagedDependencies>
    <packagedDependency>android-support-v4.jar</packagedDependency>
  </packagedDependencies>
  <packagedResources>
    </packagedResources>
</platform>

ane 编译正常,没有错误,文件大小增加 btu 仍然我从 logcat 收到此错误:

无法解析 Lcom/insolutions/nativepickers/OpenCalendarPickerActivity 的超类; (159) 类 'Lcom/insolutions/nativepickers/OpenCalendarPickerActivity;' 的链接失败的 找不到从方法 com.insolutions.nativepickers.OpenCalendarPicker.call 引用的类“com.insolutions.nativepickers.OpenCalendarPickerActivity”

我的班级 OpenCalendarPickerActivity:

package com.insolutions.nativepickers;


import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.doomonafireball.betterpickers.calendardatepicker.CalendarDatePickerDialog;
import com.doomonafireball.betterpickers.calendardatepicker.CalendarDatePickerDialog.OnDateSetLi stener;

public class OpenCalendarPickerActivity extends FragmentActivity 

@Override
  protected void onCreate(Bundle savedInstanceState) 

        CalendarDatePickerDialog calendarDatePickerDialog = CalendarDatePickerDialog.newInstance(new OnDateSetListener() 

  @Override
  public void onDateSet(CalendarDatePickerDialog dialog, int year,
  int monthOfYear, int dayOfMonth) 

  Intent result = new Intent();
  result.putExtra("yearUTC", year);
  result.putExtra("monthUTC", monthOfYear);
  result.putExtra("dateUTC", dayOfMonth);

  setResult(RESULT_OK, result);
  finish();


  
  , 2014, 10, 20);
       calendarDatePickerDialog.show(getSupportFragmentManager(), "tag");
  

我在我的 android ane 项目中包含 jar 是这样的:fa1.jpg

然后我用代码开始我的活动:

package com.insolutions.nativepickers;


import android.content.Context;
import android.content.Intent;
import android.util.Log;

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

public class OpenCalendarPicker implements FREFunction 


static final int SELECT_DATE_RESULT = 10001;  // The request code

@Override
  public FREObject call(FREContext context, FREObject[] data) 
  // TODO Auto-generated method stub
  Context appContext = context.getActivity().getApplicationContext();

  int yearUTC = 0,monthUTC=0,dateUTC = 0;
  try
  
  yearUTC = data[0].getAsInt();
  monthUTC = data[1].getAsInt();
  dateUTC = data[2].getAsInt();
  
  catch (Exception e)
  
  Log.e("nativepickers", "Motyla noga!");
  


  Intent intent = new Intent(appContext, OpenCalendarPickerActivity.class);
  intent.putExtra("yearUTC", yearUTC);
  intent.putExtra("monthUTC", monthUTC);
  intent.putExtra("dateUTC", dateUTC);
  context.getActivity().startActivityForResult(intent, SELECT_DATE_RESULT);
  return null;
  


我用这个命令编译 ANE:

/Applications/Adobe\ Flash\ Builder\4.7/eclipse/plugins/com.adobe.flash.compiler_4.7.0.349722/AIRSDK/bin/adt -package -target ane NativePickers.ane extension.xml -swc NativePickers.swc -platform Android-ARM -platformoptions platform-android.xml -C android .

还有我的 extension.xml 文件:

<extension xmlns="http://ns.adobe.com/air/extension/15.0">
    <id>com.insolutions.nativepickers</id>
    <versionNumber>1.0.0</versionNumber>
    <platforms>
        <platform name="Android-ARM">
            <applicationDeployment>
                <nativeLibrary>nativepickers.jar</nativeLibrary>
  <initializer>com.insolutions.nativepickers.NativePickers</initializer>
            </applicationDeployment>
        </platform>


    </platforms>
</extension>    

有什么想法吗?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题...我尝试了所有方法,然后我意识到问题出在“android-support-v4.jar”,我现在不知道为什么,但是如果您使用 jar,您就会遇到该错误,使用 FragmentActivity 或 v4 中的任何其他类...但我从 SDK 管理器下载“支持存储库”,然后将 java 文件放入我的项目中,我使用 java 文件生成 jar 并且...一切正常!!! ! :)

还有其他事情......我不使用“packagedDependencies”方法总是失败。所以我解压jar并将包文件放入我的jar中......我认为这样更好,永远不会失败。

我会放一张图片...但是我今天才注册XD...

【讨论】:

【参考方案2】:

我在导入时遇到了同样的问题。 解决方案是从 android-support-v4.jar 中提取类,并将它们添加到我的 jar 中。您可以在创建 jar 之前简单地运行:

unzip -oq lib/android-support-v4.jar -d android

【讨论】:

【参考方案3】:

https://github.com/mateuszmackowiak/NativeDialogs

使用它而不是从头开始编写所有内容。

【讨论】:

【参考方案4】:

这是我所做的,但它可能会产生其他问题,我还没有解决。 这将启用 -platform 选项并消除 FlashBuilder 在编译时引发的一连串错误。

步骤:#

1.将您的广告指向 AIRSDK 包 -1a。这位于 flashbuilder install\eclipse\plugins\com.adobe.flash.compiler_4.7.0.349722\AIRSDK\bin -1b。将此附加到您的 PATH 环境变量 --1b-1.右击“计算机” --1b-2。选择“属性” --1b-3。点击“高级设置” --1b-4。点击“环境变量” --1b-5。在用户变量中选择“PATH” --1b-6。点击“编辑” --1b-7。用此路径替换以前的 adt 路径 flashbuilder install\eclipse\plugins\com.adobe.flash.compiler_4.7.0.349722\AIRSDK\bin --1b-8。点击“确定” 2. 要消除 FlashBuilder 编译错误,您必须编辑一些文件 -2a。转到 flashbuilder install\eclipse\plugins\com.adobe.flash.compiler_4.7.0.349722\AIRSDK\lib\android\lib\resources\app_entry\res -2b。将此文件夹复制到备份位置。 -2c。返回文件夹 -2d。这里有各种“值”文件夹。您必须对位于此位​​置的所有“值”文件夹中的所有文件执行这些更改。 -2e。在每个 strings.xml 文件中,将“string”替换为“add-resource type="string"" -2f。在每个 strings.xml 文件中,将“/string”替换为“/add-resource” -2克。在每个 styles.xml 文件中,将“style”替换为“add-resource type="style"" -2小时。在每个 styles.xml 文件中,将“/style”替换为“/add-resource” -2i。转到 flashbuilder 安装\eclipse\plugins\com.adobe.flash.compiler_4.7.0.349722\AIRSDK\lib\ -2i-1。将 adt.jar 复制到备份位置 -2i-2。返回位置 -2i-3。解压 adt.jar -2i-4。在解压后的 jar 中转到“com\adobe\air\apk” -2i-5。打开“AndroidManifest_template.xml” -2i-6。将 android:theme 设置为“@android:style/Theme.NoTitleBar” -2i-7。保存文件 -2i-8。重新压缩并放回 flashbuilder install\eclipse\plugins\com.adobe.flash.compiler_4.7.0.349722\AIRSDK\lib** **3.现在您应该可以使用-platformoptions进行编译,并且应该可以找到platform.xml

【讨论】:

以上是关于Adobe AIR ANE 中的 FragmentActivity的主要内容,如果未能解决你的问题,请参考以下文章

带有 Air Native Extension (ANE) 的 Air 应用程序中的无效/未知命名空间

使用 Milkman Games 的 AdMob ANE 看不到广告 [Adobe AIR]

导出到 Air 原生扩展时包括 info.plist (iOS)

Falsh ANE有关Flash中与Java调用时候注意的一些事项

适用于 iOS 8 的 64 位 ANE 向后兼容

适用于 AIR Android 应用程序的 Chromecast 和 ANE - 访问 android.os