搭建基于SornaQube的自动化安全代码检测平台

这篇具有很好参考价值的文章主要介绍了搭建基于SornaQube的自动化安全代码检测平台。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 一、背景和目的

  近年来,随着新业务、新技术的快速发展,应用软件安全缺陷层出不穷。虽然一般情况下,开发者基本都会有单元测试、每日构建、功能测试等环节来保证应用的可用性。但在安全缺陷方面,缺乏安全意识、技能和工具,最终导致了安全缺陷的出现。

  对于软件开发安全意识和软件开发安全技能方面本文中不再做详述,软件开发者可通过培训和实践提高自身意识和技能,本文目的主要是提供一种思路和方法,让软件开发者像测试软件功能一样,测试软件安全缺陷,并且能够融入到整个的软件开发过程中。

二、自动化安全代码检测平台概述

2.1. 什么是安全代码审计工具?

  代码安全审计工具是以静态的方式在程序中查找可能存在的安全缺陷,如:缓冲区溢出、空指针引用、资源泄露和SQL注入等。安全代码测试工具目前比较多,例如Fortify、FindBugs等,大家感兴趣可以通过互联网搜索到这些工具的一些描述,本文中也不再赘述。

2.2. 软件开发人员是否可以自行直接利用这些安全代码审计工具完成测试?

答案在理论上是可以的,但是在实践中基本是很难落地。原因有如下几点:

  1)工具众多,很难选择;

  2)工具误报较高,如何提高准确率,软件开发人员很难处理;

  3)单一工具如何与开发过程进行结合。

  4)安全代码审计工作在企业里很有可能是安全专业人员的职责,这样企业里会出现安全和开发隔离的情况。

2.3. 什么是自动化安全代码检测平台

自动化安全代码检测平台应该具有以下的几个功能:

  1)能够融入到软件开发的过程中

  2)自动、高效、准确的进行检测

  3)自动生成检测报告,供项目管理者和开发人员查看

三、搭建基于SonarQube的自动化安全代码检测平台搭建实践

3.1. 检测平台概述

这个平台环境主要是基于Jenkins、SVN、Maven、SonarQube集成搭建的,下面分别大概介绍一下这几个软件:

Jenkins(本次环境使用的是:sonarqube-6.7.6)是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。先了解一下持续集成的概念:持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。而 Jenkins就是基于Java开发的一种持续集成工具,用于监控持续重复的工作。

SVN(本次环境使用的是:Subversion1.9.7)是Subversion的简称,是一个开放源代码的版本控制系统,用于多个人共同开发同一个项目,共用资源的目的。

Maven(本次环境使用的是:Maven 3.5.2)是通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven主要做了两件事:统一开发规范与工具、统一管理jar包。

SonarQube(本次环境使用的是:6.7.6)是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量通过插件形式,可以支持包括java,C#,C/C++等二十几种编程语言的代码质量管理与检测。

3.2. 自动化安全代码检测平台搭建的核心思路。

在基于SonarQube的平台中,SVN是检测的入口,SonarQube是检测的主要工具和检测报告生成出口,Jenkins作为一个持续集成工具将SVN和SonarQube关联起来,监控SVN的动作并适时触发SonarQube对提交的代码进行检测。SonarQube类似一个路由器,以插件的形式集成了许多缺陷检测工具,由于大多数检测工具要求对输入的项目进行编译并提取相关的信息,因此,在本平台上也安装了Maven。在SonarQube开始检测之前,Jenkins首先调用Maven对代码进行编译,然后将源代码和编译的输出信息送给SonarQube进行检测。

将这些工具集成在一起的好处在于:

1. 在代码审计融入到软件项目的持续开发过程中,自动生成高质量的检测报告,无需人工干预,提高了软件开发效率;

2. SonarQube以插件的形式可以集成众多的检测工具,目前已知可以支持XX种工具。检测工具的更新升级,不会影响到正常的软件开发流程;

3. 以阿里云镜像的方式提供给大家使用,最大限度的保护了个人和公司的知识产权,方便工具的落地使用。

目前,我们的团队还在不断地集成新的工具,以及开发更加高效和精确的检测器,保证了平台的持续更新升级,大家在简单配置之后,能够体检到最好的代码审计服务。

3.3. 搭建方法和步骤

3.3.1. 基础环境准备

硬件要求:

  CPU:1核心

  内存:4G(最少4G)

  操作系统:linux(ubuntu,centos均可)

然后,系统启动后,使用root安装jdk1.8和MySQL,并修改环境配置文件,具体操作命令可参考如下: 

1. 安装JDK1.8.0_151,操作如下:

a. 在官方网站上下载tar包,并上传至目录/usr/bin下,然后是用tar命令解压;

b. 添加环境变量配置,命令如下:

vi /etc/profile

在该文件的末尾加上以下内容后保存:

#JDK
JAVA_HOME=/usr/bin/jdk1.8.0_151
JRE_HOME=/usr/bin/jdk1.8.0_151/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
PATH=$JAVA_HOME/bin:$PATH

c. 更新生效,并测试,命令如下:

source  /etc/profile     
jave -version

如果返回了java的版本信息,即设置成功。

2. 安装MySQL 5.7.20,操作如下:

yum update
yum install -y mysql-server mysql-client

在安装过程中,会要求设置root密码,设置的密码为:mysql

安装完成后,使用root用户登录MySQL数据库,登陆成功即安装成功,命令为:

mysql -u root -p

3.3.2. 新建用户

一般情况下,开发者不能直接使用root用户来管理和使用系统,最好通过一个专有用户来进行操作,因此我们新建一个用户qube,具体命令为:

adduser qube

本镜像中,qube用户的密码设置为admin

如果需要给qube用户sudu权限,可修改/etc/sudoers文件,具体操作如下:

 vi /etc/sudoers

修改文件内容如下:

# User privilege specification
root    ALL=(ALL:ALL) ALL
qube    ALL=(ALL:ALL) ALL

保存退出,qube用户就拥有了sudo权限

添加好此用户后,我们就使用该用户登录并完成后续的操作。

3.3.3. 安装SVN服务端

1. 安装SVN服务端

 yum  install subversion 

2. 配置SVN服务端

mkdir -p /opt/svn/repos
svnadmin create /opt/svn/repos 

接下来,进行身份认证、权限等相关配置。配置文件都在/opt/svn/repos/目录下,我们主要关心的是conf和db文件,conf文件夹下是存放主配置文件和用户、权限位置,db文件夹是存放svn转储后的数据、在conf目录下authz文件是设置用户权限,passwd文件是存储用户及密码,svnserve.conf是主配置文件,先配置主配置文件:

1

vim svnserve.conf

anon-access = none     /**匿名用户不可读不可写**/
auth-access = write    /**授权用户可写**/
password-db = passwd   /**指定账号密码配置文件**/
authz-db = authz      /**指定权限配置文件**/
realm = /opt/svn/repos   /**指定版本库所在目录**/

再配置passwd文件:

1

2

vim passwd

#格式是用户名=密码,采用明文密码。这里设置了一个用户admin,密码为admin

[users]   
admin = admin

最后配置authz文件

1

2

vim authz

#增加以下信息,admin拥有根目录所有权限

[/]
admin = rw

3. 启动服务

输入命令:

svnserve -d -r /opt/svn/repos

4. 验证

输入命令:

netstat -antp |grep svnserve 

出现以下信息,即正常:

tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 28967/svnserve 

3.3.4. 安装SonarqubeSonar-scanner

1. 下载SonarQube和Sonar-scanner

百度网盘地址:

链接:  https://pan.baidu.com/s/1O0DJR8gW3OWbrWp8rz9kAw 

提取码: kn8n 

官网新版下载如下,

SonarScanner CLI

https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.1.zip

旧版

首先,在本机打开网站Download | SonarQube | Sonar,

找到下载地址:https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.7.1.zip

和https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778.zip

然后下载:

cd /opt
wget  https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.7.1.zip
wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778.zip

2. 安装SonarQube和Sonar-scanner

安装比较简单,直接解压即可:

yum install unzip
unzip sonarqube-6.7.1.zip
unzip sonar-scanner-cli-3.0.3.778.zip

由于解压以后文件目录名称较长,可以使用mv命令来更改名称,更改为:

/opt/sonarqube//opt/sonar-scanner 

3. 配置环境变量

1

vim /etc/profile

加入以下内容:

#SonarQube
export SONAR_HOME=/opt/sonarqube/
export SONAR_RUNNER_HOME=/opt/sonar-scanner/
export PATH=$PATH:$SONAR_RUNNER_HOME/bin

保存退出vi后,更新:

.  /etc/profile

4. 创建数据库sonar

登陆MySQL

mysql -u root -p

创建sonar数据库和用户(用户名和密码都为sonar)

mysql> CREATE DATABASE sonar DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
Query OK, 0 rows affected (0.10 sec)
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>

5. 配置sonarqube,修改配置文件sonar.properties

1

2

cd /opt/sonarqube/conf

vim sonar.properties

修改内容:

sonar.jdbc.username=sonar     数据库用户名
sonar.jdbc.password=sonar      数据库密码
sonar.jdbc.url=jdbc:mysql:// localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.port=9000 

6. 配置sonar-scanner,修改配置文件sonar-scanner.properties

1

2

cd /opt/sonar-scanner/conf

vim sonar-scanner.properties

修改内容:

sonar.host.url=http://localhost:9000
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

7. 运行sonarqube

切换至用户qube,root用户启动会失败

1

2

cd /opt/sonarqube/bin/linux-x86-64

./sonar.sh start

8. 验证

在本地浏览器输入:http://服务器ip:9000/

能打开页面即正常。(初次启动时间大概在2分钟左右) 

9. 修改管理员密码和安装中文插件

点击右上角 login,输入用户名和密码admin admin

(第一次登录会有一个配置向导,直接跳过即可)。然后进入后,再点击右上角的图标,选择my account,修改密码(admin)

点击菜单administrator,然后选择marketplant,搜索Chinese,就能看到中文插件,安装并选择重启服务即可。

 

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

3.3.5. 安装Maven

1. 下载Maven

首先,在本机打开网站Maven – Download Apache Maven

找到下载地址:http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz

然后下载:

cd /opt
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz

2. 安装Maven

安装比较简单,直接解压即可:

tar -xf apache-maven-3.5.2-bin.tar.gz

然后为了管理方便mv更改目录名称为maven

mv apache-maven-3.5.2 maven 

3. 设置环境变量,操作如下:

vim /etc/profile

在/etc/profile文件最后加入:

#Maven
export M2_HOME=/opt/maven
export CLASSPATH=$CLASSPATH:$M2_HOME/lib
export PATH=$PATH:$M2_HOME/bin

保存退出,并加载配置

.  /etc/profile

4. 验证

执行mvn –v查看maven版本信息,即正常

3.3.6 安装Tomcat

1. 下载Tomcat-8.5.24

首先,在本机打开网站http://mirrors.shuosc.org/apache/tomcat/

找到下载地址:http://mirrors.shuosc.org/apache/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz 

然后下载:

cd /opt

wget http://mirrors.shuosc.org/apache/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz

 2. 安装Tomcat

tar -xf apache-tomcat-8.5.24.tar.gz
mv apache-tomcat-8.5.24 tomcat
cd /opt/tomcat/bin/
tar -xf commons-daemon-native.tar.gz

3. 启动Tomcat

cd /opt/tomcat/bin/

./catalina.sh start

4. 验证

在本机浏览器里输入: http://服务器公网IP:8080 能打开页面即正常。

3.3.7 安装Jenkins

1. 下载Jenkins

本次采用war包形式安装,也可用其他方式安装。

cd /opt
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war 

2. 安装Jenkins

Jenkins安装比较简单,直接复制到tomcat的webapps目录下即可,操作如下:

mv /opt/jenkins.war /opt/tomcat/webapps/

3. 配置Jenkins

在本地浏览器中,输入http://服务器IP:8080/jenkins,打开页面后初次登录根据提示需要输入cat /root/.jcd senkins/secrets/initialAdminPassword文件中的内容后,点击登录。此时还会需要你选择插件的安装,我们选择默认安装“Install suggested plugins”即可(此安装时间根据网络情况大概在10分钟以上)。

插件安装完以后会提示建立身份认证相关的配置,我们直接跳过进入主页中修改即可。用户名和密码为admin/admin 

3.3.8 自动化安全代码检测环境的集成

安装完这些基础软件以后,需要在Jenkins中进行集成,具体操作如下:

1. 系统设置,将SonarQube Server 和 Jenkins URL设置好,点击系统管理—》系统设置: 

要是token 不能设置就不要设置了!!!!

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

2. 全局工具配置中集成jdk、Maven,点击系统管理-->>全局工具配置,然后按照页面提示填入相应参数,如下图所示:

 

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

3.3.9 Jenkins结合SonarQube插件的安装

1 安装SonarQube Scanner for Jenkins

2 安装Sonar Gerrit Plugin

这两个插件必须安装

3.4. 自动化安全代码检测平台的使用示例

按照我们前面提到的核心思路,我们在Jenkins中创建任务来检测我们的代码(本镜像中,创建了一个helloWorld的工程,大家使用配置可参考)。大概操作如下:

3.4.1. 新建任务,选择构建一个maven项目,点击确定。

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

3.4.2. 项目配置中,需要配置源码管理、触发器和build任务。

1. 首先,写上一些项目的描述信息,不写也行。

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

2. 配置触发

 

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

3 源码管理

 

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

4. build任务:

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

 

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

其中Analysis properties的内容可参考如下:

参考一:

sonar.login=admin
sonar.password=admin
sonar.projectKey=test
sonar.projectName=test
sonar.projectVersion=0.1   # 支持变量,例如 $VERSION
sonar.sources=.
sonar.binaries=bin
sonar.java.binaries=.

参考二:

sonar.projectKey=my:project
# this is the name displayed in theSonarQube UI
sonar.projectName=helloWorld
sonar.projectVersion=1.3.12
# Path is relative to thesonar-project.properties file. Replace "\" by "/" onWindows.
# Since SonarQube 4.2, this property isoptional if sonar.modules is set.
# If not set, SonarQube starts looking forsource code from the directory containing
# the sonar-project.properties file.
sonar.sources=src
sonar.binaries=bin 
# Encoding of the source code. Default isdefault system encoding
#sonar.sourceEncoding=UTF-8 
sonar.java.binaries=/opt/

如果是自由风格的代码,会有一下不同的地方:

1 构建触发器,可根据情况设置,我才用的是定时构建

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

2  构建环境

如果前边 token那边没有添加这里就选无,如果添加成功了,就选择成功的用户

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

3 构建

我采用的是mvn 打包方式

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

然后保存即可

登录Sonarqube

在本机输入http://服务器ip:9000/,填入用户名admin和密码admin后,修改SCM设置,不然Jenkins构建时会报错,输入SVN账号和密码

 

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

报错内容大致如下:

        ERROR: Error during SonarQube Scanner execution
        ERROR: Error when executing blame for file pom.xml
        ERROR: Caused by: svn: E170001: Authentication required for '<http://172.16.x.x:xxxx> Welcome to testcode SVN'
        ERROR:
        ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.
        WARN: Unable to locate 'report-task.txt' in the workspace. Did the SonarScanner succedeed?
        ERROR: SonarQube scanner exited with non-zero code: 1
        Finished: FAILURE

3.4.3. 上传项目,并检测

1. 我们在本机上安装svn客户端,我使用的是TortoiseSVN,然后配置连接服务器,上传项目。

2. 在Jenkins刚刚创建的任务中,点击立即“立即构建”,此时我们将在窗口右侧看到构建的进度,如果构建成功后,任务会提示执行成功。

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维

3.4.3 查看项目代码的检测结果

登录Sonarqube,我们将在首页上就能看到检测结果:

搭建基于SornaQube的自动化安全代码检测平台,自动化,安全,运维文章来源地址https://www.toymoban.com/news/detail-811659.html

到了这里,关于搭建基于SornaQube的自动化安全代码检测平台的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自动化构建平台(一)Linux下搭建私有代码仓库Gitblit的安装和使用详解

    代码版本管理,git模式应该是目前最流行的代码管理软件。目前支持git的管理软件有很多。 Gitblit是一个小型的代码仓库管理软件,功能不是很多,优点是:小巧、CPU和内存占用比较少,对于小团队来说基本够用。Gitblit官网点击这里。 进入官网,如下图,根据对应的系统选择

    2024年03月12日
    浏览(63)
  • 基于docker搭建pytest自动化测试环境(docker+pytest+jenkins+allure)

    这里我以ubuntu18为例 如果有docker环境,可以直接拉取我打包好的镜像 docker pull ziyigun/jenkins:v1.0 1.1 安装docker 1.2 配置镜像加速 bug1:ExecStart=/usr/bin/dockerd -H fd:// 如果发现docker启动或者重启报错: ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILU

    2024年02月12日
    浏览(58)
  • selenium 自动化测试—如何搭建自动化测试环境?

    🍅 视频学习: 文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 最近也有很多人私下问我,selenium学习难吗,基础入门的学习内容很多是3以前的版本资料,对于有基础的人来说,3到4的差别虽然有,但是不足以影响自己,

    2024年02月19日
    浏览(97)
  • selenium 自动化测试:如何搭建自动化测试环境,搭建环境过程应该注意的问题

    最近也有很多人私下问我,selenium学习难吗,基础入门的学习内容很多是3以前的版本资料,对于有基础的人来说,3到4的差别虽然有,但是不足以影响自己,但是对于没有学过的人来说,通过资料再到自己写的代码,发现有些东西没有,有些方法又不相同,导致脚本不能运行

    2024年02月10日
    浏览(52)
  • 从零搭建完整python自动化测试框架(UI自动化和接口自动化

    总体框架 PO模式、DDT数据驱动、驱动 框架技术选择 框架运行结果 各用例对应的定义方式(PO/DDT) 测试执行结果 从零开始搭建项目 一、开发环境搭建 二、新建项目 三、基础功能实现 1. 配置功能实现(Conf) 2. 日志功能实现(Log) 3. 读取EXCEL实现(data) 4. 邮件发送实

    2024年02月07日
    浏览(68)
  • 从零搭建完整python自动化测试框架(UI自动化和接口自动化)

    总体框架 PO模式、DDT数据驱动、驱动 框架技术选择 框架运行结果 各用例对应的定义方式(PO/DDT) 测试执行结果 从零开始搭建项目 一、开发环境搭建 二、新建项目 三、基础功能实现 1. 配置功能实现(Conf) 2. 日志功能实现(Log) 3. 读取EXCEL实现(data) 4. 邮件发送实

    2024年02月04日
    浏览(68)
  • 【自动化测试】Java+Selenium自动化测试环境搭建

    本主要介绍以Java为基础,搭建Selenium自动化测试环境,并且实现代码编写的过程。 1.Selenium介绍 Selenium 1.0 包含 core、IDE、RC、grid 四部分,selenium 2.0 则是在两位大牛偶遇相互沟通决定把面向对象结构化(OOPP)和便于编写代码的各自思想予以整合后形成的新工具,也就是我们所

    2024年02月11日
    浏览(52)
  • 自动化安全培训材料更新不足:安全培训材料的更新缺乏自动化流程

    随着网络攻击手法不断演进以及IT技术的快速发展,传统静态的安全培训课程已无法满足企业对于安全防护的需求. 然而,当前多数企业的安全培训依然采用手动更新的方式完成相关课程内容制作与维护工作 ,导致以下问题: 问题一: 更新效率低下 手动编辑和审核的培训教材需

    2024年02月20日
    浏览(39)
  • App自动化测试|Appium+Python自动化测试环境搭建

    搭建过程步骤如下: 安装jdk并配置好环境变量(jdk版本1.8以上) 安装android-sdk并配置好环境变量;具体步骤见:Android Studio安装(推荐使用这种方法安装SDK) - 环境配置 - 测试人社区 安装安卓模拟器 安装node.js(官网下载安装最新版本) ;下载地址:下载 | Node.js 中文网 找到wind

    2024年02月12日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包