鴻蒙NDK開發


鴻蒙NDK開發

0. 代碼地址

https://github.com/zchrissirhcz/cmake_examples/tree/master/ohos_ndk_example

1. 序言

就像開發Android要用Android Studio一樣,Android Studio(簡稱AS)其實是基於IDEA+gradle插件+android插件開發而來。

鴻蒙系統,你可以認為它和android有點像,但又是超越android的存在,除了手機,還可以其他各種設備。。然后,我們需要一個對標Android Studio的開發工具。那就是DevEco Studio了。

Android Studio是一個IDE,基於gradle執行構建,應用層寫Java/Kotlin,NDK層則可以用C/C++開發。

DevEco Studio也是一個IDE,基於gradle執行構建,應用層寫Java/JS,NDK層可以用C/C++開發。

總之,NDK層,大家都是C/C++寫代碼,基於CMake構建。如果你是搞NDK開發的,應該知道這一點:把編譯器和cmake的toolchain文件配置好,不用IDE就可以開發了。

Android NDK可以手動從官網下載;但是鴻蒙NDK似乎沒法從官網直接下載,需要在DevEco Studio中下載。

1. 安裝DevEco Studio以及NDK

官網說明文檔:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415

要點:

  1. 注冊華為賬號,郵箱或手機號

  2. 下載DevEco Studio安裝包

  3. File->Settings->Appearance & Behavior->System Settings->HarmonyOS SDK,勾選Native安裝

安裝時可以手動改Sdk安裝位置,默認在C盤,我改為了D:\soft\Huawei\sdk,只要不是在DevEco Studio安裝目錄里面都可以。

  1. gradle代理

遇到的問題是,連接到huaweicloud的gradle相關的下載總是失敗。后來發現,由於先前我配置過Android開發環境,配置過gradle代理,需要關掉gradle代理才能讓DevEco順暢下載。即:

C:\Users\zz\.gradle\gradle.properties文件,臨時改名(回頭用Android Studio時改回來)

2. OHOS NDK開發(命令行方式)

從鴻蒙的NDK相關的cmake toolchain里面可以發現,鴻蒙開放系統,被簡稱為了OHOS,估計是Open Harmony Operating System的縮寫吧。

OHOS的NDK安裝在sdk里面。例如我的:
ohos sdk目錄:D:\soft\Huawei\sdk;
ohos ndk目錄:D:\soft\Huawei\sdk\native\3.0.0.80;
ohos ndk的cmake toolchain文件:D:\soft\Huawei\sdk\native\3.0.0.80\build\cmake\ohos.toolchain.cmake

到這里,習慣於命令行方式執行交叉編譯的工程師們都知道怎么做了。

作為樣例,我貼一下我的OHOS NDK的hello world的相關文件:

cmake_minimum_required(VERSION 3.15)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

project(hello)

add_library(hello STATIC
    ${CMAKE_SOURCE_DIR}/hello.h
    ${CMAKE_SOURCE_DIR}/hello.cpp
)

hello.cpp

#include "hello.h"

//#include <stdio>
#include <iostream>

void hello(const char* name)
{
    if (name==NULL) {
        //printf("Hello World\n");
        std::cout << "Hello World\n";
    } else {
        //printf("Hello %s\n", name);
        std::cout << "Hello " << name << "\n";
    }
}

hello.h

#ifndef HELLO_H
#define HELLO_H

void hello(const char* name);

#endif

build/ohos-arm64-v8a.bat

@echo off

set OHOS_NDK=D:/soft/Huawei/sdk/native/3.0.0.80
set TOOLCHAIN=%OHOS_NDK%/build/cmake/ohos.toolchain.cmake

REM echo "=== TOOLCHAIN is: $TOOLCHAIN"

set BUILD_DIR=ohos-arm64-v8a
if not exist %BUILD_DIR% md %BUILD_DIR%
cd %BUILD_DIR%

cmake -G Ninja ^
    -DCMAKE_TOOLCHAIN_FILE=%TOOLCHAIN% ^
    -DOHOS_ARCH="arm64-v8a" ^
    -DCMAKE_BUILD_TYPE=Debug ^
    ../..

ninja

cd ..

這里注意系統中應當先裝好了cmake和ninja並且放在了系統PATH中。當然,你也可以用OHOS NDK里面裝好的cmake。

在cmd中切換到build目錄,執行ohos-arm64-v8a.bat,可以生成靜態庫文件libhello.a

3. OHOS NDK開發(IDE模式)

Android Studio中在創建項目的時候可以選擇帶Native的開發,會生成CMakeLists.txt和相應C++文件。DevEco Studio目前暫時支持的創建項目模板不多,還不能直接生成NDK相關文件。不過手動創建CMakeLists.txt和C++文件,應該還是比較容易的,對於做過NDK開發的人來說沒啥問題。

除了CMake和C/C++代碼,還需要修改模塊的build.gradle文件,讓gradle知道怎么調用cmake。官方文檔:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/build_config-0000001052902431

貼一下我的entry模塊的build.gradle,其中卡殼的地方是需要手動指定 CMAKE_TOOLCHAIN_FILE 路徑。這一點需要DevEco Studio改進(或者是我沒有正確配置?如果知道還請指出):

apply plugin: 'com.huawei.ohos.hap'
ohos {
    compileSdkVersion 3
    defaultConfig {
        compatibleSdkVersion 3
    }
    externalNativeBuild {
        path "src/main/cpp/CMakeLists.txt"   //CMake配置入口,提供CMake構建腳本的相對路徑
        arguments "-DCMAKE_TOOLCHAIN_FILE=D:/soft/Huawei/sdk/native/3.0.0.80/build/cmake/ohos.toolchain.cmake"    //傳遞給CMake的可選編譯參數
        abiFilters "arm64-v8a"     //用於設置本機的ABI編譯環境
        cppFlags ""   //設置C++編譯器的可選參數
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testCompile'junit:junit:4.12'
}

如果沒有指定 OHOS 的 CMAKE_TOOLCHAIN_FILE 文件,會報錯說stdio.h找不到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM