news 2026/10/14 2:13:34

Android Studio简易App实例:从环境配置到运行调试完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android Studio简易App实例:从环境配置到运行调试完整指南

简介:面向Android初学者的开发入门实例文档,完整演示使用Android Studio从创建空白项目到搭建主页面、关于页面、设置页面的过程。文档逐步讲解新建项目的参数配置、Activity生命周期与onCreate重写、setContentView布局加载方式,以及PreferenceFragment设置页实现和AndroidManifest导航声明,并配有可直接参考的Java示例代码,便于边学边练。压缩包内为1个PDF文件,体积仅498KB,内容紧凑,适合快速翻阅与对照操作。该资源已有444人学习下载。通过这份实例,读者可掌握Android应用的基础结构、页面构建思路与常见设置界面写法,为后续开发更完整的App打下扎实基础。

1. 拿到一份「android+studio简易app实例.pdf」,先别急着敲代码

很多人是这么开始学 Android 的:找一份标题叫「android+studio简易app实例.pdf」的教程,打开 PDF,照着第 3 页的截图新建项目,然后卡在 Gradle 同步上,一卡就是一下午。真正把界面代码敲完的人反而不多。问题不在代码,在于这份教程默认你已经把环境配好了,而 PDF 里三行带过的环境配置,恰好是新手最容易翻车的地方。

这篇笔记就顺着「简易 App 实例」这条路,把从环境准备、新建工程、写界面和交互、到打包到手机的完整流程讲清楚。PDF 里给的是结论,这里补的是为什么、参数怎么调、以及失败时先查哪里。适合刚装好 Android Studio 还没跑通第一个 App 的从业者,也适合带新人入门时当一份检查清单用。

2. 开发环境:把 JDK、SDK 与模拟器一次对清楚

做简易 App 实例,最忌讳一上来就点「New Project」。环境没对齐,模板生成的工程根本跑不起来,后面所有步骤都卡在同一个地方。这一章把环境相关的三个关键对象讲透:JDK、Android SDK、模拟器系统镜像。它们之间是协作关系,不是独立安装完就完事。

2.1 版本号匹配:JDK 与 Gradle、AGP 之间的对应关系

新建项目时 Android Studio 会帮你选好默认的 Gradle 和 Android Gradle Plugin(AGP)版本,但前提是 JDK 版本兼容。我见过最多的报错是Unsupported class file major version和Java home is invalid,本质都是 JDK 和 Gradle 对不上。

JDK 不是越新越好。Gradle 每个版本支持的 JDK 上限是固定的,AGP 也有它自己的要求。新建项目时注意看 Android Studio 的提示,一般在File > Settings > Build, Execution, Deployment > Build Tools > Gradle里能看到当前项目使用的 JDK 路径。这里有一个务实的习惯:让项目用自己的 JDK 配置,而不是全局系统 JDK。

# 查看当前 JDK 版本 java -version # 查看 Android Studio 自带的 JBR(JetBrains Runtime)位置 # macOS/Linux 通常在这个目录: /Applications/Android Studio.app/Contents/jbr/Contents/Home # Windows 通常在安装目录下的 jbr 文件夹里

逻辑说明:Android Studio 自带的 JBR 是一个相对「安全」的 JDK,它和 Studio 内部版本匹配。如果你系统里装的是高版本 JDK,但项目 Gradle 版本老,编译时大概率报版本冲突。检查时不用死背兼容表,记住一个原则:优先使用 Android Studio 捆绑的 JBR,除非你有明确原因要换。

参数说明:java -version只是确认你终端里用的是哪个 JDK,它和 Android Studio 里的配置不一定一致。真正决定项目编译的是gradle-wrapper.properties里的 Gradle 版本,以及 Android Studio 里项目级 JDK 设置。

2.2 用命令行核对 SDK 与模拟器,比 GUI 菜单更可靠

Android SDK 是一套分层的组件,包含平台(Platform)、构建工具(Build Tools)、平台工具(Platform Tools)和系统镜像(System Image)。只装最新平台是不够的,因为旧项目用的 compileSdk 可能没装,同步时会自动尝试下载,一旦下载失败就报Failed to find target SDK。

我一般会直接用命令行工具sdkmanager核对已安装的 SDK 组件,它比在图形界面里逐级点开更快。

# 找到 sdkmanager 的位置 # macOS: ~/Library/Android/sdk/cmdline-tools/latest/bin/sdkmanager # Windows: %LOCALAPPDATA%\Android\Sdk\cmdline-tools\latest\bin\sdkmanager.bat # 列出已安装的 SDK 包 sdkmanager --list_installed

逻辑说明:--list_installed只显示本机已装的组件,不会请求网络。看输出时重点核对三行:platforms;android-X(平台)、build-tools;X.X.X(构建工具)、platform-tools(adb)。这三个不全,Gradle 同步时就会边下边配,一旦网络超时,报错信息又长又难懂。

参数说明:如果你本地cmdline-tools目录结构不对,比如少了latest这层目录,sdkmanager 会直接报错。解决方法是保持 Android Studio 默认创建的目录结构,不要手动改路径。另外sdkmanager --list可以用来查看可安装的包,查询时注意区分「已安装」和「可安装」两个列表。

2.3 local.properties 与仓库地址:环境配置的两个隐蔽坑

新建项目后,Android Studio 会自动生成一个local.properties文件,里面写着sdk.dir。这个文件只对当前机器生效,而且是被 Git 忽略的,不需要提交到仓库。手动改过 SDK 路径的项目,最常见的错误就是sdk.dir指向了不存在的位置,导致每次同步都报错。

# local.properties 内容示例 # 注意路径里的斜杠方向,Windows 用反斜杠或转义斜杠 sdk.dir=C\:\\Android\\Sdk

逻辑说明:Windows 上路径里的反斜杠需要转义,写成\\。macOS 和 Linux 用正斜杠。如果你发现同步报找不到 SDK,先看这个文件的路径对不对,再看路径下有没有platform-tools目录。另一个隐蔽坑是Gradle依赖仓库地址访问超时:项目里的settings.gradle会配置仓库地址,如果某些仓库无法访问,同步会长时间卡住。常见做法是优先用能稳定访问的镜像仓库,并把仓库顺序前置。

参数说明:sdk.dir值必须是 Android SDK 的根目录,不是cmdline-tools那层。搞混的话,Studio 能打开但同步报SDK location not found。镜像仓库地址的替换通常发生在settings.gradle的pluginManagement和dependencyResolutionManagement两个代码块里,只需要替换已有仓库,不要删除原有项。

3. 新建最小工程:看懂模板里哪些文件在干活

环境对齐之后,新建工程就只是点几下鼠标的事。但一个简易 App 实例真正跑通,靠的是知道模板生成了哪些文件、每个文件干什么、哪些能改哪些不能碰。很多人卡在「不知道改哪个文件」,于是每个文件都改一遍,最后编译错误比代码还多。

3.1 Empty Activity 模板生成的目录,哪些文件该改、哪些别碰

在 Android Studio 里选择Empty Activity模板新建工程后,项目面板里会出现一堆目录。对新手来说,需要修改的文件只有三个:MainActivity.kt(或.java)、activity_main.xml、build.gradle。其他文件保持原样,能少改就少改。

MyApplication/ ├── app/ │ ├── build.gradle # 模块级构建配置,删掉会直接无法编译 │ ├── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml # 应用入口和权限声明 │ │ ├── java/... # 源码文件 │ │ └── res/ │ │ ├── layout/ │ │ │ └── activity_main.xml # 界面布局 │ │ └── values/ │ │ ├── strings.xml # 字符串资源 │ │ └── themes.xml # 主题配置 └── build.gradle # 项目级构建配置

逻辑说明:AndroidManifest.xml里application标签的android:name指向应用的 Application 类,Activity 的android:name指向启动页面。改动包名或文件名时,必须同步改清单文件里的引用,否则安装后点开就是白屏闪退。常见做法是保持模板默认结构,只改内容不改文件名。

参数说明:res/layout目录下的 XML 文件名不能大写,只能用小写字母、数字和下划线。res/values/strings.xml是字符串资源,UI 上的文字建议写在这里而不是硬编码在布局里,原因后面会提到。

3.2 解读 build.gradle 与 gradle-wrapper.properties:三大 SDK 参数

模块级的build.gradle是简易 App 实例里最值得读的文件。它里面有三个参数决定你的应用能在哪些手机上运行:compileSdk、minSdk、targetSdk。

// app/build.gradle 关键片段 plugins { id 'com.android.application' } android { namespace 'com.example.myapplication' compileSdk 34 // 编译用的 SDK 版本,影响你能用哪些 API defaultConfig { applicationId 'com.example.myapplication' minSdk 24 // 最低支持 Android 7.0 targetSdk 34 // 目标运行版本,影响系统行为表现 versionCode 1 versionName '1.0' } }

逻辑说明:compileSdk决定编译时可用 API 的集合,minSdk决定代码里能不能直接用某个 API,如果调用了一个minSdk以下的 API,需要自己加版本判断。targetSdk决定系统以什么模式运行你的应用,系统版本高于目标版本时,行为兼容模式会开启。

参数说明:这三个值保持模板默认即可,不需要刻意调高。minSdk设得越低,兼容的机型越多,但需要用兼容性代码的地方也越多。对简易实例来说,minSdk 24左右是合理的。versionCode是给程序读的版本号,只能增加不能减少,versionName是给用户看的名字。

gradle-wrapper.properties是另一个容易被忽视的文件,它决定了 Gradle 本身的版本。修改它需要谨慎,因为 Gradle 主版本和 AGP 版本有对应关系,写错会导致镜像仓库下载旧版本或直接同步失败。

# gradle/wrapper/gradle-wrapper.properties distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-X.X-bin.zip

逻辑说明:distributionUrl指向 Gradle 发行包。Android Studio 新建项目时这里已经填好一个和 AGP 匹配的版本,不需要改。除非你明确知道升级 Gradle 会带来什么,否则保持原样。

3.3 跑通第一个安装流程:模拟器与 Gradle 任务

工程能同步还不代表能跑。一个简易 App 要看到界面,至少要走完「构建 APK -> 启动模拟器 -> 安装 -> 启动」这条链路。我习惯用命令行触发构建,比用界面按钮更直观,报错信息也不会一闪而过。

# 在项目根目录执行,app 是模块名 ./gradlew assembleDebug # 构建完成后 APK 在这个位置: # app/build/outputs/apk/debug/app-debug.apk

逻辑说明:assembleDebug会编译源码、打包资源、生成 debug 版 APK。第一次执行会下载依赖,需要一点耐心。如果构建成功但安装失败,问题通常不在 Gradle,而在模拟器或签名。

模拟器建议用 Android Studio 的 Device Manager 创建。创建时选择和你本机 SDK 平台版本匹配的系统镜像,CPU 架构选 x86_64(电脑模拟)而不是 arm64(除非你的电脑就是 ARM 架构)。启动模拟器后,用命令行安装 APK 是更接近真实调试的做法:

# 列出当前连接的设备 adb devices # 安装 APK 到模拟器 adb install app/build/outputs/apk/debug/app-debug.apk # 启动 MainActivity adb shell am start -n com.example.myapplication/.MainActivity

参数说明:am start的-n参数是 包名/Activity全路径。如果你改过applicationId,这里的包名要用改过的,否则系统提示找不到 Activity。adb devices输出里出现unauthorized时,需要在模拟器上确认调试授权弹窗。

4. 简易 App 的界面与交互:从 XML 布局到 Activity 代码

跑通空的模板工程只是第一步。「简易 App 实例」的核心是有界面、有交互。这一章用一个最典型的组合讲透:一个 XML 布局文件、一个 Kotlin Activity 文件、一段点击事件代码。这个组合覆盖了 Android 开发里最常接触的三件事:写界面、找控件、响应事件。

4.1 用 LinearLayout 写一个可复现的最小界面

布局文件决定应用长什么样。对简易实例来说,LinearLayout是最容易理解和控制的布局容器,它的特性是子控件按垂直或水平方向依次排列。先看完整布局,再解释关键属性。

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp" android:gravity="center_horizontal"> <TextView android:id="@+id/tvContent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello" android:textSize="20sp" android:layout_marginTop="24dp" /> <Button android:id="@+id/btnUpdate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/update_text" android:layout_marginTop="16dp" /> </LinearLayout>

逻辑说明:父布局用了match_parent占满屏幕,方向是vertical,所以两个子控件从上往下排。TextView用来显示文本,Button用来接收点击。@+id/tvContent表示创建并引用一个 id,Activity 里通过这个 id 找到控件。

参数说明:wrap_content是宽高跟随内容,match_parent是填满父容器。sp是文字专用单位,会跟随系统字体缩放;dp是布局尺寸单位,不跟随字体。如果按钮在预览里显示不全,优先检查父容器有没有给足高度,而不是挪间距。

4.2 Activity 里绑定控件与事件:Kotlin 最小代码

布局写好后,需要写 Activity 把界面加载出来,并给按钮绑定一个点击行为。Kotlin 版本的代码比 Java 更简洁,下面这个例子是完整可运行的 MainActivity。

package com.example.myapplication import android.os.Bundle import android.widget.Button import android.widget.TextView import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 1. 找到布局里的两个控件 val tvContent: TextView = findViewById(R.id.tvContent) val btnUpdate: Button = findViewById(R.id.btnUpdate) // 2. 给按钮设置点击监听 btnUpdate.setOnClickListener { tvContent.text = "被点击了,时间:${System.currentTimeMillis()}" } } }

逻辑说明:setContentView把布局文件 id 和界面绑定。findViewById通过布局里的@+id找到控件实例。按钮的setOnClickListener接收一个函数,每次点击都会执行花括号里的代码。这里把当前时间戳写给tvContent,能看到交互确实生效了。

参数说明:R.layout.activity_main是编译后生成的布局资源引用,如果布局文件名改过,这里也要对应改。R.id.tvContent和布局里的android:id一一对应。拼写不一致会在编译阶段直接报错,这是好消息,说明问题能尽早暴露。setOnClickListener用的是 lambda 写法,花括号里的it在需要时表示被点击的 View。

4.3 参数与常用配置:字符串资源、日志与布局预览

界面代码写完后,还有三个习惯需要建立。第一个是字符串资源的使用。前面布局里写了@string/hello,这意味着strings.xml里必须有对应条目。

<!-- res/values/strings.xml --> <resources> <string name="app_name">简易实例</string> <string name="hello">你好,Android</string> <string name="update_text">点我更新文本</string> </resources>

逻辑说明:所有界面文字都放进strings.xml,好处是将来做多语言时不用改布局。你可能会想「一个简例子哪需要多语言」,但当项目变大后,硬编码文字会导致改文案要翻几十个布局文件。现在的投入几乎为零。

第二个习惯是使用日志而不是用界面显示调试信息。Activity 里有现成的Log工具,可以让调试信息直接进 Logcat。参数说明:Log.d是 debug 级别,第一个参数是 tag,自己的代码用「MainActivity」这种一眼认出的 tag;第二个参数是实际内容。注意Log的调用位置在 SDK 里的android.util.Log,不要导入错包。

第三个习惯是用好布局预览。右侧预览窗口显示的还是静态效果,点击预览工具栏里的按钮可以连模拟器实时预览,省去反复安装 APK 的时间。

5. Android Studio 简易 App 实例的常见问题与排查

这一章记录的是顺手就能定位的问题。每一条都是初学者照着 PDF 教程复现时的高频卡点,按「现象 → 原因 → 解决」来写,遇到问题可以直接对应着查。

5.1 Gradle 同步一直转圈或报错

现象:新建项目后,底部状态栏一直显示Gradle sync,转圈超过 10 分钟,或者直接报Could not resolve依赖解析失败。

原因:依赖仓库地址访问超时,或证书校验失败,或本地 Gradle 缓存里残留了损坏的元数据。

解决:先打开settings.gradle,确认仓库顺序。把可用的镜像仓库放在第一个位置。然后清理缓存:执行./gradlew build --refresh-dependencies,或者用 Android Studio 的File > Invalidate Caches清除本地缓存后重启。如果还不行,检查distributionUrl指向的 Gradle 版本是否和本机 JDK 兼容。这三板斧能覆盖九成同步问题。

5.2 模拟器启动后 APK 装不上

现象:adb install提示INSTALL_FAILED_UPDATE_INCOMPATIBLE或INSTALL_FAILED_NO_MATCHING_ABIS。

原因:前者是模拟器上已经装了一个签名不一致的同包名应用;后者是 APK 的原生库指令集和模拟器 CPU 架构不匹配。

解决:INSTALL_FAILED_UPDATE_INCOMPATIBLE先adb uninstall 包名再重新安装。NO_MATCHING_ABIS去检查项目里是否引入了 so 库,简易实例通常不会引入,如果引入了,需要下载支持 x86_64 的 so 库,或者改用真机 ARM 架构的机器。我自己的习惯是:服务器端下发这样的库时,在 Gradle 里明确只打包 x86_64 和 arm64-v8a 两种指令集,避免模拟器和真机两边同时出问题。

5.3 布局在预览里正常,真机上错位

现象:Android Studio 预览窗口里界面排列整齐,安装到手机后文字被截断、按钮重叠、跑到屏幕外。

原因:预览窗口用的是固定尺寸的虚拟屏幕,而真机屏幕宽高比和系统字体缩放不同。字太小或太长的文本在窄屏上会被挤压。

解决:把布局里写死数值的地方改成权重分配。LinearLayout 里用android:layout_weight配合width=0dp让控件按比例占据宽度;文本太长的位置改用可滚动容器或换行。还要检查是不是用了绝对定位的layout_marginLeft硬凑间距。sp单位的文字会随系统字体放大,如果你在代码里把文字大小写死成像素值,也会导致显示异常。

5.4 日志里看不到自己要的输出

现象:代码里写了Log.d("MainActivity", "点击了"),打开 Logcat 却什么都看不到,或者日志刷新太快被冲掉。

原因:Logcat 的过滤条件设错了。默认过滤器可能只显示当前选中进程的日志,或者 tag 过滤把你自己的日志筛掉了。点击按钮时的日志级别是 debug,如果过滤器选的是 error 级别,自然看不到。

解决:在 Logcat 面板里把过滤器选成No Filters,关键词搜索框输入 tag 名MainActivity。确认设备选择器选中了当前模拟器。如果日志确实打印了但现在被大量同类日志淹没,可以在搜索框里用tag:MainActivity做精确过滤。调试期我通常会开两个面板:一个只过滤自己的 tag,一个不过滤看全局崩溃信息。

5.5 代码没改动,重装后旧数据还在

现象:改了代码重新安装,打开 App 发现还显示旧的文本或登录状态,明明代码里已经改掉了默认值。

原因:Android 对同包名同签名的应用升级安装时,会保留SharedPreferences、数据库和文件目录。开发者模式下的adb install -r只覆盖代码,不清理数据。

解决:如果是调试期需要干净状态,在模拟器或真机上卸载旧应用再安装。命令行方式:adb uninstall 包名 && adb install app-debug.apk。如果是在自己设备上做功能验证又不想丢掉数据,可以用测试专用的adb shell pm clear 包名只清数据,不卸载应用。这个命令会清掉应用全部私有数据,所以只适合测试环境用。

6. 把简易实例往深处走:ViewBinding 与调试习惯

6.1 一个技巧:用 ViewBinding 替换 findViewById

当布局里控件多起来后,findViewById的写法会变得很啰嗦。简易实例虽然控件少,但一开始就养成用 ViewBinding 的习惯,后面写稍大的项目会顺利得多。ViewBinding 会在编译时根据 XML 布局自动生成绑定类,让你的布局控件变成可以直接引用的属性。

// app/build.gradle 里开启 ViewBinding android { buildFeatures { viewBinding = true } }
// MainActivity 使用 ViewBinding 的写法 class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) binding.btnUpdate.setOnClickListener { binding.tvContent.text = "绑定生效:${System.currentTimeMillis()}" } } }

逻辑说明:ActivityMainBinding是编译器根据activity_main.xml自动生成的类,名字由布局文件名驼峰化而来。inflate负责把布局转换为可用的视图,binding.root是布局的根节点。开启后,布局里任何带@+id的控件都会变成binding对象的属性,类型和 id 一致,不再需要手写findViewById。

参数说明:lateinit var是 Kotlin 的延迟初始化属性,写在 onCreate 后使用,系统不会在绑定前访问它。如果 Activity 对应的布局文件名改了,绑定类名字也要跟着变,常见报错是Unresolved reference: ActivityMainBinding,这时候第一反应应该是看布局文件名和类名是否一致,而不是重写整个 Activity。

6.2 验证 App 状态的最小习惯

改完代码,我发现身边效率高的开发都有一个共同的验证流程:改代码后不是直接点 Run,而是先执行干净构建,再安装,再启动一次。每次改动后都重复「构建 -> 安装 -> 启动」三连,虽然多敲几行命令,但能避免「刚才那次是不是没编进去」的玄学问题。我自己保留在笔记里的命令是:

./gradlew clean assembleDebug && adb install -r app/build/outputs/apk/debug/app-debug.apk && adb shell am start -n com.example.myapplication/.MainActivity

这行命令的顺序有讲究:clean确保没有旧的残留资源;assembleDebug生成最新 APK;adb install -r覆盖安装;am start直接拉起应用。如果某一步失败,中断的命令会直接指向问题所在。另外记住看 Logcat 里的 AndroidRuntime 崩溃栈,崩溃原因九成都能在头三行里找到答案。这些习惯保留至今,带新人时也让他们照着敲,翻车概率会小很多。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 2:12:30

软考架构师核心考点:系统架构设计与质量属性全解析

考过软考架构师的人基本都有同一个感受&#xff1a;上午的选择题里&#xff0c;真正让人头皮发麻的不是计算题&#xff0c;而是那些关于架构风格和质量属性的概念题。明明教材翻了好几遍&#xff0c;一到做题还是会在"性能战术"和"可用性战术"之间反复纠结…

作者头像 李华
网站建设 2026/10/14 2:12:16

三星预计实现创纪录的800亿美元利润

三星电子公司表示&#xff0c;预计将在本季度创造科技行业历史上前所未有的季度利润纪录&#xff0c;首次突破100万亿韩元大关。在今日晚间发布的第三季度初步财报中&#xff0c;该公司透露预计营业利润将达到惊人的107.4万亿韩元&#xff08;约合801.7亿美元&#xff09;&…

作者头像 李华
网站建设 2026/10/14 2:12:13

tchMaterial-parser 完整指南:三步拿到智慧教育平台的电子课本 PDF

tchMaterial-parser 完整指南&#xff1a;三步拿到智慧教育平台的电子课本 PDF 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具&#xff0c;帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff0c;让您更方便地获取课本内容。…

作者头像 李华
网站建设 2026/10/14 2:11:55

刷题笔记:哈希表与双指针攻克四道经典求和问题

刷算法题最容易出现的情况就是&#xff1a;昨天还觉得自己是天才&#xff0c;今天一上来四道题直接被打回原形。第6天这个组合&#xff0c;前两题是哈希表热身&#xff0c;后两题直接跳进双指针去重地狱。四道题放一起练其实是有讲究的&#xff0c;刚好把两套核心思想串起来——…

作者头像 李华
网站建设 2026/10/14 2:11:50

企业案例-直观复星:达芬奇在中国-从技术引进到本土深耕

2023年12月18日&#xff0c;首台国产达芬奇Xi手术机器人在中山大学附属肿瘤医院甘肃医院正式启用。当天&#xff0c;执行院长刘卓炜团队借助这台机器人&#xff0c;完成了一例肾部分切除术。一个发生在甘肃的临床场景&#xff0c;把“达芬奇国产化”变成了具体的医疗服务:成熟的…

作者头像 李华