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

Rockchip平台Android应用预安装功能(基于Android13)

Rockchip平台Android应用预安装功能(基于Android13)

1. 预安装应用类型

Android上的应用预安装功能,主要是指配置产品时,根据厂商要求,将事先准备好的第三方应用预置进Android系统。预安装分为以下几种类型:

  1. 安装不可卸载应用
  2. 安装可永久卸载应用
  3. 安装卸载后恢复出厂设置后自动恢复的应用

2. 功能启用说明

2.1 配置和使用

在进行以下操作之前,首先需要输入命令 get_build_var TARGET_DEVICE_DIR 来找到对应的目标文件夹(比如 device/rockchip/rk3126c/)。

在目标文件夹下有三个文件夹,分别为:

  1. preinstall
  2. preinstall_del_forever
  3. preinstall_del

请将需要预置的应用放入对应的文件夹,注意apk文件名尽量使用英文,避免空格。

顺利的话,执行make之后会在$OUT/oem目录生成对应的文件夹:

  1. bundled_persist-app
  2. bundled_uninstall_gone-app
  3. bundled_uninstall_back-app

仍旧对应概述中的几种类型。在烧录后,系统会自动安装这些应用到对应目录。

注意:不支持带systemuid应用的预制,请使用Android原生方式编写mk文件。可参考vendor/rockchip/common/apps/RkDeviceTest/的集成方式。

2.2 编译结果

编译后配置文件将会输出到odm分区($OUT/oem/),增加后请确认烧写了odm.img来使其生效。

3. 预编译脚本

预置应用编译脚本通过下面脚本完成

ifneq ($(strip $(TARGET_PRODUCT)), )$(shell python device/rockchip/common/auto_generator.py $(TARGET_DEVICE_DIR) preinstall bundled_persist-app $(TARGET_ARCH))$(shell python device/rockchip/common/auto_generator.py $(TARGET_DEVICE_DIR) preinstall_del bundled_uninstall_back-app $(TARGET_ARCH))$(shell python device/rockchip/common/auto_generator.py $(TARGET_DEVICE_DIR) preinstall_del_forever bundled_uninstall_gone-app $(TARGET_ARCH))-include $(TARGET_DEVICE_DIR)/preinstall/preinstall.mk-include $(TARGET_DEVICE_DIR)/preinstall_del/preinstall.mk-include $(TARGET_DEVICE_DIR)/preinstall_del_forever/preinstall.mk
endif

可以看到预置应用的Android.mk主要通过auto_generator.py完成

#!/usr/bin/env python
import sys
import os
import re
import zipfile
import shutil
import logging
import stringtemplet = """include $(CLEAR_VARS)
LOCAL_MODULE := %s
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/%s
LOCAL_SRC_FILES := $(LOCAL_MODULE)$(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_DEX_PREOPT := false
LOCAL_ENFORCE_USES_LIBRARIES := false
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_JNI_SHARED_LIBRARIES_ABI := %s
MY_LOCAL_PREBUILT_JNI_LIBS := %s
MY_APP_LIB_PATH := $(TARGET_OUT_ODM)/%s/$(LOCAL_MODULE)/lib/$(LOCAL_JNI_SHARED_LIBRARIES_ABI)
ifneq ($(LOCAL_JNI_SHARED_LIBRARIES_ABI), None)
$(warning MY_APP_LIB_PATH=$(MY_APP_LIB_PATH))
LOCAL_POST_INSTALL_CMD := \mkdir -p $(MY_APP_LIB_PATH) \$(foreach lib, $(MY_LOCAL_PREBUILT_JNI_LIBS), ; cp -f $(LOCAL_PATH)/$(lib) $(MY_APP_LIB_PATH)/$(notdir $(lib)))
endif
include $(BUILD_PREBUILT)"""copy_app_templet = """LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
LOCAL_APK_NAME := %s
LOCAL_POST_PROCESS_COMMAND := $(shell mkdir -p $(TARGET_OUT_ODM)/%s/$(LOCAL_APK_NAME) && cp $(LOCAL_PATH)/$(LOCAL_APK_NAME).apk $(TARGET_OUT_ODM)/%s/$(LOCAL_APK_NAME)/)
"""def main(argv):preinstall_dir = os.path.join(argv[1],argv[2])if os.path.exists(preinstall_dir):#Use to include modulesisfound = 'not_found_lib'include_path = preinstall_dir + '/preinstall.mk'android_path = preinstall_dir + '/Android.mk'target_arch = argv[4]if os.path.exists(include_path):os.remove(include_path)if os.path.exists(android_path):os.remove(android_path)includefile = file(include_path, 'w')androidfile = file(android_path, 'w')androidfile.write("include $(call all-subdir-makefiles)\n\n")MY_LOCAL_PREBUILT_JNI_LIBS = '\\' + '\n'for root, dirs, files in os.walk(preinstall_dir):for file_name in files:p = re.compile(r'\S*(?=.apk\b)')found = p.search(file_name)if found:include_apk_path = preinstall_dir + '/' + found.group()makefile_path = include_apk_path + '/Android.mk'apk = preinstall_dir + '/' + found.group() + '.apk'try:zfile = zipfile.ZipFile(apk,'r')except:if os.path.exists(include_apk_path):shutil.rmtree(include_apk_path)os.makedirs(include_apk_path)apkpath = preinstall_dir + '/' + found.group() + '/'shutil.move(apk,apkpath)makefile = file(makefile_path,'w')makefile.write("LOCAL_PATH := $(my-dir)\n\n")makefile.write(templet % (found.group(),argv[3],'None',MY_LOCAL_PREBUILT_JNI_LIBS,argv[3]))continuefor lib_name in zfile.namelist():include_apklib_path = include_apk_path + '/lib' + '/arm'if os.path.exists(include_apk_path):shutil.rmtree(include_apk_path)os.makedirs(include_apklib_path)makefile = file(makefile_path,'w')makefile.write("LOCAL_PATH := $(my-dir)\n\n")apkpath = preinstall_dir + '/' + found.group() + '/'if target_arch == 'arm64':for lib_name in zfile.namelist():lib = re.compile(r'\A(lib/arm64-v8a/)+?')find_name = 'lib/arm64-v8a/'if lib_name.find(find_name) == -1:continuelibfound = lib.search(lib_name)if libfound:isfound = 'arm64-v8a'data = zfile.read(lib_name)string = lib_name.split(libfound.group())libfile = include_apklib_path + '/' + string[1]MY_LOCAL_PREBUILT_JNI_LIBS += '\t' + 'lib/arm64' + '/' + string[1] + '\\' + '\n'if (os.path.isdir(libfile)):continueelse:includelib = file(libfile, 'w')includelib.write(data)try:if cmp(isfound, 'not_found_lib'):include_apklib_path_arm64 = include_apk_path + '/lib/arm64'os.rename(include_apklib_path, include_apklib_path_arm64)except Exception as e:logging.warning('rename dir faild for:' + e)if not cmp(isfound,'not_found_lib'):for lib_name in zfile.namelist():lib = re.compile(r'\A(lib/armeabi-v7a/)+?')find_name = 'lib/armeabi-v7a/'#if not cmp(lib_name,find_name):#    continueif lib_name.find(find_name) == -1:continuelibfound = lib.search(lib_name)if libfound:isfound = 'armeabi-v7a'data = zfile.read(lib_name)string = lib_name.split(libfound.group())libfile = include_apklib_path + '/' + string[1]MY_LOCAL_PREBUILT_JNI_LIBS += '\t' + 'lib/arm' + '/' + string[1] + '\\' + '\n'if(os.path.isdir(libfile)):continueelse:includelib = file(libfile,'w')includelib.write(data)if not cmp(isfound,'not_found_lib'):for lib_name in zfile.namelist():lib = re.compile(r'\A(lib/armeabi/)+?')find_name = 'lib/armeabi/'#if not cmp(lib_name,find_name):#    continueif lib_name.find(find_name) == -1:continuelibfound = lib.search(lib_name)if libfound:data = zfile.read(lib_name)string = lib_name.split(libfound.group())libfile = include_apklib_path + '/' + string[1]MY_LOCAL_PREBUILT_JNI_LIBS += '\t' + 'lib/arm' + '/' + string[1] + '\\' + '\n'if(os.path.isdir(libfile)):continueelse:includelib = file(libfile,'w')includelib.write(data)tmp_jni_libs = '\\' + '\n'if not cmp(MY_LOCAL_PREBUILT_JNI_LIBS,tmp_jni_libs):nolibpath = preinstall_dir + '/' + found.group() + '/lib'shutil.rmtree(nolibpath)makefile.write(templet % (found.group(),argv[3],'None',MY_LOCAL_PREBUILT_JNI_LIBS,argv[3]))else:if isfound == 'arm64-v8a':makefile.write(templet % (found.group(),argv[3], 'arm64', MY_LOCAL_PREBUILT_JNI_LIBS,argv[3]))else:makefile.write(templet % (found.group(),argv[3],'arm',MY_LOCAL_PREBUILT_JNI_LIBS,argv[3]))shutil.move(apk,apkpath)isfound = 'not_found_lib'MY_LOCAL_PREBUILT_JNI_LIBS = '\\' + '\n'makefile.close()breakfor root, dirs,files in os.walk(preinstall_dir):for dir_file in dirs:includefile.write('PRODUCT_PACKAGES += %s\n' %dir_file)breakincludefile.close()if __name__=="__main__":main(sys.argv)

最终生成的Android.mk脚本如下:

LOCAL_PATH := $(my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := MySysManager
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/bundled_persist-app
LOCAL_SRC_FILES := $(LOCAL_MODULE)$(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_DEX_PREOPT := false
LOCAL_ENFORCE_USES_LIBRARIES := false
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_JNI_SHARED_LIBRARIES_ABI := None
MY_LOCAL_PREBUILT_JNI_LIBS := \MY_APP_LIB_PATH := $(TARGET_OUT_ODM)/bundled_persist-app/$(LOCAL_MODULE)/lib/$(LOCAL_JNI_SHARED_LIBRARIES_ABI)
ifneq ($(LOCAL_JNI_SHARED_LIBRARIES_ABI), None)
$(warning MY_APP_LIB_PATH=$(MY_APP_LIB_PATH))
LOCAL_POST_INSTALL_CMD :=     mkdir -p $(MY_APP_LIB_PATH)     $(foreach lib, $(MY_LOCAL_PREBUILT_JNI_LIBS), ; cp -f $(LOCAL_PATH)/$(lib) $(MY_APP_LIB_PATH)/$(notdir $(lib)))
endif
include $(BUILD_PREBUILT)

PackageManagerService对预安装应用的处理

//PackageManagerService.javapublic static final String BUNDLED_PERSIST_DIR = "/odm/bundled_persist-app";public static final String BUNDLED_UNINSTALL_GONE_DIR = "/odm/bundled_uninstall_gone-app";//Environment.java
private static final File DIR_PREBUNDLED_UNINSTALL_BACK_ROOT = getDirectory(ENV_PREBUNDLED_UNINSTALL_BACK_ROOT, "/odm/bundled_uninstall_back-app");private static final File DIR_PREBUNDLED_UNINSTALL_GONE_ROOT = getDirectory(ENV_PREBUNDLED_UNINSTALL_GONE_ROOT, "/odm/bundled_uninstall_gone-app");//InitAppsHelper.javapublic void preinstallThirdPartyAPK(PackageParser2 packageParser, ExecutorService executorService,int scanFlags){preinstallPrebundledpersist(packageParser,executorService,scanFlags);preinstallPrebundledUninstallBack(packageParser,executorService,scanFlags);preinstallPrebundledUninstallGone(packageParser,executorService,scanFlags);}private void preinstallPrebundledpersist(PackageParser2 packageParser, ExecutorService executorService,int scanFlags){scanDirTracedLI(new File(mPm.BUNDLED_PERSIST_DIR),null,mPm.getDefParseFlags() | ParsingPackageUtils.PARSE_IS_SYSTEM_DIR| ParsingPackageUtils.PARSE_IS_PREINSTALL,scanFlags | mPm.SCAN_AS_PREINSTALL| SCAN_AS_SYSTEM,packageParser, executorService);}private void preinstallPrebundledUninstallBack(PackageParser2 packageParser, ExecutorService executorService,int scanFlags){scanDirTracedLI(Environment.getPrebundledUninstallBackDirectory(),null,mPm.getDefParseFlags() | ParsingPackageUtils.PARSE_IS_PREBUNDLED_DIR,scanFlags | mPm.SCAN_AS_PREBUNDLED_DIR,packageParser, executorService);}private void preinstallPrebundledUninstallGone(PackageParser2 packageParser, ExecutorService executorService,int scanFlags){scanDirTracedLI(Environment.getPrebundledUninstallGoneDirectory(),null,mPm.getDefParseFlags() | ParsingPackageUtils.PARSE_IS_PREBUNDLED_DIR,scanFlags | mPm.SCAN_AS_PREBUNDLED_DIR,packageParser, executorService);}

需要进一步了解预安装应用相关流程,请查看preinstallPrebundled相关代码流程。

相关文章:

Rockchip平台Android应用预安装功能(基于Android13)

Rockchip平台Android应用预安装功能(基于Android13) 1. 预安装应用类型 Android上的应用预安装功能,主要是指配置产品时,根据厂商要求,将事先准备好的第三方应用预置进Android系统。预安装分为以下几种类型: 安装不可卸载应用安…...

vue项目表单使用正则过滤ip、手机号

import useFormValidate from /hooks/useFormValidatesetup(props, { emit }) {const { validateName, validateIPAndPort } useFormValidate()const state reactive({workFaceInfo: props.info?.id ? props.info : {},sysTypeData: props.sysType,formRules: {name: [{req…...

vscode编译调试sln工程

使用msvc工具链 vscode配置调用visual studio的编译和调试环境_vscode用vs-CSDN博客 将vscode打造无敌的IDE(14) tasks.json和launch.json配置详解,随心所欲添加自动化任务_tasks.json详解-CSDN博客 通过命令行使用 Microsoft C 工具集 | Microsoft Learn 编译…...

Android 车联网——CarManager管理器(四)

上篇文章介绍了CarPropertyService 的使用,这一篇我们来看一下 Android Automotive OS 中一些子模块如何使用 CarPropertyManager。 一、管理器调用 ICarImpl 源码位置:/packages/services/Car/service/src/com/android/car/ICarImpl.java @Override public IBinder getC…...

C# OpenCvSharp读取rtsp流录制mp4可分段保存

软件界面: 测试环境: VS2019 .NET Framework 4.7.2 OpencvSharp4.8.0 输入RTSP流地址即可拉取RTSP流,支持抓拍和录制RTSP流视频,且支持支持按固定时间保存,比如我想5分钟保存一个视频,设置保存间隔为30…...

Maven的心脏:深入解析settings.xml配置文件

Maven作为Java世界中最著名的构建工具之一,其灵魂所在无疑是那些配置文件。在这些配置文件中,settings.xml扮演着至关重要的角色。今天,我们就来深入剖析这个Maven的心脏部件,看看它如何为我们的项目搏动生命。 一、Maven settin…...

uni静态资源引入及css图片图标引用规范

1、页面组件引入 单页面中的组件引入需经过导入——注册——使用三个步骤&#xff1b; <template><view><!-- 3.使用组件 --><uni-rate text"1"></uni-rate></view> </template> <script>// 1. 导入组件import un…...

API 开放平台项目(已整理,已废弃)

项目大纲 前端 React 18Ant Design Pro 5.x 脚手架Ant Design & Procomponents 组件库Umi 4 前端框架OpenAPI 前端代码生成 后端 Java Spring BootMySQL 数据库MyBatis-Plus 及 MyBatis X 自动生成API 签名认证&#xff08;Http 调用&#xff09;Spring Boot Starter&#…...

魔棒无人直播系统有哪些优势?

随着科技的发展&#xff0c;越来越多新鲜事物的出现&#xff0c;它们代替了我们做很多的事情&#xff0c;开始解放着自己的双手&#xff0c;其中&#xff0c;无人直播的出现&#xff0c;就让直播变得更加简单。 因为是无人直播&#xff0c;所以全程不需要真人出镜&#xff0c;…...

[Flutter]WindowsOS中相关配置

Flutter项目在Windows平台上如何配置 目录 Flutter项目在Windows平台上如何配置 写在开头 正文 1、OS准备 2、编译环境准备 ① 下载AndroidStudio ② 下载dart ③ 下载flutter ④ 下载并安装VS ⑤ 在AS中配置dart和flutter 3、配置中遇到的问题 写在结尾 写在开头…...

[C语言]时间戳

时间戳的概念 时间戳就是定义一个时间点作为0秒, 之后每过一秒依此加一, 将当前的时间戳换算成年月日, 再加上起点, 获得的就是现在时刻的时间. 根据地球时区的偏移, 比如北京时间是东八区, 做一个偏移量的加减. 0起点: 1900年1月1日0时0分0秒. 0偏移地点: 英国伦敦 时间戳…...

Unity游戏资源更新(AB包)

目录 前言&#xff1a; 一、什么是AssetBundle 二、AssetBudle的基本使用 1.AssetBundle打包 2.BuildAssetBundle BuildAssetBundleOptions BuildTarget 示例 3.AssetBundle的加载 LoadFromFile LoadFromMemory LoadFromMemoryAsync UnityWebRequestAsssetBundle 前…...

GPT分区格式

GPT分区格式 [rootlocalhost ~]# gdisk /dev/sdb -bash: gdisk: 未找到命令 [rootlocalhost ~]# yum -y install gdisk- gdisk命令用于查看磁盘使用情况和磁盘分区&#xff08;GPT分区格式&#xff09; - 命令格式&#xff1a;gdisk [选项...] [设备路径] - 常用选项&…...

SVN管理-备份还原篇

背景&#xff1a; 当你没有svn的时候&#xff0c;写代码战战兢兢&#xff0c;又怕代码丢失白干&#xff0c;搞了svn做版本管理&#xff0c;随着时间的推移&#xff0c;所有的版本信息都在唯一的svn服务器&#xff0c;又开始担心服务器宕机&#xff0c;数据丢失问题&#xff0c…...

程序的重定位

可以理解为编译和链接 过程中产生的地址项都是临时的相对的。编译的时候的地址&#xff0c;在链接时会被修改。最终链接后生成的bin文件的地址项&#xff0c;在加载运行时 也会被修改。 链接器会对所有的输入文件进行扫描&#xff0c;之后就可以确定段的大小&#xff0c;符号定…...

【STM32F103】TIM定时器PWM

定时器分类 STM32F1中除了互联型产品&#xff08;STM32F103C8T6为64KB Flash 中容量产品&#xff09;&#xff0c;其余有8个定时器。 可以8个定时器分为高级&#xff0c;通用&#xff0c;基本三种。 高级定时器有两个&#xff0c;分别是TIM1和TIM8。 通用定时器有四个&…...

图论及其应用的一些论断---选择题

在任意一个网络N=(X,Y,I,A,c)中,最大流的值等于最小割的容量。在任意6个人的集会上,要么有3个人互相认识,要么有3个人互不认识。若G为无向简单图,则图G的边数ε,点数v之间有: ε < = ( v 2 ) ε<=\binom{v}{2} ε<=...

腾讯云轻量应用服务器镜像操作系统如何选择?

腾讯云轻量应用服务器镜像怎么选择&#xff1f;镜像是指轻量服务器的操作系统&#xff0c;可以选择宝塔Linux面板8.0.4腾讯云专享版&#xff0c;如果需要Win系统建议选择Windows Server 2012 R2 中文版&#xff0c;腾讯云服务器网txyfwq.com分享腾讯云轻量应用服务器镜像操作系…...

鸿蒙原生应用/元服务开发-发布基础类型通知类型与接口

基础类型通知主要应用于发送短信息、提示信息、广告推送等&#xff0c;支持普通文本类型、长文本类型、多行文本类型和图片类型。 表 基础类型通知中的内容分类 目前系统仅通知栏订阅了通知&#xff0c;将通知显示在通知栏里。基础类型通知呈现效果示意图如下所示。 图1基础类…...

Apisix常见问题

1.通过接口操作路由时X-API-KEY cd /usr/local/apisix/conf vim config-default.yaml注释掉这一部分 #allow_admin: # http://nginx.org/en/docs/http/ngx_http_access_module.html#allow# - 0.0.0.0/24 # If we dont set any IP list, then a…...

Docker 安装Mysql

目录 Docker Mysql安装 ✨安装和配置mysql ✨远程连接mysql远程连接 MySQL 是世界上最流行的开源数据库。根据 DB-Engines的调查数据&#xff0c;MySQL 是第二受欢迎的数据库&#xff0c;仅次于 Oracle 数据库。MySQL在过去由于性能高、成本低、可靠性好&#xff0c;已经成…...

Pillow图像处理(PIL.Image类的详细使用)

文章目录 Opencv、Matplotlib(plt)、Pillow(PIL)、Pytorch读取数据的通道顺序Python图像处理库&#xff08;PIL、Pillow、Scikit-image、Opencv&#xff09;Pillow 官方文档&#xff08;超详细&#xff0c;超推荐&#xff09;一、PIL库与Pillow库的区别二、Pillow库&#xff08…...

嵌入式开发——ADC开发

学习目标 了解ADC开发流程掌握采样方式能够使用ADC进行芯片内部通道进行采样能够使用ADC对外部电路进行采样学习内容 GD32F4的ADC 特点: 16个外部模拟输入通道;1个内部温度传感通道(VSENSE);1个内部参考电压输入通道(VREFINT);1个外部监测电池VBAT供电引脚输入通道。ADC开…...

FreeSWITCH t38测试

主叫 192.168.100.205 被叫 192.168.100.121 主叫侧发送multipage.tif 被叫侧接收传真&#xff0c;保存为recv.tif 主叫侧: originate [fax_enable_t381][fax_verbose1][fax_disable_v170][fax_ident77777777][fax_enable_t38_request1]sofia/internal/1234192.168.100.121:…...

跑腿配送系统技术探析

概述 跑腿配送系统是一种基于现代科技的服务平台&#xff0c;通过智能化的技术手段&#xff0c;实现用户需求的快速响应和高效配送。本文将探讨该系统的核心技术原理&#xff0c;以及在实际开发中的一些代码示例。 技术原理 1. 用户请求与任务分配 跑腿配送系统的第一步是…...

【数据不完整?用EM算法填补缺失】期望值最大化 EM 算法:睹始知终

期望值最大化算法 EM&#xff1a;睹始知终 算法思想算法推导算法流程E步骤&#xff1a;期望M步骤&#xff1a;最大化陷入局部最优的原因 算法应用高斯混合模型&#xff08;Gaussian Mixture Model, GMM&#xff09;问题描述输入输出Python代码实现 算法思想 期望值最大化方法&a…...

PMP证书可以挂靠吗?

PMP证书不是国内的证书&#xff0c;挂靠不了呀&#xff0c;想挂靠&#xff0c;可以考软考/一建等&#xff0c;里面也有项目管理相关的证书。 PMP证书虽然不能挂靠&#xff0c;但是用处还是很大的&#xff0c;例如提升个人能力、薪资待遇&#xff0c;还有持证可享一些城市的福利…...

HTML语义化的理解

HTML语义化是指在编写HTML代码时&#xff0c;合理地选择适当的标签和属性来描述页面的结构和内容&#xff0c;使得代码更具有可读性、可维护性和可访问性。 可读性&#xff1a;通过使用语义化的标签&#xff0c;可以清晰地表达页面的结构和内容&#xff0c;使得代码更易于阅读和…...

(Java企业 / 公司项目)注册,配置中心Nacos的怎么使用?(含相关面试题)(一)

在企业项目中使用Nacos实现的功能操作&#xff0c;以及如何在自己的环境中搭建Nacos环境&#xff0c;包含demo 一. 官网介绍&#xff1a;home (nacos.io) 文档地址&#xff1a;Nacos 快速开始 二. 准备Nacos环境 在公司里面很多的服务以及环境都是自己搭建的所以我在这里就从…...

计算机网络---知识点

ARPANET----NFSNET—ANSNET—Internet发展及协议 移动互联网 物联网 无线自组网、无线传感器网络、无线个域网 ISO/OSI网络体系结构 TCP/IP网络体系结构 对等通信、PDU 电路交换、报文交换、分组报文交换 虚电路、数据报 信道复用技术 网络性能的主要指标&#xff08…...

wordpress文章如何调整字体/广告咨询

与WifiMonitor.java负责监控supplicant状态不同&#xff0c;WifiService.java负责给supplicant下命令&#xff0c;WifiService.java是framework中wifi的核心模块。1 WifiService是server端&#xff0c;WifiManager是client端WifiService处理WifiManager发来的各种命令2 AsyncCh…...

好的网站建设网/西安专业seo

关于线性与条带化下LVM增加磁盘数据分布的讨论一、环境介绍二、线性模式逻辑卷创建逻辑卷删除三、条带化逻辑卷创建逻辑卷删除LVM有两种模式&#xff1a;线性模式&#xff1a;先写满组成线性逻辑卷的第一个物理卷&#xff0c;再向第2个物理卷中写入数据&#xff0c;以此类推&am…...

开购物网站需要多少钱/网页设计效果图及代码

www.bnjyedu.com...

网站建设公司的名字/自己怎么建网站

Fastjson RCE续&#xff08;自动化&#xff09; 一、漏洞介绍 参阅Fastjson≤1.2.47 RCE。 二、漏洞危害 参阅Fastjson≤1.2.47 RCE。 三、漏洞验证 环境搭建&#xff1a; 实验环境系统IP地址攻击机win10199.200.234.44靶机Centos7192.168.134.133 docker pull vulhub/f…...

吉林省网站建设行业需求分析/十大引擎网址

题目&#xff1a;写一个函数返回参数二进制中 1 的个数比如&#xff1a; 15 0000 1111 4 个 1程序原型&#xff1a;int count_one_bits(unsigned int value){// 返回 1的位数 }解题思路&#xff1a;首先写出这个数字的二进制序列并且定义一个计数器&#xff0c;由于数字在计算机…...

自应式网站/游戏推广员是违法的吗

//将输入的小写转换为大写 private void txtstockout_id_KeyPress(object sender, KeyPressEventArgs e){//将输入的小写转换为大写if ((int)e.KeyChar > 97 && (int)e.KeyChar < 122){e.KeyChar (char)((int)e.KeyChar - 32);}} ① e.Handled如果处理过事件&am…...