算法同学提供了一个图像分析能力,使用 C/C++ 实现,依赖了 Tensorflowlite、 OpenCV 等库。要在 Android 上使用这个能力,需要进行移植。移植可分为两步,第一步是面向 Android 设备的指令集构建 C/C++ 代码以及其依赖的库,第二步是编写一个 Wrapper 封装第一步生成的库并供 JNI 调用。
针对第一步,我们首先要知道我们要部署的 Android 设备用的是什么型号的 CPU,它支持的指令集有哪些,存储是大端还是小端,我们要构建的是 native code,没有中间解释或适配,必须是 CPU 能直接理解的,Android 把指令集有哪些,存储是大端还是小端等特性组合抽象为了 ABI(Android Binary Interface),即 arm64-v8a, armeabi-v7a。我们把 Wrapper 作为主体,算法同学的 C/C++ 代码是我们依赖,Tensorflowlite、OpenCV 是我们的间接依赖。我们要确保 prebuilt 的间接依赖的构建架构和我们要部署的 CPU 的架构(ABI)是一致的,否则无法兼容。另外注意 Android Dynamic Linker 的特性,为 Shared Library 提供 SONAME 信息,否则无法加载成功。具体的请参见问答以及