ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

安卓开发入门:从环境搭建到APK打包的完整实践指南

2026/9/18 23:36:52 拓冰建站 浏览量
安卓开发入门:从环境搭建到APK打包的完整实践指南 如果你想在自己的手机上装一个自己写的 App这篇东西应该能帮你走完第一步。文章会比较长但每一步都来自我这些年实际踩坑换来的经验你照着做大概率能在半天之内看到自己写的 APK 出现在手机屏幕上。这篇博文的核心就是“安卓开发入门”——从零开始把环境搭好写一个最简单的应用打包成 APK跑到模拟器和真机里。适合理工科学生、转行程序员、以及任何想自己动手做点小工具的人。不需要你有 Java 或者 Kotlin 基础但如果你会一点编程哪怕只写过 Python都会轻松很多。1. 开发环境准备Android Studio、SDK 与模拟器1.1 安装 Android Studio 与 SDK 组件写安卓应用绕不开 Android Studio我建议你直接用官方最新稳定版不要下预览版。下载地址很好找搜索引擎输入“android studio 下载”基本第一条就是官网链接。安装过程其实没什么特别的Windows 上运行 exe一路 Next 就行。有几个选项要注意如果你的磁盘还够用把 Android SDK、Android Virtual Device 这些组件都勾上免得之后用的时候找不到。macOS 和 Linux 也是类似Linux 用户下载 tar.gz 解压后直接运行 bin 目录下的启动脚本即可。第一次启动会有一个初始化向导它会自动联网下载最新的 SDK Platform 和 Build Tools。这个过程受网速影响比较大耐心等就行。如果遇到下载失败一般是因为网络波动点重试基本能解决。这里有一个网上很多人没讲清楚的概念SDK 到底是什么。你可以把 Android SDK 理解成一套“施工工具箱”里面装好了编译安卓程序需要的库、打包工具、调试工具。你写的代码只是图纸SDK 里的工具负责把图纸变成真正的 APK 文件。所以 SDK 版本不是越高越好但也别太老。我个人的建议是如果电脑配置一般装 Android 13 或 14 对应的 API 33/34 就够用了等以后真有适配需求再装新的。建议安装路径不要包含中文和空格否则后面 Gradle 构建时容易遇到奇怪的问题。这个问题 Windows 上特别常见我见过有人装到“D:\安卓开发工具”下面结果项目一直编译不过。1.2 把 Android Studio 设置成中文界面新手刚打开 Android Studio多半会被满屏英文劝退。不过汉化方法特别简单打开 Settings - Plugins在 Marketplace 搜索“Chinese (Simplified) Language Pack”就是这个官方中文语言包安装后重启 IDE 就是中文界面了。网上搜“android studio怎么设置中文”会出来很多老版本教程教你去改 vmoptions 文件。那种方法已经过时了而且容易把 IDE 搞出问题别去折腾。另外要提醒一下这个中文语言包只改变 Android Studio 的菜单和提示文字不会改变你项目里的代码更不会改变安卓系统的语言。你写的 App 跑在手机上是中文还是英文取决于你在 res/values 里放了什么字符串资源跟 IDE 界面语言没有关系。从我个人习惯来说我现在反而更推荐你用英文界面。因为绝大多数安卓开发资料、Stack Overflow 回答、官方文档用的都是英文术语。你迟早要面对这些单词与其之后被“Build Variants”“Gradle Sync”“Manifest”这些词折磨不如一开始就混个眼熟。当然第一次用的话中文界面确实更顺手这个看你自己的选择。1.3 创建第一个模拟器AVD没有真机也能跑 AppAndroid Studio 自带模拟器功能。进入 Device Manager在右侧工具栏可以找到点 Create Device选择一台手机型号比如 Pixel 系列Next 之后会让你选系统镜像。这里我建议选不带“Play Store”标记的版本原因是带 Play Store 的镜像是闭源组件和调试工具的兼容性偶尔会有小问题不带商店的版本纯净、响应快调试完全够用。选镜像的时候会看到两个关键的 ABI 选项x86_64 和 arm64-v8a。简单理解ABI 就是 CPU 的“方言”模拟器里选 x86_64 会非常流畅因为是和电脑 CPU 同一种方言可以硬件加速arm64-v8a 是大多数手机 CPU 的方言在模拟器上运行会很卡。所以模拟器优先选 x86_64但真机安装 APK 时就必须考虑 arm64-v8a 的兼容性了。创建完成后点启动按钮等它开机。模拟器第一次启动可能比较慢一分钟以内都算正常。2. 创建你的第一个 Android 项目2.1 新建项目的模板选择Empty Views Activity 还是 Compose打开 Android Studio点 New Project会弹出几个模板。常见的有 Empty Views Activity、Empty ActivityCompose、Basic Views Activity 等等。这里好多教程会直接让你选 Empty Activity但里面有个新坑——如果你下载的是最新版 Android StudioEmpty Activity 默认用的是 Jetpack Compose。Compose 是现在安卓主推的新 UI 写法直接用 Kotlin 代码写界面不再用 XML。它很强大但对第一次接触安卓的人来说学习曲线偏陡。如果你看代码觉得全是函数和 Composable 注解可能会一头雾水。所以我更建议第一次做 APK 的人选择 Empty Views Activity或者叫 Empty ActivityViews。这种传统的 XML Activity 写法虽然老但资料多、逻辑直白而且你理解了 XML 布局之后再去看 Compose会觉得豁然开朗——因为底层原理是通的。选模板的时候还会让你填项目名称、包名和保存位置。包名Package name建议用反域名格式比如 com.example.myfirstapp。这个包名就是应用在系统里的身份证之后签名、上架、推送都跟它绑定长度没有硬性要求但一定要是合法 Java 包名格式不能有中文和特殊符号。关于语言现在默认都是 Kotlin不要再选 Java 了。Kotlin 和 Java 都在 JVM 上运行但 Kotlin 写起来简洁很多谷歌现在也是官方推荐 Kotlin社区生态都在往这边迁移。你就算之前只写过 JavaScript 或者 PythonKotlin 的语法也足够友好。2.2 认识项目结构与 Gradle 的职责项目创建完之后你会被庞大的目录树吓到。别慌真正需要你关心的只有几个地方app/src/main/java/你的包名/MainActivity.kt这是应用的“主入口”你写的代码主要在这里。app/src/main/res/layout/activity_main.xml这是界面布局文件描述界面上有什么控件、怎么排列。app/src/main/res/values/strings.xml这是字符串资源文件界面显示的文字一般放在这里。app/src/main/AndroidManifest.xml这是应用的“说明书”声明应用有哪些页面、有什么权限、图标和名字是什么。build.gradle.kts和settings.gradle.kts这是构建脚本管理依赖库、版本号、打包配置。很多新手会纠结一个问题为什么布局不直接在代码里写非要搞一个 XML 文件答案是“资源与逻辑分离”。你把按钮位置、文字内容放在 XML 里代码只负责业务逻辑。这样改界面不需要动代码而且同一套代码可以适配不同屏幕尺寸通过 values-sw600dp 之类的目录甚至不同语言values-en、values-zh。这一整套资源管理机制是安卓系统从第一天就定下来的核心设计。构建的时候Gradle 会扫描 res 目录并生成一个 R 类里面是每个资源的唯一整数编号。你在代码里写R.layout.activity_main意思就是“引用布局文件 activity_main.xml”。这听起来有点绕但做多了就习惯了。2.3 Activity 与布局文件是怎么关联的打开MainActivity.kt你会看到一段类似这样的代码package com.example.myfirstapp import android.os.Bundle import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } }这段代码是每个安卓 Activity 的起点。onCreate是页面创建时系统调用的方法setContentView(R.layout.activity_main)的意思是“把这个布局渲染成界面”。如果你把 Activity 理解成一家餐厅的前台那么onCreate就是早晨开门营业的第一件事setContentView就是铺桌子、摆餐具、挂好菜单。整张“菜单”就是activity_main.xml具体每一道菜——按钮、文字、图片——都在这个 XML 文件里定义好了。打开activity_main.xml默认可能是空的或者有一个显示“Hello World!”的 TextView。选中它你可以看到左侧预览面板实时显示这个界面的样子。这就是你 App 的雏形。3. 手写一个简单界面按钮、进度条、协调布局3.1 用 XML 写一个可交互的界面自动生成的模板界面太单调了。我们手动改一下布局做一个带文字、按钮和进度条的简单页面。打开activity_main.xml把内容替换成下面这样。?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android android:layout_widthmatch_parent android:layout_heightmatch_parent android:orientationvertical android:gravitycenter android:padding16dp TextView android:idid/tvMessage android:layout_widthwrap_content android:layout_heightwrap_content android:textstring/message_default android:textSize20sp android:textStylebold / Button android:idid/btnClick android:layout_widthwrap_content android:layout_heightwrap_content android:textstring/btn_click / ProgressBar android:idid/progressBar android:layout_widthwrap_content android:layout_heightwrap_content android:visibilitygone / /LinearLayout这里我用了 LinearLayout垂直方向排列里面放了一个 TextView、一个 Button、一个 ProgressBar。重点说几个属性match_parent表示宽或高撑满父容器wrap_content表示只包住内容本身。dp是安卓里专用的尺寸单位和屏幕像素密度解耦sp是字体的专用单位会跟随系统字体缩放设置调整。千万不要用px去写尺寸否则在不同分辨率的手机上会变形。android:visibilitygone表示这个控件默认隐藏不占任何空间。后面我们用代码把它变成可见。同步地把strings.xml里的内容补上resources string nameapp_name我的第一个应用/string string namemessage_default欢迎来到安卓开发/string string namebtn_click点我一下/string /resources为什么按钮上的文字不直接写在 XML 里而是string/btn_click这就是前面说的资源管理。硬编码文字虽然快但后续做多语言适配时会非常痛苦。想清楚这一点你的起点就比很多瞎写的人高了一个档次。3.2 给按钮加上逻辑从布局到代码有了布局接下来让按钮真正“能用”。回到MainActivity.kt在onCreate里面加几行代码。package com.example.myfirstapp import android.os.Bundle import android.view.View import android.widget.Button import android.widget.ProgressBar 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) val tvMessage findViewByIdTextView(R.id.tvMessage) val btnClick findViewByIdButton(R.id.btnClick) val progressBar findViewByIdProgressBar(R.id.progressBar) btnClick.setOnClickListener { tvMessage.text 你已经成功点击了按钮 progressBar.visibility View.VISIBLE } } }这段逻辑很简单点击按钮后把 TextView 的文字改成“你已经成功点击了按钮”同时把进度条显示出来。findViewById这个函数负责把 XML 里定义的控件实例化到代码里这一步很繁琐所以后面会有 ViewBinding 这类替代方案但新手阶段先理解findViewById没坏处。到这里你就已经完成了一个完整交互闭环用户在界面上点击 - 代码响应 - 界面发生变化。这个模型适用于 90% 以上的 App 功能。3.3 关于协调布局与 Banner进阶功能提前打个底在网上搜安卓布局相关内容时你肯定会看到“android中协调布局banner”这个组合词。我再多聊两句给新手扫个盲。CoordinatorLayout 是安卓里一个非常强大的布局容器通俗点说它是“加强版的 FrameLayout”可以让子控件之间产生联动。最典型的场景是页面顶部有一个 Banner 广告位或者图片轮播用户手指向上滑动内容列表时Banner 会跟着滚出屏幕同时标题栏会收缩变小。如果你用 LinearLayout 或者 ConstraintLayout 去实现这种效果需要自己监听滚动事件、计算偏移量、写一堆动画代码。而 CoordinatorLayout AppBarLayout ViewPager2 这套组合拳是系统给我们准备好的“自动化方案”声明式地描述“当这个控件滚动时那个控件应该做什么”。新手阶段不需要立刻深入但要知道有这么个东西存在。我的建议是先弄懂 LinearLayout、ConstraintLayout 和 FrameLayout 的区别和适用场景等你要做稍微像样一点的首页时再去看 CoordinatorLayout 的官方示例也来得及。4. 构建 APK 并在模拟器和真机上运行4.1 如何生成 APK三种方式万事俱备等你准备好看到成果了。构建 APK 的方式有三种认识一下就行最直接的方式点击 Android Studio 工具栏上的绿色运行按钮ShiftF10它会自动构建 debug 包并安装到当前选中的模拟器或真机上。如果模拟器还开着此刻你应该能看到自己的 App 启动了。这种“跑起来”的感觉第一次真的很激动。生成 APK 文件菜单栏点击 Build - Build APK(s) - Build APK。构建完成之后右下角会弹出一个提示点击locate可以找到文件位置。默认路径是app/build/outputs/apk/debug/app-debug.apk。命令行构建进阶推荐在项目根目录执行下面的命令./gradlew assembleDebug构建完成后同样能在app/build/outputs/apk/debug/目录下找到 APK 文件。命令行方式在自动化部署和 CI/CD 里非常有用建议尽早习惯。这里要解释一下 debug 和 release 的区别。debug 包是给开发者调试用的默认使用调试签名包体积大运行效率也不是最优release 包是给最终用户用的需要配置正式签名支持代码混淆和资源压缩。初期你只需要 debug 包就够。再说 APK 的本质。一个 APK 文件其实就是 zip 压缩包只是后缀名不同。你可以把 APK 改成 .zip 然后解压能看到里面有几个关键目录classes.dex编译后的代码字节码、res/资源文件、lib/针对不同 CPU 架构的 so 原生库、AndroidManifest.xml清单文件二进制格式、还有META-INF里的签名信息。理解了 APK 的内部结构之后遇到“为什么安装不上”“为什么包这么大”这类问题你就有排查方向了。4.2 真机调试开启 USB 调试与 adb 常用命令模拟器跑起来了接下来一定要在真机上试试。真机调试并不复杂但有几个步骤是网上经常误导新手的地方我详细说明一下。首先打开手机的“设置 - 关于手机”找到“版本号”连续点击 7 次直到系统提示“您已处于开发者模式”。然后回到设置主页面找到“开发者选项”打开里面的“USB 调试”开关。不同品牌的手机路径可能略有不同但关键词就是“开发者选项”和“USB 调试”。然后用 USB 数据线连接电脑和手机。这里有个坑很多数据线只能充电不能传数据如果连接后 adb 不识别设备先换一根线试试。连接后手机会弹出一个“是否允许 USB 调试”的对话框勾选“始终允许”点确定。在命令行输入adb devices如果看到类似下面的输出说明连接成功List of devices attached 0123456789ABCDEF device如果状态显示“unauthorized”表示手机上的授权窗口被忽略了重新拔插数据线再在手机上确认一次。如果显示“offline”一般是因为 adb 版本太老或者驱动问题升级 Android Studio或者下载最新的 platform-tools 即可。adbc 是安卓调试桥是开发者和安卓设备之间的桥梁。常用命令我整理成表格方便你以后查阅命令作用adb devices查看已连接的设备列表adb install app-debug.apk安装 APK 到设备adb uninstall 包名卸载应用adb shell am start -n 包名/包名.MainActivity通过包名启动应用adb logcat查看设备实时日志adb shell getprop ro.product.cpu.abi查看手机 CPU 架构调试过程中如果 App 崩溃了第一时间打开 logcat 看红色堆栈信息。这条经验能帮你省下大量排查时间。4.3 安装失败先看懂这几个错误码新手第一次把 APK 发给朋友或者装到自己手机上时大概率会碰到安装失败的情况。常见的错误码就这几个错误码原因解决方案INSTALL_FAILED_UPDATE_INCOMPATIBLE手机上已装了同一个包名的应用但签名不一致先卸载旧应用再安装INSTALL_FAILED_INSUFFICIENT_STORAGE手机存储空间不足清理存储空间INSTALL_FAILED_USER_RESTRICTED系统禁止安装未知来源应用手动进入设置允许“安装未知应用”INSTALL_FAILED_NO_MATCHING_ABISAPK 里没有匹配当前手机 CPU 架构的 so 库在 build.gradle 中配置 abiFilters或提供对应架构的 so 库最后一个 ABI 错误值得展开说。有些旧 APK 只包含 armeabi-v7a 的 so 库在 x86_64 的模拟器或者 arm64 的新手机上就会直接翻车。你可以检查app/build.gradle.kts在 defaultConfig 中指定支持的 ABIdefaultConfig { ... ndk { abiFilters listOf(armeabi-v7a, arm64-v8a, x86_64) } }这样打包出来的 APK 会按需包含对应架构的 so 库。代价是包体积会变大所以现在很多应用改用 App Bundle 方案让应用商店按用户手机架构分发对应的包。这属于后话了但你现在知道这个逻辑以后看到“为什么这个 APK 在小米上能用在电脑模拟器上不能用”时就不会一脸懵。5. 常见问题与排查技巧实录5.1 应用启动闪白/闪屏问题不少新手调试时会发现自己写的 App 打开时先闪一下白屏然后才显示界面。这是很正常的现象不用慌。原因是安卓冷启动时系统首先加载主题背景然后再去渲染你写的布局。如果你的主题背景是白色而布局加载又需要一定时间那用户就会看到白屏。如果想解决可以从两个方向入手一是缩短布局加载时间不要在onCreate里做耗时操作比如网络请求、数据库读取这些应该放到子线程或者协程里二是自定义启动主题把windowBackground设置成你的品牌色或者启动图让白屏变成“有内容的启动画面”。5.2 Android Studio 汉化后失效或乱码前面提到了中文语言包这里补个常见问题。如果你安装汉化包之后界面还是英文或者出现乱码多数是因为语言包版本和 IDE 版本不匹配。去插件市场更新语言包或者升级 Android Studio一般能解决。至于代码里的中文乱码看看编辑器右下角编码格式是否 UTF-8。在新版 Android Studio 中可以在 Settings - Editor - File Encodings 里统一设置把 Global Encoding、Project Encoding、Default encoding for properties files 都改成 UTF-8。这不是小事编码不一致轻则界面文字变成乱码重则编译报错别看走眼。5.3 图标不生效或查询 SHA1 签名值App 图标是门面。帮别人做的内部工具如果老顶着默认机器人图标多少有点尴尬。替换图标的方法是右键res目录 - New - Image Asset可以基于一张图片生成自适应图标Adaptive Icon支持圆形、圆角矩形等形状效果比老式图标好很多。生成的图标会覆盖默认的ic_launcher资源不用手动修改 Manifest。这里要特别提一下SHA1签名值。你在做微信登录、地图 SDK 或者极光推送时平台方都会要求填写应用的签名 SHA1。获取方式有两种一种是在 Android Studio 右侧 Gradle 面板中选择你的 app 模块的 Tasks - android - signingReport运行后看输出另一种是命令行keytool工具。keytool -list -v -keystore your_key.jks -alias your_alias -storepass your_storepass这条命令会输出 MD5、SHA1、SHA256 三组值一般平台要的是 SHA1 或者 SHA256。注意不同签名文件debug 和 release是不同的调试阶段填写 debug 签名的值正式发布要换 release 签名的值这点很多人会踩坑。5.4 APK 包体积过大怎么优化等你项目做大了会发现稍微加几个依赖APK 包轻松突破五六十兆。网上那种“精简版 20M”的说法其实就是做了全方面瘦身。我整理一下最有效的瘦身方向开启代码混淆和资源压缩。在build.gradle.kts的 release 配置里加上isMinifyEnabled true和isShrinkResources trueGradle 会移除无用代码和资源效果立竿见影。图片尽量转成 WebP 格式或者用矢量图。检查依赖删除未使用的库。多架构 so 库按需打包用上面说的abiFilters控制。使用 App Bundle 代替 APK 上传应用商店这是官方推荐做法。你不需要一开始就做这些优化但心里要有数APK 不是越重越好用户对包体积是很敏感的。5.5 看到 content:// 开头的路径不要慌有些同学在抓日志或者查文件时会看到类似content://com.tencent.wework.fileprovider/external_path/...这样的字符串然后一头雾水。我来解释一下。从 Android 7.0 开始系统禁止应用之间直接通过file://方式暴露文件的真实路径取而代之的是用content://加上 FileProvider 来安全传递文件。你会看到的那些形如com.xxx.fileprovider的字符串其实就是某个 App 通过 FileProvider 开放的临时访问通道地址。对你来说现阶段只要知道当你需要开放文件共享能力比如点击按钮分享图片给微信在AndroidManifest.xml里配置 FileProvider然后在代码中生成content://URI 就可以了。这属于“进阶但必学”的知识点不用急遇到实际需求再补。6. 从第一个 APK 到更远的地方6.1 签名、混淆与上架准备上面我们提到 debug 包和 release 包的区别。如果你想把 App 分享给朋友长期使用或者考虑上架应用商店那就必须学会正式签名。正式签名的操作流程是Build - Generate Signed Bundle / APK选择 APK然后 Create New Key Store填写一些密钥信息。生成.jks文件后一定要牢牢保管因为应用后续更新必须用同一个签名文件丢了签名你的应用就永远无法升级了。关于混淆官方推荐使用 R8 编译器它同时负责压缩、优化和混淆。需要保留的规则写在proguard-rules.pro文件中比如你用到了 Gson 反序列化的实体类就要加 Keep 规则。这个阶段你可能用不上但提到混淆就要明白它是干什么的它本质上是一种代码保护机制同时也改善了包体积和启动速度。应用商店现在普遍推荐上传 AABAndroid App Bundle而不是单独的 APK。AAB 不是最终安装包而是由应用商店根据用户设备特性动态生成并分发的 APK 集合。好处是用户只下载对应自己架构和语言适配的部分包体积能缩小不少。6.2 入行之后可以延伸的方向写完第一个 APK你已经跨过了新手村门槛。接下来往哪走我给你梳理几个方向跨平台开发如果你本身会 Python 或网页开发可以尝试用 Kivy、Flet 或 Flutter、React Native 打包 APK。比如 python flet 打包 apk 最近比较火用 Python 写了一段时间脚本的人可以无缝迁移。游戏开发用 Cocos Creator 或者 Unity 导出 APK核心逻辑在引擎里写安卓端只是壳。系统能力调用蓝牙、传感器、语音唤醒、多应用录音等。这些需求的难点往往不在代码本身而在各家手机的兼容性适配需要你有耐心去打磨。性能与安全APK 加壳、脱壳、反编译分析、dex 注入这些属于逆向工程和安全领域的范畴。做这行需要很强的技术功底也要注意在法律边界内研究更多是帮助企业做安全检测和防御。无论选哪个方向我建议你先把原生 Android 的四层结构——Application、Activity、Service、ContentProvider——理解透。这四个组件是安卓的地基其他框架都是在它们之上盖楼。6.3 我个人踩过的一些坑文章快结束了最后想给你分享几条真正的“血泪经验”。第一Windows 用户别把项目路径放到带中文的目录下比如“D:\我的项目”Gradle 构建偶尔会抽风报奇怪的编码错。第二Android Studio 的 Gradle 版本和 Android Gradle Plugin 版本必须匹配不要随便升级其中之一否则构建报错会让你怀疑人生。第三调试阶段多去看 logcat而不是凭感觉猜日志里往往已经把问题原因写得明明白白。第四当你卡在某一步超过半小时就停下来休息一会儿去官方文档看看样例代码很多问题其实就是差一个细节。安卓开发这行入门比很多人想象中简单进阶也确实不容易。但只要你亲手把一个 APK 构建出来装进手机点击图标看到自己的界面出现那种成就感会推着你继续往前走。以后遇到报错学会拆解问题、查日志、翻文档你就能在这个领域慢慢站稳脚跟了。