谷粒的泥坑

🌿谷粒的生活笔记 —— 在数字世界的泥坑中,播种代码、文字的种子,静待每一份热爱自然生长

ANE 开发保姆级帮助

Adobe AIR ANE(AIR Native Extension)开发流程涉及多个步骤,包括设置开发环境、编写原生代码、打包 ANE、在 AIR 应用中使用 ANE 等。以下是一个完整的解决方案:

1. 设置开发环境

安装必要的软件

  • Adobe AIR SDK:用于编译和打包 AIR 应用。
  • Java Development Kit (JDK):用于编译 Java 代码(如果开发 Android ANE)。
  • Xcode:用于编译 iOS 代码(如果开发 iOS ANE)。
  • Android Studio:用于编译 Android 代码。

2. 创建 ANE 项目结构

创建一个目录结构来组织你的 ANE 项目,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/path/to/ane_project/
├── android/
│ ├── src/
│ │ └── com/
│ │ └── example/
│ │ └── MyExtension.java
│ ├── AndroidManifest.xml
│ └── build.gradle
├── ios/
│ ├── MyExtension.h
│ ├── MyExtension.m
│ └── MyExtensionANE.xcodeproj
├── default/
│ └── MyExtension.swc
├── extension.xml
└── build.xml

3. 编写原生代码

Android 原生代码

android/src/com/example/MyExtension.java 中编写 Java 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.example;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREExtension;

public class MyExtension implements FREExtension {
@Override
public void initialize() {}

@Override
public FREContext createContext(String contextType) {
return new MyExtensionContext();
}

@Override
public void dispose() {}
}

iOS 原生代码

ios/MyExtension.m 中编写 Objective-C 代码:

1
2
3
4
5
6
7
8
9
#import "FlashRuntimeExtensions.h"

void MyExtensionInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet) {
// 初始化代码
}

void MyExtensionFinalizer(void* extData) {
// 清理代码
}

4. 编写 ActionScript 接口

default/MyExtension.as 中编写 ActionScript 接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package {
import flash.external.ExtensionContext;

public class MyExtension {
private var context:ExtensionContext;

public function MyExtension() {
context = ExtensionContext.createExtensionContext("com.example.MyExtension", null);
}

public function someFunction():void {
context.call("someFunction");
}
}
}

5. 配置 extension.xml

extension.xml 中配置 ANE 的元数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<extension xmlns="http://ns.adobe.com/air/extension/32.0">
<id>com.example.MyExtension</id>
<versionNumber>1.0.0</versionNumber>
<platforms>
<platform name="Android-ARM">
<applicationDeployment>
<nativeLibrary>android/bin/MyExtension.jar</nativeLibrary>
<initializer>com.example.MyExtension</initializer>
</applicationDeployment>
</platform>
<platform name="iPhone-ARM">
<applicationDeployment>
<nativeLibrary>ios/MyExtension.a</nativeLibrary>
<initializer>MyExtensionInitializer</initializer>
<finalizer>MyExtensionFinalizer</finalizer>
</applicationDeployment>
</platform>
</platforms>
</extension>

6. 编译原生代码

编译 Android 代码

使用 Gradle 编译 Android 代码:

1
2
cd /path/to/ane_project/android
gradle build

编译 iOS 代码

使用 Xcode 编译 iOS 代码:

  1. 打开 MyExtensionANE.xcodeproj
  2. 选择目标设备并编译项目。

7. 打包 ANE

使用 ADT 工具打包 ANE:

1
adt -package -target ane MyExtension.ane extension.xml -swc default/MyExtension.swc -platform Android-ARM -C android/bin . -platform iPhone-ARM -C ios . -platform default -C default .

8. 在 AIR 应用中使用 ANE

在你的 AIR 应用中,添加 ANE 并使用它:

1
2
3
4
5
6
7
8
<application xmlns="http://ns.adobe.com/air/application/32.0">
<id>com.example.MyApp</id>
<versionNumber>1.0.0</versionNumber>
<extensions>
<extensionID>com.example.MyExtension</extensionID>
</extensions>
...
</application>

在 ActionScript 代码中使用 ANE:

1
2
3
4
import com.example.MyExtension;

var myExtension:MyExtension = new MyExtension();
myExtension.someFunction();

9. 打包 AIR 应用

使用 ADT 工具打包 AIR 应用:

1
adt -package -target apk-captive-runtime -storetype pkcs12 -keystore /path/to/keystore.p12 -storepass your-keystore-password bin/MyApp.apk src/app-app.xml -C bin .

通过以上步骤,你可以创建一个完整的 ANE 开发流程,并在 AIR 应用中使用它。如果有任何问题,请提供更多详细信息以便进一步帮助。