HarmonyOS 鸿蒙Next A工程中编译好的so文件,如何在B工程中拷贝引用

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next A工程中编译好的so文件,如何在B工程中拷贝引用

A工程编译出libA.so文件,直接在oh_modules中拷贝出来放入到B工程,如何导入这个libA.so文件并调用其中的方法? 

2 回复

你可以将libA.so文件复制到B工程的libs目录下,在B工程的oh_package.json5文件中,添加对libA.so文件的依赖。在B工程的代码中,使用动态加载的方式加载libA.so文件。 参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-ndk-4-V5

此报错表明import(“libentry.so”) 返回的类型没有被明确指定,‌编译器无法确定其类型,‌n需要为导入的模块提供一个明确的类型。‌需要在index.d.ts里定义模块类型。

// index.d.ts

declare module "libentry.so" {

    export function someFunction(): string;

    export const someConstant: number;

    // 根据实际导出的API添加更多类型定义

}

然后在B工程中调用

import * as testNapi from "libentry.so";

testNapi.someFunction(); // 现在这里会有类型检查和自动补全

或者你可以将导入的结果断言为一个 any 类型,‌但这会违反你遇到的编译器规则:‌

const testNapi = (await import("libentry.so")) as any;

尽量避免此做法,更好的做法是尽可能保持类型的安全性,建议还是在.d.ts文件中明确导出的类型。‌

更多关于HarmonyOS 鸿蒙Next A工程中编译好的so文件,如何在B工程中拷贝引用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next A工程中编译好的so文件,要在B工程中拷贝引用,可以按照以下步骤操作:

  1. 定位so文件: 首先,在A工程的输出目录中定位到编译好的so文件。通常这些文件会位于build/intermediates/ndkBuild/debug/lib/{abi}/目录下,其中{abi}代表目标ABI(如armeabi-v7aarm64-v8a等)。

  2. 拷贝so文件: 将找到的so文件拷贝到B工程的对应目录中。建议创建一个与A工程相同的目录结构,以保持一致性。例如,将so文件复制到B工程的app/src/main/jniLibs/{abi}/目录下。

  3. 配置B工程的build.gradle: 确保B工程的build.gradle文件中配置了NDK支持,并且没有排除任何ABI。通常,这可以通过在android块中添加或确认以下配置来实现:

    android {
        ...
        defaultConfig {
            ...
            ndk {
                abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' // 根据需要配置ABI
            }
        }
    }
    
  4. 同步并构建B工程: 在Android Studio中同步项目并构建B工程,确保so文件被正确引用和打包进APK。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部