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

使用Neo4j做技术血缘管理

目录

一、neo4j介绍

二、windows安装启动neo4j

2.1下载neo4j

2.2 解压文件

2.3 启动neo4j

三、neo4j基础操作

3.1 创建结点和关系

3.2 查询

3.3 更改

3.4 删除

四、技术血缘Demo实现

4.1 构建节点对象

4.2 构建存储对象

4.3 创建有属性关联关系

4.4 最后是图结果

五、总结


前言:对于大公司或大部门,团队之间相互合作、中间件的共同使用,技术之间细节是不透明的,遇到异常问题时,定位排查困难;如何清晰管理技术团队、中间件、数据之间的血缘关系,这成为技术、产品、数据开发等人员的一个需求。

一、neo4j介绍

       Neo4j 是一种开源的图数据库管理系统,专注于存储和处理图结构数据。图数据库是一种专为处理图形和网络结构而设计的数据库,其中的数据以节点和边(或称关系)的形式组成。Neo4j 提供了一种直观而高效的方式来表示和查询复杂的关系数据,使得它特别适用于需要处理强关联和复杂网络结构的场景。

以下是 Neo4j 的主要特点和功能:

  1. 图数据库模型: Neo4j 使用图数据库模型,其中的数据被组织成节点和关系的网络。节点表示实体,关系表示实体之间的关联,而节点和关系都可以包含属性。
  2. Cypher 查询语言: Neo4j 使用 Cypher 查询语言,这是一种专门用于图数据库的查询语言。Cypher 提供了一种直观且强大的方式来查询和修改图数据,支持模式匹配、路径查询、聚合等操作。
  3. 性能优化: Neo4j 通过采用类似索引结构的存储引擎,可以快速地执行复杂的图查询。它还支持深度优先和广度优先的图遍历,以及通过索引快速查找节点和关系。
  4. ACID 事务支持:Neo4j 提供 ACID(原子性、一致性、隔离性、持久性)事务支持,确保数据库的数据一致性和可靠性。
  5. 灵活的数据模型: Neo4j 的数据模型非常灵活,可以轻松地表示多对多、多对一、一对多等各种关系。这使得它在处理复杂网络结构和强关联数据时非常强大。
  6. 支持图算法: Neo4j 提供了一系列内置的图算法,如最短路径、广度优先搜索、社交网络中的社区发现等,帮助用户进行更复杂的图分析。
  7. 可视化工具: Neo4j 提供了直观的可视化工具,使用户能够直观地查看和理解图数据的结构。这有助于开发人员和分析师更好地理解数据和关系。
  8. 社区和生态系统:Neo4j 拥有一个活跃的开源社区,提供了大量的文档、示例和插件。此外,它还有丰富的生态系统,包括各种工具和驱动程序,与其他数据存储和处理系统集成。

       Neo4j 在许多应用领域中得到广泛应用,包括社交网络分析、推荐系统、生物信息学、网络安全分析等。其图数据库的模型和查询语言使其成为处理复杂关系数据的强大工具。

二、windows安装启动neo4j

2.1下载neo4j

1.从官网下载:https://neo4j.com/download/

2.直接获取资源包(上手推荐):https://dist.neo4j.org/neo4j-community-3.5.30-windows.zip

2.2 解压文件

点击解压:

2.3 启动neo4j

在neo4j的bin目录下运行:CMD

启动服务:neo4j.bat console

在页面登录链接:http://localhost:7474/

默认账号密码:一般默认的是:用户:neo4j, 密码:neo4j;登陆后重新设置密码,如:123456

UI页面:

三、neo4j基础操作

有四个基础概念:

  • 节点
  • 标签
  • 属性
  • 关系

3.1 创建结点和关系

创建结点:

3.1.1创建只有一个标签没有属性的节点:

语法:CREATE (node-name:label-name)

示例:CREATE (m:sdk)

注解:"()"里”:“前第一个”m“是结点别名,":"后第二个"sdk"是结点标签;别名可以随意写,标签固定。

3.1.2创建一个有属性的节点:

语法:CREATE ( node-name:label-name { key:Value })

示例:create (mobile:sdk {name:"name1"})

注解:"{}"里是属性,以json格式展示。

3.1.3创建多个标签到节点:

语法:CREATE (node-name:label-name1:label-name2.....:label-namen)

示例:CREATE (m:sdk:usercode {name:"name1"})

注解:以上创建了一个,当前别名为m,标签为sdk和usercode,属性name="name1"的结点;

创建关系:

3.1.4各两个新结点创建无属性关系

create(m:sdk{type:'SDK'})-[r:write]->(n:api{name:'lxApi'})

return m,r,n

3.1.5给两个存在节点创建有属性关系

match(m:sdk{type:'SDK'})

match(n:api{name:'lxApi'})

create(m)-[r:upZip]->(n)

return n,m,r

3.2 查询

  • 从数据库获取有关节点和属性的数据
  • 从数据库获取有关节点,关系和属性的数据

MATCH检索,Return返回信息;

通过标签查询:

语法:MATCH(node-name:label-name)

示例:示例:MATCH (m:sdk) return m

通过标签属性查询:

语法:MATCH(node-name:label-name{filed:'value1'})

示例:示例:MATCH (n:sdk{name:'name1'}) eturn n

3.3 更改

添加标签:

match (m:sdk{name:'name1'})

SET m:sdk:user

RETURN m;

添加属性:

match (m:sdk{name:'name1'})

set m.userName='user1'

return m

3.4 删除

通过id来删除

match(n) where id(n)=86

delete n

通过属性来删除

match(n:sdk{name:'name1'})

delete n

通过标签来删除

match(n:sdk)

delete n

删除节点关系再删除节点

match(n) where id(n)=34

match(m) where id(m)=30

match(n)-[r:write]-(m)

delete r

删除结点属性

MATCH (n:sdk{name:'lxApi'})

remove n.name

return n

删除结点标签

match(n:sdk{name:'name1'})

remove n:userName

return n

删除节点和节点关联关系

MATCH (s:sdk{name:'name1'})

DETACH DELETE s;

删除所有节点

MATCH (n)

DETACH DELETE n

删除所有关系

start r=relationship(*) delete r;

四、技术血缘Demo实现

本次技术血缘demo涉及三个团队,三个中间件,用neo4j图数据库构建技术血缘关系。

通过SDK采集移动端APP的数据,内部API用于管理采集服务,最后依次存储到HDFS、Kafka、ES。

4.1 构建节点对象

1.业务服务对象创建

构建采集节点(SDK):

create(m:sdk:mobile{name:'yzSdk',type:'SDK',message:'驿站SDK,app消息采集'} )

create(m:sdk:mobile{name:'jscSdk',type:'SDK',message:'驾驶舱SDK,app消息采集'})

create(m:sdk:mobile{name:'xcSdk',type:'SDK',message:'星辰SDK,app消息采集'})

create(m:sdk:mobile{name:'xzSdk',type:'SDK',message:'行者SDK,app消息采集'})

查询sdk节点: MATCH (e:sdk) RETURN e

2.构建采集API管理对象数据节点:

create(n:api:xlp{name:'lxApi',type:'api',message:'离线API,提交zip包,存储元数据到kafka'})

create(n:api:xlp{name:'ssApi',type:'api',message:'实时API,上传实时数据到kafka'})

2.1构建配置索引接口节点

create(n:api:xlp{name:'configApi',type:'api',message:'配置索引,将消息写入不同索引库'})

查询Api节点:MATCH (n:api) RETURN n

4.2 构建存储对象节点

构建hdfs存储对象:

create(s:hdfs:xlp{name:'hdfs_file',hosts:'ipList',type:'hdfs',message:'移动端离线上传zip包,hdfs存储地址'})

构建Kafka元数据存储Topic:

create(s:kafka:xlp{topic:'id_metadata_info',hosts:'ipList',type:'kafka',message:'移动端离线上传zip包,元数据信息'})

构建kafka存储Topic:

create(s:kafka:xlp{topic:'XLP_MOBILE_LOG',hosts:'ipList',type:'kafka',message:'星洲kafka集群Topic,存储移动端解压数据'})

create(s:kafka:xlp{topic:'xlp-log-body',hosts:'ipList',type:'kafka',message:'星洲kafka集群Topic,存储移动端实时上传数据'})

create(s:kafka:xlp{topic:'id_m_crash',hosts:'ipList',type:'kafka',message:'星洲kafka集群Topic,存储移动端实时上传崩溃数据'})

查询Kafka存储节点:MATCH (s:kafka) RETURN s

构建ES存储索引:

create(s:es:xlp{index:'id_m_1000*',hosts:'ipList',type:'es',message:'星洲ES集群索引,存储移动端详情数据'})

create(s:es:xlp{index:'xlp_dev_appid_version_brand_record',hosts:'ipList',type:'es',message:'星洲ES集群索引,存储app指标分析结果'})

create(s:es:xlp{index:'id_m_user_device_*',hosts:'ipList',type:'es',message:'星洲ES集群索引,存储用户分析指标结果'})

create(s:es:xlp{index:'id_m_crash_*',hosts:'ipList',type:'es',message:'星洲ES集群索引,存储移动端崩溃日志'})

create(s:es:xlp{index:'xlp_mobile_message_id_*',hosts:'ipList',type:'es',message:'星洲ES集群索引,存储移动端崩溃message大字段信息'})

create(s:es:xlp{index:'id_network_*',hosts:'ipList',type:'es',message:'移动端上传网络详细'})

create(s:es:xlp{index:'id_m_1000*',hosts:'ipList',type:'es',message:'移动端上传,用户登录时长详情,增加UsedTime字段'})

create(s:es:xlp{index:'id_m_crash*',hosts:'ipList',type:'es',message:'移动端上传,崩溃详情索引'})

ES存储对象:MATCH (e:es) RETURN e

构建处理对象(Flink):

create(f:flink:xlp{name:'UnZipTask',type:'flink',message:'解压zip,读kafka,从HDFS获取zip解压,存入Kafka'})

create(f:flink:xlp{name:'MobileToEs',type:'flink',message:'读kafka,分发数据到不同索引'})

create(f:flink:xlp{name:'UserAnalToEs',type:'flink',message:'读topic,计算用户指标,结果存入es'})

create(f:flink:xlp{name:'fDevAnalToEs',type:'flink',message:'读topic,计算app指标j,结果存入es'})

create(f:flink:xlp{name:'ssMobileToES',type:'flink',message:'读实时topic,分发结果到es'})

查询Flink任务节点:MATCH (f:flink) RETURN f

4.3 创建有属性关联关系

4.3.1离线上传对象关联

match(m:sdk{type:'SDK'})

match(n:api{name:'lxApi'})

create(m)-[r:upZip]->(n)

return n,m,r

4.3.2实时上传数据关联

match(m:sdk{type:'SDK'})

match(n:api{name:'ssApi'})

create(m)-[r:toLineData]->(n)

return n,m,r

4.3.3 离线上传处理关联

记录元数据

match(n:api{name:'lxApi'})

match(h:kafka{topic:'id_metadata_info'})

create(n)-[r:mark]->(h)

return n,h,r

上传zip包

match(n:api{name:'lxApi'})

match(h:hdfs{name:'hdfs_file_name'})

create(n)-[r:mark]->(h)

return n,h,r

match(k:kafka{topic:'id_metadata_info'})

match(h:hdfs{name:'hdfs_file_name'})

create(k)-[r:relation]->(h)

return k,h,r

match(k:kafka{topic:'id_metadata_info'})

match(h:hdfs{name:'hdfs_file_name'})

create(k)elation]-(h)

return k,h,r

4.3.4 flink解压关联

match(k:kafka{topic:'id_metadata_info'})

match(f:flink{name:'UnZipTask'})

create(k)-[r:read]->(f)

return k,f,r

match(h:hdfs{name:'hdfs_file_name'})

match(f:flink{name:'UnZipTask'})

create(f)-[r:read]->(h)

return h,f,r

4.3.5 存储kafka关联

match(f:flink{name:'UnZipTask'})

match(k:kafka{topic:'XLP_MOBILE_LOG'})

create(f)-[r:read]->(k)

return k,f,r

4.3.6任务解析关联

UserAnalToEs 、fDevAnalToEs

match(k:kafka{topic:'XLP_MOBILE_LOG'})

match(f:flink{name:'UserAnalToEs'})

create(k)-[r:read]->(f)

return k,f,r

match(k:kafka{topic:'XLP_MOBILE_LOG'})

match(f:flink{name:'fDevAnalToEs'})

create(k)-[r:read]->(f)

return k,f,r

match(k:kafka{topic:'XLP_MOBILE_LOG'})

match(f:flink{name:'MobileToEs'})

create(k)-[r:read]->(f)

return k,f,r

4.3.7 ES任务存储关联

match(f:flink{name:'MobileToEs'})

match(e:es{index:'id_m_1000*'})

create(f)-[r:wirte]->(e)

return e,f,r

match(f:flink{name:'UserAnalToEs'})

match(e:es{index:'id_m_user_device_*'})

create(f)-[r:wirte]->(e)

return e,f,r

match(f:flink{name:'fDevAnalToEs'})

match(e:es{index:'xlp_dev_appid_version_brand_record'})

create(f)-[r:wirte]->(e)

return e,f,r

4.3.8 配置索引关联

match(a:api{name:'configApi'})

match(b:api{name:'lxApi'})

create(a)-[r:wirte]->(b)

return a,b,r

match(a:api{name:'configApi'})

match(b:api{name:'ssApi'})

create(a)-[r:wirte]->(b)

return a,b,r

match(a:api{name:'configApi'})

match(b:es{index:'id_m_1000*'})

create(a)-[r:wirte]->(b)

return a,b,r

4.3.9 实时任务存储关系

match(a:api{name:'ssApi'})

match(t:kafka{topic:'xlp-log-body'})

create(a)-[r:wirte]->(t)

return a,t,r

4.3.10 分发存储关系

match(t:kafka{topic:'xlp-log-body'})

match(e:es{index:'id_network_*'})

create(t)-[r:wirte]->(e)

return e,t,r

match(t:kafka{topic:'xlp-log-body'})

match(e:es{index:'id_m_1000*'})

create(t)-[r:wirte]->(e)

return e,t,r

4.3.11 崩溃日志关系

match(a:api{name:'ssApi'})

match(k:kafka{topic:'id_m_crash'})

create(a)-[r:uoData]->(k)

return a,k,r

match(k:kafka{topic:'id_m_crash'})

match(f:flink{name:'ssMobileToES'})

create(k)-[r:uoData]->(f)

return f,k,r

match(f:flink{name:'ssMobileToES'})

match(e:es{index:'id_m_crash*'})

create(f)-[r:wirte]->(e)

return e,f,r

4.4 最后是图结果

五、总结

       技术血缘建立在数据血缘之上,除了可以在节点构建数据详情,映射管理数据血缘;还可以将数据整个数据生命周期过程的使用的技术细节,管理到血缘关系中。对数据管理人员、技术人员和产品经理等各方,都可以做到技术和数据的透明管理。

相关文章:

使用Neo4j做技术血缘管理

目录 一、neo4j介绍 二、windows安装启动neo4j 2.1下载neo4j 2.2 解压文件 2.3 启动neo4j 三、neo4j基础操作 3.1 创建结点和关系 3.2 查询 3.3 更改 3.4 删除 四、技术血缘Demo实现 4.1 构建节点对象 4.2 构建存储对象 4.3 创建有属性关联关系 4.4 最后是图结果…...

Unity-WebGL

问题:提示gzip压缩报错解决:关闭打包的地方压缩,如下图问题:窗口未全屏解决:使用百分比画布替换固定尺寸画布 参考:新版Unity打包Webgl端进行屏幕自适应_unity webgl分辨率自适应-CSDN博客问题:…...

腾讯云部署vue+node项目

文章目录 一、安装宝塔二、vue项目部署三、node项目部署 前言: 关于项目部署,一开始也是找了很多资料,费了点时间,所以记录一下。希望能对各位有所帮助。 一、安装宝塔 1.首先在控制台,进入云服务器的终端界面 2.输入命令和密码获取权限,并且安装宝塔界面 yum install -y w…...

HBase表结构

HBase是非关系型数据库,是高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库。 HBase使用场景 大规模数据存储:如日志记录、数据库备份等。实时数据访问:如实时搜索、实时分析等。高性能读写:如高并发、低延迟的读写操…...

本人面试积累面试题更新中

本人面试积累面试题 1.事务的隔离级别 答:2024年1月30日 1.读已提交-----读取其他事务已经提交的数据 2.读未提交-----读取其他事务还未提交的数据–可能出现脏读 3.可重复读-----同一个事务多次读取同一个数据,尽可能的保证数据的一致性但是可能出现幻读 4.串行读------确保每…...

[经典面试题]169. 多数元素

题目描述 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出:3…...

Wireshark网络协议分析 - TCP协议

在我的博客阅读本文 文章目录 1. 基础2. 实战2.1. 用Go写一个简单的TCP服务器与客户端2.2. Wireshark抓包分析2.3. 限制数据包的大小——MSS与MTU2.4. 保证TCP的有序传输——Seq,Len与Ack2.5. TCP头标志位——URG,ACK,PSH,RST&…...

3 款最好的电脑硬盘数据迁移软件

您将从本页了解 3 款最好的 SSD硬盘数据迁移软件,磁盘供应商提供的软件和可靠的第三方软件。仔细阅读本文并做出您的选择。 什么是数据迁移? 数据迁移是将数据移动到其他计算机或存储设备的过程。在日常工作活动中,常见的数据迁移有三种&…...

【Java之HTML】

HTML 概念 互联网的产生:w3c的成立, ​ 互联网最开始设计的目的:看论文 ---->浏览器,HTML ​ 网络三要素:HTML HTTP URL HTML描述论文的格式 HTTP标记这个论文在网络上怎么传输 URL:指示这个论文在互联网的哪…...

支付宝支付功能解析,从零到掌握,轻松享受便捷支付

目录 一、支付宝支付功能简介 1.1 支付宝支付的概念 1.2 支付宝支付的优势 1.3 支付宝支付的适用场景 二、支付宝支付的准备工作 三、支付宝支付的接入流程 四、支付宝支付的安全性 5.1 支付宝支付的安全机制 5.2 防范支付风险的措施 5.3 支付宝支付的安全技术保障 …...

MacOS安装反编译工具JD-GUI以及解决无法打开的问题

目录 一.下载地址 二.安装 三.问题 四.解决办法 1.显示包内容 2.找到Contents/MacOS/universalJavaApplicationStub.sh 3.修改sh文件 4.保存后再次打开即可 一.下载地址 Java Decompiler 二.安装 将下载下来的 jd-gui-osx-1.6.6.tar 解压,然后将 JD-GUI.a…...

SpringBoot将第三方的jar中的bean对象自动注入到ioc容器中

新建一个模块,做自动配置 config:需要准备两个类,一个自动配置类,一个配置类 CommonAutoConfig:此类用于做自动配置类它会去读取resoutces下的META-INF.spring下的org.springframework.boot.autoconfigure.AutoConfig…...

5.变量的解构赋值 - JS

什么是解构赋值 通过类似(或相同)的构型,将已知数据的元素/属性解构并提取出来,再赋值到相应变量,可以是新建的变量,也可以是已存在的变量/属性等;最常见的是数组和对象的解构赋值,…...

tableau添加形状

目录 1.效果:1.自带的形状:2.添加形状:小结: 1.效果: 1.自带的形状: 2.添加形状: 找到tableau的安装目录,点入 默认->形状 的文件夹: 新建一个文件夹: …...

(2)(2.10) LTM telemetry

文章目录 前言 1 协议概述 2 配置 3 带FPV视频发射器的使用示例 4 使用TCM3105的FSK调制解调器示例 前言 轻量级 TeleMetry 协议 (LTM) 是一种单向通信协议(从飞行器下行的数据链路),可让你以低带宽/低波特率(通常为 2400 波…...

工具推荐系列-极客编辑器(实时在线编写md文件同步GitHub)

工具项目地址:https://github.com/geekeditor/geekeditor-desktop-releases/tree/main 工具基础配置方法:https://www.geekeditor.com/workspace1.x.html 详细同步代码仓的方法可以用下面: 如何创建GitHub仓库 及生成获取AccessToken&#xf…...

3d gaussian splatting介绍整理

3D 高斯分布是用于实时辐射场渲染的 3D 高斯分布中描述的一种光栅化技术,它允许实时渲染从小图像样本中学习到的逼真场景。 paper github 本文翻译整理自: blog: Introduction to 3D Gaussian Splatting DDPMs - Part 2 给出一些2D图片,用…...

[C#]de4dot常用命令

命令:de4dot.exe "D:\xxx.exe" 解释:运行后文件在程序集的目录下生成一个带-cleaned的新程序集。 命令:de4dot.exe file1 -f "D:\xxx.exe" -o "D:\output\xxx_cleaned.exe" 解释:-f : 指定.NET 程序…...

林浩然的“生命体验”大冒险

林浩然的“生命体验”大冒险 Lin Haoran’s “Life Experience” Grand Adventure 在一个阳光明媚的日子,林浩然——我们这位幽默风趣、充满生活智慧的大男孩,正坐在自家后院的老槐树下,手捧一本哲学书,皱着眉头深思:“…...

设计模式——职责链模式(Chain of Responsibility Pattern)

概述 职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Java编程之桥接模式

定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

快刀集(1): 一刀斩断视频片头广告

一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...