0

为 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 编译正常,没有错误,大小 od ane 文件增加 btu 仍然我从 logcat 收到此错误:

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

我的班级 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>    

有任何想法吗?

4

4 回答 4

0

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

unzip -oq lib/android-support-v4.jar -d android
于 2015-03-10T21:49:57.390 回答
0

https://github.com/mateuszmackowiak/NativeDialogs

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

于 2015-03-10T22:18:49.690 回答
0

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

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

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

于 2014-11-05T08:06:41.390 回答
0

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

步骤: #

1. 将您的 adt 指向 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。
在用户变量--1b-6中选择“PATH” 。单击“编辑”
--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”
-2g。在每个 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

于 2016-01-26T05:06:31.203 回答