如何将C++代码编译成HarmonyOS手机可以使用的so动态链接库

如何将C++代码编译成HarmonyOS手机可以使用的so动态链接库

HarmonyOS
2024-08-22 23:23:58
浏览
收藏 0
回答 2
待解决
回答 2
按赞同
/
按时间
zxjiu

将c代码,添加到devEco中进行编译:

1、IDE创建工程Native C++工程

2、cpp目录下添加c++业务代码

3、修改CMakeLists.txt, 将业务代码加入工程编译

4、添加napi适配层代码

参考指南:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/napi/Readme-CN.md#/openharmony/docs/blob/master/zh-cn/application-dev/napi/neural-network-runtime-guidelines.md

分享
微博
QQ
微信
回复
2024-08-23 14:42:12
鱼弦CTO

在 HarmonyOS 上,通过 NDK (Native Development Kit),你可以将 C++ 代码编译成 .so 动态链接库,以便在应用程序中使用。以下是详细步骤:

### 步骤 1:安装和配置 DevEco Studio

首先,你需要安装 Huawei 的 DevEco Studio,这是一个专门用于 HarmonyOS 开发的集成开发环境。

### 步骤 2:创建或打开一个项目

你可以选择创建一个新的 HarmonyOS 项目,或者在现有的项目中添加 C++ 支持。

#### 新建项目

  1. 打开 DevEco Studio,并选择​​New Project​​。
  2. 选择​​HarmonyOS Empty Feature Ability​​ 模板,然后点击​​Next​​。
  3. 设置项目名称、保存路径等信息,然后点击​​Finish​​。

### 步骤 3:添加 C++ 支持

如果你的项目还没有 C++ 支持,可以通过以下方式添加:

  1. 在​​src/main​​ 目录下创建一个子目录 cpp (通常是放置你的 C++ 源文件)。
  2. 在​​src/main​​ 目录下创建一个​​CMakeLists.txt​​ 文件。

### 步骤 4:编写 C++ 代码

在 ​​cpp​​ 目录下创建你的 C++ 源文件,例如 ​​native-lib.cpp​​:

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

### 步骤 5:配置 CMakeLists.txt

在项目的 ​​src/main​​ 目录下创建并编辑 ​​CMakeLists.txt​​ 文件:

cmake_minimum_required(VERSION 3.4.1)

# 添加源文件
add_library(
    native-lib
    SHARED
    src/main/cpp/native-lib.cpp)

# 查找 log 库
find_library(
    log-lib
    log)

# 指定链接库
target_link_libraries(
    native-lib
    ${log-lib})

### 步骤 6:修改 build.gradle 文件

确保你的 ​​build.gradle​​ 文件中包含对 CMake 和 NDK 的支持。例如:

android {
    ...
    defaultConfig {
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }

    externalNativeBuild {
        cmake {
            path "src/main/CMakeLists.txt"
        }
    }
}

### 步骤 7:编译生成 .so 文件

在 DevEco Studio 中,点击 ​​Build > Make Project​​,这将会编译你的 C++ 代码并生成相应的 .so 动态链接库。成功编译后,你可以在 ​​app/build/intermediates/cmake/debug/obj/<架构>/​​ 目录下找到生成的 ​​.so​​ 文件,例如:​​libnative-lib.so​​。

### 步骤 8:在 Java/Kotlin 中加载 .so 文件

在你的 Java 或 Kotlin 代码中,使用 ​​System.loadLibrary​​ 加载生成的 .so 文件:

public class MainActivity extends AppCompatActivity {

    static {
        System.loadLibrary("native-lib");
    }

    public native String stringFromJNI();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv = findViewById(R.id.sample_text);
        tv.setText(stringFromJNI());
    }
}

### 总结

通过上述步骤,你可以轻松将 C++ 代码编译成 HarmonyOS 手机可以使用的 .so 动态链接库。简要流程为:

  1. 安装和配置 DevEco Studio。
  2. 创建或打开一个 HarmonyOS 项目。
  3. 添加 C++ 支持。
  4. 编写 C++ 代码。
  5. 配置 CMakeLists.txt 文件。
  6. 修改 build.gradle 文件以包含对 CMake 和 NDK 的支持。
  7. 编译生成 .so 动态链接库。
  8. 在 Java/Kotlin 代码中加载 .so 文件。

这些步骤应该能够帮助你顺利完成 C++ 动态链接库的编译和集成。如果有更多问题或需要进一步的帮助,请随时提问!

分享
微博
QQ
微信
回复
2024-08-23 14:56:14
相关问题
native如何通过命令行编译成so
2534浏览 • 1回复 待解决
HarmonyOS C++使用aki编译报错
309浏览 • 1回复 待解决
Ctex编译成功了但是没有pdf生成
3917浏览 • 0回复 待解决
怎么编译成app/apk有知道吗?
488浏览 • 2回复 待解决
如何将js传map转成c++对象
739浏览 • 1回复 待解决
c编译so,导出成nativehar静态
186浏览 • 1回复 待解决
C++源码如何编译HarmonyOS使用
414浏览 • 1回复 待解决
HAR中C++编写sonative方法使用
1117浏览 • 1回复 待解决