如何往鴻蒙系統源碼中添加第三方軟件包
https://harmonyos.51cto.com/#zz
打 開鴻蒙系統的源碼,可以看到有這么一個文件夾:third_party。里面存放的是第三方的代碼。

點開我們可以看到有很多第三方代碼:

后續我們如果需要往系統中添加、移植任何開源代碼,都可以添加到這個文件夾中。接下來,教大家如何添加一個自己的軟件包,名字為a_myparty。
1. 新建一個文件夾a_myparty
2. 往文件中放置軟件包源碼
這里我放在的是 myparty.c文件
3. 新建BUILD.gn文件
整個代碼目錄如下:

4. myparty.c文件內容如下:
其實,我這個只是為了演示的,所以里面代碼沒什么作用
- #include <stdio.h>
- void myparty_test(void)
- {
- printf("first myparty \r\n");
- }
5. BUILD.gn文件內容如下:
BUILD.gn文件主要是描述了軟件包的相關信息,包括編譯哪些源文件,頭文件路徑、編譯方式(目前Hi3861 只支持靜態加載)
- import("//build/lite/config/component/lite_component.gni")
- import("//build/lite/ndk/ndk.gni")
- #這里是配置頭文件路徑
- config("a_myparty_config") {
- include_dirs = [
- ".",
- ]
- }
- #這里是配置要編譯哪些源碼
- a_myparty_sources = [
- "myparty.c",
- ]
- #這里是靜態鏈接,類似于Linux系統的 .a文件
- lite_library("a_myparty_static") {
- target_type = "static_library"
- sources = a_myparty_sources
- public_configs = [ ":a_myparty_config" ]
- }
- #這里是動態加載,類似于Linux系統的 .so文件
- lite_library("a_myparty_shared") {
- target_type = "shared_library"
- sources = a_myparty_sources
- public_configs = [ ":a_myparty_config" ]
- }
- #這里是入口,選擇是靜態還是動態
- ndk_lib("a_myparty_ndk") {
- if (board_name != "hi3861v100") {
- lib_extension = ".so"
- deps = [
- ":a_myparty_shared"
- ]
- } else {
- deps = [
- ":a_myparty_static"
- ]
- }
- head_files = [
- "//third_party/a_myparty"
- ]
- }
到了這里我們基本上就寫完了。
最后我們要讓這個第3放軟件包編譯到我們固件中。
6. 打開第3方軟件包功能,使其參與編譯:
打開vendor\hisi\hi3861\hi3861\BUILD.gn 文件
在下圖部分添加 "//third_party/a_myparty:a_myparty_static"
別忘了分號。。。

7. 使用
到了這里我們的第3方軟件包就添加完成了,接下來我們要在app 代碼中使用它
打開 applications\sample\wifi-iot\app\my_first_app\BUILD.gn 文件,沒有的同學請自己先完成hello world入門例程先。

添加 "//third_party/a_myparty" 頭文件路徑,BUILD.gn文件內容如下:
- static_library("my_first_app") {
- sources = [
- "hello_world.c"
- ]
- include_dirs = [
- "//utils/native/liteos/include",
- "//third_party/a_myparty"
- ]
- }
打開hello_world.c文件,內容如下:
- #include "ohos_init.h"
- #include "ohos_types.h"
- #include "stdio.h"
- //導入頭文件
- #include "myparty.h"
- void HelloWorld(void)
- {
- printf("%s %d \r\n", __FILE__, __LINE__);
- printf("[DEMO] Hello world.\n");
- //調用第3方軟件包 的函數 myparty_test()
- myparty_test();
- }
- SYS_RUN(HelloWorld);
8.最后編譯測試即可看到打印信息:
- [DEMO] Hello world.
- first myparty
說明添加成功。
https://harmonyos.51cto.com/#zz