您的位置:首页 > 文旅 > 美景 > 深圳模板网站制作_广州网站制作哪家公司好_google推广怎么做_长沙网站seo源头厂家

深圳模板网站制作_广州网站制作哪家公司好_google推广怎么做_长沙网站seo源头厂家

2025/1/8 0:41:57 来源:https://blog.csdn.net/sjw890821sjw/article/details/144943867  浏览:    关键词:深圳模板网站制作_广州网站制作哪家公司好_google推广怎么做_长沙网站seo源头厂家
深圳模板网站制作_广州网站制作哪家公司好_google推广怎么做_长沙网站seo源头厂家

1、关于多个har依赖问题?

harA依赖harB和harC,harB依赖harC,这种关系如何构建依赖呢?

  1. 直接依赖和间接依赖都上远程仓库,采取版本号形式依赖。
  2. 如果不上远程仓库,推荐使用:直接依赖和间接依赖的har包都获取了放到工程中,用overrides指向工程中的har包路径。
  3. 如果子依赖是本地har依赖,则需要放到直接依赖的模块里面去依赖然后构建出.har给其他工程用例如:A依赖B.har,B.har依赖C.har,那么构建B.har的时候,C.har需要放到B模块中去依赖构建出B.har。

2、如何指定或判断当前编译架构?

指定编译架构:

  1. build-profile.json5文件中,增加abiFilters配置
"externalNativeOptions": {"path": "./src/main/cpp/CMakeLists.txt","arguments": "","cppFlags": "","abiFilters": ["arm64-v8a"]
}
  1. build-profile.json5文件的arguments或者命令行中,添加编译参数
-DOHOS_ARCH=armeabi-v7a

判断编译架构:
CMakeList.txt中OHOS_ARCH宏表示当前编译架构

if (${OHOS_ARCH} STREQUAL "armeabi-v7a")
message('armeabi-v7a')
elseif (${OHOS_ARCH} STREQUAL "arm64-v8a")
message('arm64-v8a')
else()
message("unkonow")
endif()

3、在启动调试或运行应用/服务时,安装HAP出现错误,提示“error: install failed due to grant request permissions failed”错误信息。

默认应用等级为normal,只能使用normal等级的权限,如果使用了system_basic或system_core等级的权限,将导致报错。
在UnsgnedDebugProfileTemplate.json文件中修改apl等级,调整成system_basic或system_core等级,重新签名打包即可。

4、如何实现ArkTS与C/C++的对象传递?

ArkTS调用C/C++:

  1. ArkTS类对象传递至NAPI侧;
  2. NAPI获取对象属性并输出;
  3. NAPI调用对象方法。
// Animals类
class Animals {name: stringage: numberconstructor(name: string, age: number) {this.name = name;this.age = age;}add(a: number, b: number): number {return a + b;}
}
// ArkTS传递对象中
Button("TestObject").onClick(() => {let ani:Animals = new Animals('Bob',5)testNapi.TestObject(ani)})
// NAPI接受对象并处理
static napi_value TestObject(napi_env env, napi_callback_info info) {size_t argc = 1;napi_value args[1] = {nullptr};napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);napi_value name, age;napi_get_named_property(env, args[0], "name", &name);napi_get_named_property(env, args[0], "age", &age);size_t itemLength;napi_get_value_string_utf8(env, name, nullptr, 0, &itemLength);char *str = new char[itemLength + 1];napi_get_value_string_utf8(env, name, &str[0], itemLength + 1, &itemLength);OH_LOG_INFO(LOG_APP, "name is %{public}s", str);uint32_t num;napi_get_value_uint32(env, age, &num);OH_LOG_INFO(LOG_APP, "age is %{public}d", num);napi_value add;napi_get_named_property(env, args[0], "add", &add);// 创建参数数组napi_value arr[2];napi_create_int32(env, 10, &arr[0]);napi_create_int32(env, 5, &arr[1]);napi_value result;uint32_t res;napi_call_function(env, args[0], add, 2, arr, &result);napi_get_value_uint32(env, result, &res);OH_LOG_INFO(LOG_APP, "res is %{public}d", res);return nullptr;
}

C/C++调用ArkTS:

  1. ArkTS侧传递回调方法到NAPI侧;
  2. NAPI创建napi_value指针类型的对象作为参数传递到回调方法;
  3. ArkTS调用回调方法获取NAPI侧传入的参数并做修改;
  4. NAPI侧获取修改后的参数并输出。
Button("CallbackToArkTs").onClick(() => {let da: Record<string, number> = testNapi.CallbackToArkTs((value: object) => {let data: Record<string, number> = value as Record<string, number>;console.info("修改前type: " + data["type"].toString())console.info(JSON.stringify(value))data["type"] += 10return value;});console.info(JSON.stringify(da))})
static bool Napi_AddPropertyInt32(napi_env env, napi_value obj, const char *key, int32_t value) {napi_value key_napi = nullptr;napi_status status = napi_create_string_utf8(env, key, NAPI_AUTO_LENGTH, &key_napi);napi_value value_napi = nullptr;status = napi_create_int32(env, value, &value_napi);status = napi_set_property(env, obj, key_napi, value_napi);return true;
}static napi_value CallbackToArkTs(napi_env env, napi_callback_info info) {// 获取ArkTS参数size_t argc = 1;napi_value js_cb = nullptr;napi_get_cb_info(env, info, &argc, &js_cb, nullptr, nullptr);// native回调到ts层的objectnapi_value argv = nullptr;napi_create_object(env, &argv);Napi_AddPropertyInt32(env, argv, "type", 1);Napi_AddPropertyInt32(env, argv, "index", 2);// native回调到ts层napi_value result = nullptr;napi_call_function(env, NULL, js_cb, 1, &argv, &result);// 获取ts修改后的objectnapi_value typeNumber = nullptr;napi_get_named_property(env, result, "type", &typeNumber);int32_t number;napi_get_value_int32(env, typeNumber, &number);OH_LOG_INFO(LOG_APP, "修改后type: %{public}d", number);// 返回修改后的objectreturn result;
}

5、List水平布局如何根据内容自适应高度?

怎么解决List组件中ListItem水平布局,list高度不会根据内容自适应?

可以通过垂直Scroll组件嵌套水平List实现List自适应子节点高度。

@Entry
@Component
struct Index {build() {Column() {Flex() {// 嵌套Scroll组件使水平布局的list组件高度自适应内容Scroll() {List() {ListItem() {Text('测试1')}.backgroundColor(Color.Red).height(80)ListItem() {Text('测试2')}.backgroundColor(Color.Gray).height(80)ListItem() {Text('测试3')}.backgroundColor(Color.Yellow).height(80)ListItem() {Text('测试4')}.backgroundColor(Color.White).height(80)}.listDirection(Axis.Horizontal).alignListItem(ListItemAlign.Center).scrollBar(BarState.Off).backgroundColor(Color.Blue)}}.backgroundColor(Color.Green).width('100%').height('200')}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com