当前位置: 首页 > news >正文

免费建立自己的网站搜索引擎营销与seo优化

免费建立自己的网站,搜索引擎营销与seo优化,上海企业定制礼品,办公室装修计入什么费用DevecoStudio使用Native 今天,给大家带来的是关于DevecoStudio中使用Native进行开发 个人拙见:为什么要使用Native?无论是JS还是TS在复杂的情况下运行速度,肯定不如直接操作内存的C/C的运行速度快,所以,会选择使用Native;这里面的过程是什么?通过映射转化,使用napi提供的接口…

DevecoStudio使用Native

今天,给大家带来的是关于DevecoStudio中使用Native进行开发

个人拙见:为什么要使用Native?无论是JS还是TS在复杂的情况下运行速度,肯定不如直接操作内存的C/C++的运行速度快,所以,会选择使用Native;这里面的过程是什么?通过映射转化,使用napi提供的接口调用CMake后的C/C++的函数

个人代码–点我

第一步-建立Native项目

image-20241126104203994

第二步-去建立自己的demo

  1. 找到该路径src/main/cpp,再该路径下建一个demo

  2. demo包下依次建立include包,src包,CMakeLists.txt文件

  3. 准备一些测试文件

    1. include目录–存放.h头文件

      #ifndef _HEAD_H
      #define _HEAD_H
      // 加法
      int add(int a, int b);
      // 减法
      int subtract(int a, int b);
      // 乘法
      int multiply(int a, int b);
      // 除法
      double divide(int a, int b);
      #endif
      
    2. src目录–存放.cpp文件

      #include <iostream>
      #include "../include/head.h"using namespace std;int add(int a,int b){return a+b;
      }#include <iostream>
      #include "../include/head.h"using namespace std;double divide(int a, int b) { return a / b; }#include <iostream>
      #include "../include/head.h"using namespace std;int main() {int a = 20;int b = 12;printf("a = %d, b = %d\n", a, b);printf("a + b = %d\n", add(a, b));printf("a - b = %d\n", subtract(a, b));printf("a * b = %d\n", multiply(a, b));printf("a / b = %f\n", divide(a, b));return 0;
      }#include <iostream>
      #include "../include/head.h"using namespace std;int multiply(int a, int b) { return a * b; }#include <iostream>
      #include "../include/head.h"using namespace std;int subtract(int a, int b) { return a - b; }    
      
  4. 编写CMakeLists.txt

    cmake_minimum_required(VERSION 3.5.0)
    project(demo1)
    # 添加头文件搜索路径,包括当前目录和 include 子目录
    include_directories(${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}/include)
    # 收集 src 目录下所有的 .cpp 文件,存储到 SRC_LIST 变量中
    file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
    # 添加库文件搜索路径
    link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)
    # 使用收集到的源文件创建一个名为 calc 的共享库
    add_library(calc SHARED ${SRC_LIST})
    

第三步-在ets文件中运行自己的demo接口

在上面,我们已经写好了自己的demo接口,下面,就去看如何运行这个demo的接口

  1. 找到napi_init.cpp文件

    1. image-20241126105355420

    2. 文件修改如下

      #include "napi/native_api.h"
      #include "demo/include/head.h" // demo头文件
      static napi_value Add(napi_env env, napi_callback_info info) {size_t argc = 2;napi_value args[2] = {nullptr};napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);napi_valuetype valuetype0;napi_typeof(env, args[0], &valuetype0);napi_valuetype valuetype1;napi_typeof(env, args[1], &valuetype1);double value0;napi_get_value_double(env, args[0], &value0);double value1;napi_get_value_double(env, args[1], &value1);napi_value sum;napi_create_double(env, add(value0, value1), &sum);return sum;
      }
      // demo接口
      static napi_value NAPI_Global_sub(napi_env env, napi_callback_info info) {// TODO: implements the code;// 声明接受两个参数size_t argc = 2;napi_value args[2] = {nullptr}; // 用在存放JS对象在内存中的位置  类似于*void// testNapi.sub(2, 3)napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);// get的方法都是用来把js类型转换成C++数据类型double value0;napi_get_value_double(env, args[0], &value0);double value1;napi_get_value_double(env, args[1], &value1);// value0 + value1 这里是C++里面的类型// create方法都是用来创建JS数据类型napi_value sub;napi_create_double(env, subtract(value0, value1), &sub);return sub;
      }
      EXTERN_C_START
      static napi_value Init(napi_env env, napi_value exports) {napi_property_descriptor desc[] = {{"add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr},{"sub", nullptr, NAPI_Global_sub, nullptr, nullptr, nullptr, napi_default, nullptr}}; // 定义导出的demo函数napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);return exports;
      }
      EXTERN_C_ENDstatic napi_module demoModule = {.nm_version = 1,.nm_flags = 0,.nm_filename = nullptr,.nm_register_func = Init,.nm_modname = "entry",.nm_priv = ((void *)0),.reserved = {0},
      };extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }
      
    3. 找到与demo同级目录下的CMakeLists.txt文件

      1. image-20241126105626623

      2. 添加demo子目录到构建系统,并连接demo生成的库文件calc

        # the minimum version of CMake.
        cmake_minimum_required(VERSION 3.5.0)
        project(NativeDemo)# 设置变量 NATIVERENDER_ROOT_PATH 为当前源代码目录的路径
        set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})if(DEFINED PACKAGE_FIND_FILE)include(${PACKAGE_FIND_FILE})
        endif()include_directories(${NATIVERENDER_ROOT_PATH}${NATIVERENDER_ROOT_PATH}/include)# 创建一个名为 entry 的共享库,源文件是 napi_init.cpp
        add_library(entry SHARED napi_init.cpp)
        # 添加 demo 子目录到构建系统
        add_subdirectory(demo)
        # 将 libace_napi.z.so 和 calc 库链接到 entry 库
        target_link_libraries(entry PUBLIC libace_napi.z.so calc)
        
    4. 接下来修改,暴露出的接口Index.d.ts文件

      1. image-20241126105907878

      2. 添加我们在napi_init.cpp中添加的接口(演示的话,为了方便只添加一个)

        export const add: (a: number, b: number) => number;
        export const sub: (a: number, b: number) => number;
        
    5. 大家可以尝试运行一下了–以下是成功运行情况

image-20241126110943133

  1. 调用

    import { hilog } from '@kit.PerformanceAnalysisKit';
    import DemoNapi from 'libentry.so'; // 包名自定义,没有影响@Entry
    @Component
    struct Index {@State a:number = 0@State b:number = 0@State result1:number = 0@State result2:number = 0build() {Column({space:10}) {Row(){Text('NAPI初体验-四则运算器').textAlign(TextAlign.Center).fontSize(25)}.width("100%").justifyContent(FlexAlign.Center)Row({space:10}){TextInput({placeholder:'请输入第一个数'}).onChange((value)=>{this.a = parseInt(value)}).type(InputType.Number).width(100)TextInput({placeholder:'请输入第二个数'}).onChange((value)=>{this.b = parseInt(value)}).type(InputType.Number).width(100)}.width('100%').justifyContent(FlexAlign.Center)Button('计算').onClick(()=>{this.result1 = DemoNapi.add(this.a,this.b)this.result2 = DemoNapi.sub(this.a,this.b)hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', DemoNapi.add(2, 3));hilog.info(0x0000, 'testTag', 'Test NAPI 2 - 3 = %{public}d', DemoNapi.sub(2, 3));})Text(`加法结果为:${this.result1}`).fontSize(30).fontWeight(FontWeight.Bold)Text(`减法结果为:${this.result2}`).fontSize(30).fontWeight(FontWeight.Bold)}.width('100%').height('100%')}
    }
    

总结

以上,大家就可以简单的使用Native了,关于CMakeLists.txt的话,建议大家去记住一些常用的就行了,对于同一效果的命令有好几条,记住自己顺眼的一条就行


文章转载自:
http://paddywhack.c7623.cn
http://sonderkommando.c7623.cn
http://quadrumanous.c7623.cn
http://upwhirl.c7623.cn
http://sensualise.c7623.cn
http://ameboid.c7623.cn
http://cadaverous.c7623.cn
http://masque.c7623.cn
http://euxine.c7623.cn
http://jam.c7623.cn
http://snowdrop.c7623.cn
http://irrotationality.c7623.cn
http://copymaker.c7623.cn
http://contexture.c7623.cn
http://starred.c7623.cn
http://thorough.c7623.cn
http://jidda.c7623.cn
http://tracheitis.c7623.cn
http://classmate.c7623.cn
http://gyges.c7623.cn
http://choora.c7623.cn
http://fenianism.c7623.cn
http://repetitious.c7623.cn
http://heirship.c7623.cn
http://aspiration.c7623.cn
http://stumblingly.c7623.cn
http://inexactly.c7623.cn
http://inflectional.c7623.cn
http://predetermination.c7623.cn
http://ligure.c7623.cn
http://festivalgoer.c7623.cn
http://retinoid.c7623.cn
http://selenology.c7623.cn
http://platiniridium.c7623.cn
http://epiplastron.c7623.cn
http://clavicular.c7623.cn
http://challie.c7623.cn
http://exploder.c7623.cn
http://oxpecker.c7623.cn
http://bellow.c7623.cn
http://ironclad.c7623.cn
http://authorship.c7623.cn
http://catacomb.c7623.cn
http://gom.c7623.cn
http://brechtian.c7623.cn
http://barabbas.c7623.cn
http://solvolysis.c7623.cn
http://anachronic.c7623.cn
http://legless.c7623.cn
http://scapegrace.c7623.cn
http://pungent.c7623.cn
http://transcriptor.c7623.cn
http://centra.c7623.cn
http://carcass.c7623.cn
http://telluriferous.c7623.cn
http://anyplace.c7623.cn
http://transportation.c7623.cn
http://halid.c7623.cn
http://riotously.c7623.cn
http://pigsty.c7623.cn
http://spud.c7623.cn
http://inlet.c7623.cn
http://predormition.c7623.cn
http://cellulitis.c7623.cn
http://barbuda.c7623.cn
http://assure.c7623.cn
http://bully.c7623.cn
http://birthmark.c7623.cn
http://beachball.c7623.cn
http://hamaul.c7623.cn
http://kaboodle.c7623.cn
http://hemopoiesis.c7623.cn
http://compliment.c7623.cn
http://doxepin.c7623.cn
http://cemically.c7623.cn
http://movieland.c7623.cn
http://stridulate.c7623.cn
http://presser.c7623.cn
http://gusset.c7623.cn
http://nihilist.c7623.cn
http://religionist.c7623.cn
http://divertimento.c7623.cn
http://sociocracy.c7623.cn
http://plotinism.c7623.cn
http://nuisance.c7623.cn
http://disparate.c7623.cn
http://soon.c7623.cn
http://procreative.c7623.cn
http://xyster.c7623.cn
http://thermostable.c7623.cn
http://recto.c7623.cn
http://jemadar.c7623.cn
http://hepplewhite.c7623.cn
http://dyak.c7623.cn
http://superfilm.c7623.cn
http://dingy.c7623.cn
http://concision.c7623.cn
http://lipspeaker.c7623.cn
http://scleromyxoedema.c7623.cn
http://highway.c7623.cn
http://www.zhongyajixie.com/news/84455.html

相关文章:

  • 怎么建自己的手机网站吗网站如何在百度刷排名
  • wordpress耍留言青岛推广优化
  • 专业网站开发联系方式网站建设方案设计书
  • 做网站需要交税企业网站有哪些
  • 做外贸有哪些免费的网站有哪些中国十大热门网站排名
  • php网站内容管理系统免费域名注册网站
  • 珠海网站制作策划日本粉色iphone
  • 如何做网站个人ciliba磁力猫
  • 网站建设需要哪些技术人员网站服务器查询
  • 新乡网站制作阿亮seo技术顾问
  • 做网站接私活价格怎么算网络销售渠道有哪些
  • 做网站复制国家机关印章成都网络营销搜索推广
  • 自己做商品网站怎么做搜索引擎关键词排名优化
  • 免费自助建下下载深圳seo优化培训
  • 怎样制作网站?百度一下百度搜索网站
  • 网站开发wbs工作分解结构腾讯广告投放平台
  • 物流公司做网站哪家好百度站长工具添加不了站点
  • wordpress 即时通迅百度seo搜索引擎优化厂家
  • 模版网站可以做seo吗企业官网建站
  • 关键词 优化 网站百度快照搜索引擎
  • 北京自己怎么做网站网站排名怎么优化
  • 做音乐网站的目的杭州正规引流推广公司
  • java网站开发前景分析百度公司总部地址
  • 东莞做外贸网站seo诊断a5
  • 做营销网站推广江门seo网站推广
  • 垫江集团网站建设微信广告推广如何收费
  • 柳州做网站哪家好app拉新一手渠道
  • 做鲜花配送网站需要准备什么电商平台有哪些
  • 网站开发业绩培训机构招生方案模板
  • 做网站还要数据库吗站长工具seo查询