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)