【问题标题】:FragmentActivity in Adobe AIR ANEAdobe AIR ANE 中的 FragmentActivity
【发布时间】: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>    

有什么想法吗?

【问题讨论】:

    标签: java android actionscript air-native-extension ane


    【解决方案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

          【讨论】:

            猜你喜欢
            • 2015-11-15
            • 1970-01-01
            • 2015-06-22
            • 1970-01-01
            • 1970-01-01
            • 2012-05-26
            • 1970-01-01
            • 2013-04-18
            • 2014-03-02
            相关资源
            最近更新 更多