Android 开发环境解析:从SDK、NDK到版本兼容性指南

文章目录

  • 前言
  • 一、核心组件详解:认识Android工具包
    • [1. SDK(Software Development Kit)](#1. SDK(Software Development Kit))
    • [2. NDK(Native Development Kit)](#2. NDK(Native Development Kit))
    • [3. 构建工具(Build-Tools)](#3. 构建工具(Build-Tools))
    • [4. 命令行工具(Command-line Tools)与平台工具(Platform-Tools)](#4. 命令行工具(Command-line Tools)与平台工具(Platform-Tools))
    • [5. Gradle](#5. Gradle)
  • 二、版本对应关系:避免兼容性陷阱
    • [1. Gradle与Java JDK的对应关系](#1. Gradle与Java JDK的对应关系)
    • [2. Android API Level与系统版本对照表](#2. Android API Level与系统版本对照表)
    • [3. 详解三大SDK版本及其设置策略](#3. 详解三大SDK版本及其设置策略)
      • [3.1 compileSdkVersion(编译SDK版本)](#3.1 compileSdkVersion(编译SDK版本))
      • [3.2 minSdkVersion(最低SDK版本)](#3.2 minSdkVersion(最低SDK版本))
      • [3.3 targetSdkVersion(目标SDK版本)](#3.3 targetSdkVersion(目标SDK版本))
      • [3.4 三者关系总结](#3.4 三者关系总结)
    • [4. SDK版本与Java JDK的对应关系](#4. SDK版本与Java JDK的对应关系)
      • [4.1 实用配置示例](#4.1 实用配置示例)
      • [4.2 核心要点回顾](#4.2 核心要点回顾)
  • 三、最佳实践与开发注意事项
    • [1. 设置安装路径减少C盘占用:](#1. 设置安装路径减少C盘占用:)
    • [2. 环境配置](#2. 环境配置)
    • [3. 版本管理](#3. 版本管理)
    • [4. NDK使用原则](#4. NDK使用原则)
    • [5. 保持更新与兼容性权衡](#5. 保持更新与兼容性权衡)
    • [6. 针对低版本 (minSdk < 20) 的开发注意事项](#6. 针对低版本 (minSdk < 20) 的开发注意事项)
      • [6.1 运行时权限 (API 23+)](#6.1 运行时权限 (API 23+))
      • [6.2 HTTP 明文通信限制 (API 28+)](#6.2 HTTP 明文通信限制 (API 28+))
      • [6.3 不再推荐使用的 API](#6.3 不再推荐使用的 API)
      • [6.3 屏幕适配和 UI 设计](#6.3 屏幕适配和 UI 设计)
  • 四、总结

前言

Android的开发一直都不简单,因为Android的开发涉及到许多工具,而这些工具又分为许多版本,在使用时需要考虑不同工具版本之间的兼容性、项目所需的特性。

本文旨在带你理清这些Android工具的概念、关系、版本,希望能够在你未来的Android开发中提供助力。


一、核心组件详解:认识Android工具包

当我们开始Android开发时,首先会遇到一系列开发工具包,它们各司其职,共同构成了Android的开发环境。

1. SDK(Software Development Kit)

Android SDK是Android专属的软件开发工具包,是使用Java或Kotlin开发Android应用的基础。它包含了构建Android应用所需的一切:代码库、调试工具、模拟器以及详细的文档。

2. NDK(Native Development Kit)

NDK是本地开发工具包,用于让开发者能够使用C和C++等语言实现应用的一部分。它的主要作用是:

  • 将C/C++代码编译成可在Android上运行的SO动态库。
  • 通过JNI(Java Native Interface)接口使Java代码可以调用这些本地库。

NDK常用于需要高性能计算的任务(如图像处理、游戏引擎)或复用现有的C/C++库。

3. 构建工具(Build-Tools)

Build-Tools是Android SDK中的一组编译、打包和调试工具 ,位于android_sdk/build-tools/version/目录下。主要包括:

  • aapt2:将资源文件编译成优化过的二进制格式。
  • apksigner:对APK进行签名。
  • zipalign:优化APK文件。

构建项目时一定会用到这些工具。

4. 命令行工具(Command-line Tools)与平台工具(Platform-Tools)

  • 命令行工具 :位于android_sdk/cmdline-tools/version/bin/,包含sdkmanager(用于管理SDK包)、avdmanager(管理虚拟设备)等关键工具。
  • 平台工具 :位于android_sdk/platform-tools/,包含开发app的平台依赖的开发和调试工具 ,最核心的是adb(Android调试桥)和fastboot

5. Gradle

Gradle是Android项目的构建自动化工具。它不是一个特定的Android工具,但Android开发强烈依赖它来管理依赖、配置构建变体及打包应用。

下表清晰地展示了这些核心组件的职责与包含关系:

组件名称 核心职责 包含的重要工具/内容 在SDK中的目录位置
SDK Android应用开发综合套件 库、文档、模拟器、其他所有工具包 android_sdk/
NDK C/C++本地代码开发 本地编译工具链 android_sdk/ndk/
Build-Tools 编译、打包、优化APK aapt2, zipalign, apksigner android_sdk/build-tools/版本号/
Command-line Tools SDK包和虚拟设备管理 sdkmanager, avdmanager android_sdk/cmdline-tools/版本号/bin/
Platform-Tools 平台级的调试和刷机 adb, fastboot android_sdk/platform-tools/
Gradle 项目构建和依赖管理 Android Gradle插件 (独立存在,通过项目配置)

二、版本对应关系:避免兼容性陷阱

版本兼容性是Android开发中最常见的"坑"之一。确保以下组件之间的版本匹配至关重要。

1. Gradle与Java JDK的对应关系

选择正确的JDK版本是保证Gradle能够正常工作的前提。以下是主要的兼容性对照表:

Gradle 版本 支持的 JDK 版本 推荐 JDK 版本
Gradle 8.x JDK 17 或更高 JDK 17(官方推荐LTS)
Gradle 7.x JDK 8 - 17 JDK 1117(均为LTS)
Gradle 6.x JDK 8 - 16 JDK 8 或 11
Gradle 5.x JDK 8 - 14 JDK 8

最佳实践建议

  • 优先选择LTS版本:如JDK 17、21等,它们提供长期支持,更适合生产环境。
  • 避免使用非LTS版本:如JDK 22、23,其维护周期短,可能带来不必要的升级负担。

2. Android API Level与系统版本对照表

Android版本通过API Level来标识,它是开发时设定编译和目标版本的依据。您参考的官方源码网站是获取最准确对应关系的最佳途径。以下是一个简化的示例(请务必以官方文档为准):

可参考文档:版本说明概述

Android 版本 API 级别 代号 标志性特性与影响
Android 16 36 Baklava 测距模块,桌面模式增强 ,APV编解码器,大屏强制边到边以旧换新模式
Android 15 35 Vanilla Ice Cream 健康记录集成, 多蓝牙设备共享
Android 14 34 Upside Down Cake 细化的媒体权限, 语法屈折变化API
Android 13 33 Tiramisu 基于Material You的个性化主题, 应用独立语言设置
Android 12 31 Snow Cone Material You设计语言, 隐私指示器, 富媒体内容插入
Android 11 30 Red Velvet Cake 对话气泡, 一次性权限滚动截屏
Android 10 29 Q 全局深色模式, 手势导航折叠屏支持
Android 9 28 Pie 刘海屏支持 , 室内定位, 生物识别提示
Android 8 26-27 Oreo 通知渠道, 画中画, 自动填充框架
Android 7 24-25 Nougat 多窗口模式, JIT编译器, Vulkan API
Android 6.0 23 Marshmallow 运行时权限管理 ,应用待机模式,指纹识别支持,Doze电量管理。这是权限模型的重大变革。
Android 5.1 22 Lollipop 正式引入 4K视频录制,多SIM卡支持,高清语音(VoLTE)。
Android 5.0 21 Lollipop Material Design 设计语言引入,ART运行时取代Dalvik (性能提升),通知锁屏显示,Project Volta(省电优化)。是一次视觉和性能的巨大飞跃。
Android 4.4W 20 KitKat with Wearables 专门为智能手表等可穿戴设备推出的版本。
Android 4.4 19 KitKat 沉浸式全屏模式 ,新的电话拨号逻辑,打印框架,WebView 基于 Chromium。目前很多库的绝对最低支持版本。
Android 4.3 18 Jelly Bean 受限配置文件,蓝牙低功耗(BLE)支持,OpenGL ES 3.0 支持。
Android 4.2 17 Jelly Bean 多用户支持(平板),Daydream屏幕保护程序,通知栏快捷设置面板。
Android 4.1 16 Jelly Bean "黄油计划"(Project Butter),显著提升系统流畅度和响应速度,可展开的通知,Google Now。
Android 4.0.3 - 4.0.4 15 Ice Cream Sandwich 主要是漏洞修复和API优化。
Android 4.0.1 - 4.0.2 14 Ice Cream Sandwich 统一了手机和平板的UI设计(Holo主题),虚拟导航键,人脸解锁,数据使用跟踪。
Android 3.2 13 Honeycomb 兼容模式优化,允许为不同尺寸屏幕缩放应用。
Android 3.1 12 Honeycomb 支持USB连接外设(如手柄、键盘),MTP/PTP文件传输。
Android 3.0 11 Honeycomb 专为平板设计 ,引入全息(Holo)主题,Fragment,Action Bar,系统栏。虽然不用于手机,但其很多设计被ICS继承。
Android 2.3.3 - 2.3.7 10 Gingerbread 引入了 NFC 支持,改进的电源管理。
Android 2.3 - 2.3.2 9 Gingerbread UI界面趋向扁平化 ,原生支持前置摄像头,传感器管理,NDK支持得以增强。这是早期非常经典和稳定的版本。
Android 2.2.x 8 Froyo 引入JIT编译,大幅提升运行速度,支持将应用安装到SD卡,移动热点功能。
Android 2.1 7 Eclair 支持动态壁纸,语音转文字,HTML5浏览器功能增强。
Android 2.0.1 6 Eclair 小幅更新。
Android 2.0 5 Eclair 引入账户同步功能,支持多账户联系人,HTML5支持,蓝牙2.1。

3. 详解三大SDK版本及其设置策略

在项目的 build.gradle 文件中,你会这样配置它们:

gradle 复制代码
android {
    compileSdk 34 // 编译SDK版本,建议使用最新稳定的API Level
    defaultConfig {
        targetSdk 34 // 目标SDK版本,应用在此API Level上经过充分测试
        minSdk 24 // 应用支持的最低API Level,决定能安装到多少设备上
    }
}

在项目的 build.gradle 文件中,这三个参数共同决定了应用的编译和行为。

3.1 compileSdkVersion(编译SDK版本)

  • 它是什么 :指定编译时所使用的Android SDK版本。它相当于你编写代码时参考的"语法手册"的版本号。
  • 最佳实践与注意事项
    • 始终使用最新稳定版:这能确保你在编译时就能发现已被弃用的API,并为使用新API做好准备。
    • 不影响运行时行为:修改此值不会改变APK在用户设备上的运行方式,但可能会出现新的编译警告或错误。
    • 与支持库的关联:如果你使用AndroidX等支持库,通常需要使用最新的SDK版本来编译,以获得完整的兼容性。

3.2 minSdkVersion(最低SDK版本)

  • 它是什么 :定义你的应用可以安装和运行的最低Android系统版本 。例如,设置为21意味着所有Android 5.0以下的用户都无法安装你的应用。
  • 最佳实践与注意事项
    • 权衡用户覆盖与开发成本:设置过低,会牺牲现代API带来的开发效率和优秀用户体验;设置过高,则会失去部分低版本用户。可以参考Google官方提供的版本分布数据做出决策。
    • 版本检查 :如果你想在代码中使用高于minSdkVersion的API,必须 在运行时检查系统版本(Build.VERSION.SDK_INT),并在低版本系统上提供备选方案或降级处理。
    • 第三方库的限制 :你引入的第三方库自身也有最低SDK要求。你项目的minSdkVersion必须大于或等于所有依赖库中要求最高的那个。

3.3 targetSdkVersion(目标SDK版本)

  • 它是什么 :向系统声明你的应用已针对该版本进行过充分测试和优化,希望在此版本及以上的系统中以最新的行为模式 运行。这是Android向前兼容的核心机制。
  • 最佳实践与注意事项
    • 及时更新并充分测试 :Google强烈建议将targetSdkVersion更新至最新版本。但每次更新前,必须在对应的真机上进行全面测试,因为新系统版本可能引入了影响应用行为的变更。
    • 理解其"开关"作用 :当系统版本高于应用的targetSdkVersion时,系统会启用兼容性行为来确保应用正常运行。一旦你将targetSdkVersion提升到该版本,就意味着你接受了新的系统行为,兼容模式会关闭。例如,从Android 12(API 31)开始,需要精确的蓝牙权限,如果你的targetSdkVersion低于31,即使安装在Android 12+的设备上,系统也不会强制你申请此权限。

3.4 三者关系总结

理想情况下,应遵循:minSdkVersion <= targetSdkVersion == compileSdkVersion (最新SDK)。

4. SDK版本与Java JDK的对应关系

Android开发环境(特别是Android Gradle Plugin,AGP)的Java语言特性支持与JDK版本紧密相关。

开发环境 / 构建工具 推荐/支持的 JDK 版本 说明
最新版 Android Studio, AGP JDK 17 (推荐LTS) 或 21 从AGP 7.0开始,支持使用Java 11语言特性编译。当前最新环境已能良好支持更高版本。
Android Studio 3.0+ JDK 8 支持所有Java 7语言功能和Java 8语言功能的一个子集。

核心关系 :你选择的 compileSdkVersion 必须能够被你本地安装的JDK所支持。例如,要使用较高的 compileSdkVersion(如34),通常需要搭配较新的JDK(如JDK 17或21)。Java的class文件有版本号(major version),例如JDK 17对应61。如果使用过高JDK编译的库,而在低版本JDK环境中构建,就会遇到类似 "Unsupported class file major version 66"(对应Java 22)的错误。

参考文章:Android (已解决)Gradle 编译失败 Unsupported class file major version 61

4.1 实用配置示例

以下是一个现代Android应用 build.gradle 中Android配置的示例:

gradle 复制代码
android {
    compileSdk 34 // 使用最新SDK编译,以便使用新API和获得编译时检查

    defaultConfig {
        minSdk 24 // 覆盖大部分现有设备,同时能利用现代API
        targetSdk 34 // 已针对Android 14进行充分测试,采用其新行为
        ...
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
}

4.2 核心要点回顾

  • compileSdkVersion :决定编译环境,用最新的
  • minSdkVersion :决定市场范围,谨慎权衡
  • targetSdkVersion :决定在新系统上的行为,及时更新并充分测试
  • JDK版本 :与构建工具和 compileSdkVersion 匹配,推荐使用LTS版本(如JDK 17/21)

三、最佳实践与开发注意事项

1. 设置安装路径减少C盘占用:

注意:我们设置的安装路径除了不要出现中文,最好也不要出现空格,回想起当年因SDK默认路径有空格原因导致构建失败,都是泪啊~~~

设置SDK、Gradle安装路径可以减少C盘占用:

我们的 JDK 可能会不兼容,可以从 Oracle官网 下载所需的 JDK:

2. 环境配置

  • 正确设置 ANDROID_HOMEANDROID_SDK_ROOT 环境变量,指向你的Android SDK安装目录。
  • platform-toolsbuild-tools 目录的路径添加到系统的 PATH 变量中,以便在命令行中直接使用 adb 等工具。

3. 版本管理

  • 使用 Android Studio 的 SDK Manager 或命令行工具 sdkmanager 来下载和管理不同版本的SDK、NDK和构建工具。
  • 在团队协作中,通过项目中的 gradle-wrapper.properties 文件固定Gradle版本,确保所有成员构建环境一致。

4. NDK使用原则

  • 仅在必要时使用NDK。对于大多数应用功能,使用Java或Kotlin开发更简单高效。NDK主要用于性能极度敏感的模块、使用现有C/C++库或处理特定底层硬件操作时。

5. 保持更新与兼容性权衡

  • 定期更新构建工具和Gradle插件到稳定版本,以获取性能改进和新功能。
  • 在更新 targetSdkVersion 时,务必仔细测试应用在新系统版本上的行为,确保兼容性。

6. 针对低版本 (minSdk < 20) 的开发注意事项

当你的 minSdkVersion 设置为较低的值(如低于 19/KitKat)时,需要特别注意以下问题:

6.1 运行时权限 (API 23+)

  • 问题 :在 targetSdkVersion >= 23minSdkVersion < 23 的应用中,权限处理变得复杂。
  • 对策 :对于所有在 Android 6.0 (API 23) 及以后被定义为"危险权限"的权限(如相机、位置、存储等),必须在代码中判断当前设备的系统版本。如果设备是 API 23+,则必须在运行时申请权限;如果是 API 22-,则只需在清单文件中声明即可。
java 复制代码
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        // 在 API 23+ 设备上,检查并申请权限
        if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.CAMERA}, REQUEST_CODE);
        }
    } else {
        // 在 API 22- 设备上,默认已拥有权限,直接执行操作
        openCamera();
    }

6.2 HTTP 明文通信限制 (API 28+)

  • 问题 :从 Android 9 (API 28) 开始,默认禁止应用进行明文 HTTP 通信。但如果你的 targetSdkVersion 低于 28,则不受此限制。
  • 对策 :如果 targetSdkVersion >= 28 但仍需使用 HTTP,必须在 network_security_config.xml 文件中进行配置。对于 minSdkVersion 很低的应用,这通常意味着需要多套网络配置。

6.3 不再推荐使用的 API

  • 问题 :很多早期版本的 API 在现代版本中已被标记为 deprecated(弃用)甚至移除。例如 Apache HTTP Client 在 API 22 后被移除,AsyncTask 在 API 30 后被弃用。
  • 对策 :即使 minSdkVersion 很低,也应尽量避免使用已被弃用的 API。可以使用支持库(如 OkHttp 替代 HTTP Client)或现代并发工具(如 Kotlin 协程、java.util.concurrent 包)来编写向前兼容的代码。

6.3 屏幕适配和 UI 设计

  • 问题:早期版本屏幕尺寸和分辨率非常单一,现代应用需要兼顾小屏手机和大屏折叠设备。
  • 对策 :使用 ConstraintLayout 等灵活的布局,避免使用绝对像素,多用 wrap_content, match_parent 和权重。资源文件使用密度无关单位(dp, sp)。

四、总结

理顺 Android 开发工具链是迈向成功开发的第一步。核心在于理解 SDK 是基础平台 ,NDK 是性能增强利器 ,而 Gradle 是项目构建的指挥官 。同时,时刻关注 Gradle、JDK 和 Android API级别 之间的版本兼容性,是避免各种诡异构建错误的关键。

  • 历史版本的意义 :了解这些版本有助于理解 Android 系统的演进,尤其是像 运行时权限(Marshmallow)Material Design(Lollipop) 这样的分水岭式更新。
  • 现代 minSdkVersion 的选择 :目前,行业普遍将 API 19 (Android 4.4 KitKat)API 21 (Android 5.0 Lollipop) 作为新的 "事实最低标准",因为这可以让你摒弃大量兼容旧版的代码,充分利用现代 API,同时仍能覆盖绝大多数设备。
  • 核心原则 :始终牢记 minSdkVersion 决定了你代码的下限 ,你需要为这个版本以上的所有系统特性差异负责。而 targetSdkVersion 决定了应用在最新系统上的行为上限,应及时更新并充分测试。
相关推荐
00后程序员张2 小时前
App 上架全流程指南,iOS 应用发布步骤、ipa 文件上传工具、TestFlight 分发与 App Store 审核经验分享
android·ios·小程序·https·uni-app·iphone·webview
2501_916013742 小时前
iOS App 上架流程详解,苹果应用发布步骤、App Store 审核规则、ipa 文件上传与测试分发实战经验
android·ios·小程序·https·uni-app·iphone·webview
周杰伦的稻香4 小时前
MySQL中的空间碎片率计算分析
android·数据库·mysql
用户095 小时前
MVI架构如何改变Android开发模式
android·面试·kotlin
梦终剧5 小时前
【Android之路】.sp和界面层次结构
android
2501_916008896 小时前
iOS 26 软件性能测试全流程,启动渲染资源压力对比与优化策略
android·macos·ios·小程序·uni-app·cocoa·iphone
zh_xuan6 小时前
Android Handler源码阅读
android
雪饼android之路6 小时前
【Android】 android suspend/resume总结(3)
android·linux
00后程序员张6 小时前
iOS 26 兼容测试实战,机型兼容、SwiftUI 兼容性改动
android·ios·小程序·uni-app·swiftui·cocoa·iphone