Skip to content

Android NDK 项目集成 ACL Pack 完整指南

本文介绍如何将 ACL Pack 添加到 Android NDK 项目、初始化 license,并运行第一个算子。

前置条件

  • Android Studio + NDK 26.3+(Clang 17)
  • ACL Pack Android arm64-v8a SDK 压缩包
  • 对应版本的 license.dat

项目结构

app/src/main/cpp/
  ├── CMakeLists.txt
  ├── include/acl/      # 从 SDK 中复制
  └── native-lib.cpp
app/src/main/jniLibs/arm64-v8a/
  └── libacl.a          # 从 SDK 中复制
app/src/main/assets/
  └── license.dat

CMakeLists.txt

cmake
cmake_minimum_required(VERSION 3.22.1)
project("acl_demo")

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_library(acl STATIC IMPORTED)
set_target_properties(acl PROPERTIES
    IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/arm64-v8a/libacl.a
)

add_library(native-lib SHARED native-lib.cpp)

target_include_directories(native-lib PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_link_libraries(native-lib acl m log atomic z)

原生代码

cpp
#include <jni.h>
#include <acl/acl.h>
#include <acl/api.h>

extern "C" JNIEXPORT jint JNICALL
Java_com_example_acl_MainActivity_initLicense(JNIEnv* env, jobject /*thiz*/, jstring path) {
    const char* cpath = env->GetStringUTFChars(path, nullptr);
    int rv = acl::init(cpath);
    env->ReleaseStringUTFChars(path, cpath);
    return rv;
}

extern "C" JNIEXPORT void JNICALL
Java_com_example_acl_MainActivity_processFrame(
    JNIEnv* env, jobject /*thiz*/,
    jlong src, jlong dst, jint w, jint h) {

    acl::neon::cvtcolor::channelSwap<acl::BGR2RGB>(
        reinterpret_cast<uint8_t*>(src),
        reinterpret_cast<uint8_t*>(dst),
        w, h
    );
}

License 文件

license.dat 放在 assets/ 目录,运行时再复制到应用私有目录:

kotlin
val licenseFile = File(filesDir, "license.dat")
assets.open("license.dat").use { input ->
    licenseFile.outputStream().use { output ->
        input.copyTo(output)
    }
}
val rv = initLicense(licenseFile.absolutePath)

常见坑点

  • ABI 错误: ACL Pack 只提供 arm64-v8a,确保 abiFilters 包含它。
  • 版本不匹配: Starter license 链接 Pro 库会返回 -1005
  • 未调用 init()acl::init() 成功前调用任何算子都会返回 -1001

下一步

阅读完整集成指南API 参考


v1.0.3 Release 下载最新 Android SDK。