【HarmonyOS】ArkTS Native開發——使用 system函式建立檔案
ArkTS是HamronyOS優選的主力語言,但官方文件指南中對於Native應用開發並沒有詳細的描述,只有一篇Codelab可以學習(簡易Native C++ 示例(ArkTS) (huawei.com)),本文將在Native應用中使用C/C++的system方法建立一個檔案。
【具體實現】
Step1.
首先在DevEco Studio中選擇建立native應用程式
Step2.
工程建立後整體目錄如下,
首先src目錄下有兩個資料夾cpp和ets,cpp目錄主要是用來定義對外的介面實現(index.d.ts),C++程式碼功能實現(hello.cpp)和編譯的工具鏈(CMakeLists.txt)。
ets目錄即為我們主要工程目錄,實現應用的主體邏輯和UI介面。
預設工程目錄cpp/types/libentry中有一個示例的介面add,它在index.d.ts中定義為兩個數相加返回相加後的結果:
export const add: (a: number, b: number) => number;
package.json中定義了對外呼叫的靜態庫名稱和介面檔案
{
"name": "libentry.so",
"types": "./index.d.ts"
}
然後在ets目錄下index.ets中就可以匯入這個libentry.so的靜態庫檔案,使用定義的方法了
import hilog from '@ohos.hilog'; import testNapi from 'libentry.so'//匯入靜態庫 @Entry @Component struct Index { @State message: string = 'Hello World' build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() => { hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3));//呼叫定義的native方法 }) } .width('100%') } .height('100%') } }
Step3.
下面就是我們C++層程式碼邏輯的實現了:
首先在hello.cpp新增建立檔案的函式實現,使用了strcpy和system函式,所以需要匯入對應的庫檔案
#include <cstdlib>
#include <string.h>
這邊有一個需要注意的地方是建立的檔案目錄路徑必須是應用的私有檔案目錄下(/data/data/包名/檔名),否則檔案不能建立成功。
static napi_value CreateFile(napi_env env, napi_callback_info info){
napi_value ret;
char command[50];
strcpy( command, "touch /data/data/com.example.nativets/1.txt" );
int result=system(command);
napi_create_double(env,result, &ret);
return ret;
}
然後我們需要在Init方法的desc[]中註冊模組,“createFile”為定義介面,CreateFile是我們上面C++的方法名。
{ "createFile", nullptr, CreateFile, nullptr, nullptr, nullptr, napi_default, nullptr },
模組註冊後需要在介面檔案index.d.ts中新增這個介面的定義
export const createFile:()=>number;
CMakeList檔案不需要修改,直接編譯工程就可以在ets的index.ets中使用這個新的介面 createFile()了。
Step4.
執行程式並執行方法,驗證檔案是否建立成功可以通過adb命令檢視系統”/data/data/包名/檔名”是否存在。
欲瞭解更多更全技術文章,歡迎訪問https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh