rokevin
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
  • 版本变更

  • Android13(API33)
  • Android12(API31)
  • Android11(API30)
  • Android10(API29)
  • Android9.0(API28)
  • Android8.0(API26)
    • 后台执行限制
    • 通知渠道
  • Android7.0(API24)
    • 文件共享限制
    • 多窗口支持
  • Android6.0(API23)

版本变更

Android13(API33)

Android 13 (API 33) 的发布标志着系统在用户隐私保护方面取得的重大进展。这一版本引入了 新的运行时通知权限 ,旨在给予用户更多控制权并提高透明度。这项变化对应用开发者提出了新的挑战,同时也为提升用户体验创造了机会。

在Android 13中,系统引入了 POST_NOTIFICATIONS 权限,这是一个新的运行时权限,用于控制应用发送非豁免通知的能力。这意味着应用需要在运行时动态请求这个权限,才能正常发送通知。这一变化适用于所有类型的通知,包括普通的应用通知和前台服务通知。

为了适应这一变化,开发者需要采取以下策略:

  1. 及时更新应用的目标SDK版本 :将targetSdkVersion设置为33或更高,以充分利用新版本系统提供的功能和改进。
  2. 在适当时机请求权限 :开发者应该在用户明确需要使用通知功能时才请求POST_NOTIFICATIONS权限,而不是在应用启动时就请求所有权限。这种做法不仅能提高权限请求的成功率,还能增强用户对应用的信任。
  3. 提供明确的权限使用说明 :在请求POST_NOTIFICATIONS权限时,开发者应该向用户解释为什么需要这个权限,以及它将如何改善用户体验。这可以帮助用户做出知情的决定,同时减少因误解而拒绝权限的情况。
  4. 实现权限降级处理 :如果用户拒绝授予POST_NOTIFICATIONS权限,应用应该能够优雅地降级功能,而不是完全失效。开发者需要考虑如何在没有通知功能的情况下提供基本服务,或者引导用户重新考虑授权。
  5. 注意权限请求的频率 :为了避免打扰用户,开发者应该避免频繁请求同一权限。如果用户已经拒绝了一次权限请求,应用应该在一段时间内不再重复请求,除非有明显的理由表明用户的态度可能发生了变化。

通过采取这些策略,开发者可以确保应用在Android 13及更高版本中保持良好的兼容性和用户体验,同时也能满足系统对数据隐私保护的新要求。虽然这些变化可能会增加开发的复杂度,但从长远来看,它们将有助于提高整个Android生态系统的安全性和可靠性,最终受益的是广大用户。

Android12(API31)

Android 12 (API 31) 的发布标志着系统在隐私保护方面取得了重大进展。这一版本引入了一系列创新功能,旨在赋予用户更多控制权并提高透明度。这些变化对应用开发者提出了新的挑战,同时也为提升用户隐私保护创造了机会。

Android 12 最引人注目的隐私保护特性包括:

  1. 隐私仪表板 :这是一个集成界面,允许用户查看哪些应用访问了他们的位置、相机和麦克风等敏感权限。这个功能不仅提高了透明度,还为用户提供了更直观的方式来管理应用权限。

  2. 近似位置访问 :Android 12允许用户授权应用仅访问大致位置而非精确坐标。这一变化有效减少了对用户行踪的追踪,同时满足了一些应用对位置信息的基本需求。

为了适应这些变化,开发者需要采取以下策略:

  1. 更新位置权限请求 :在Android 12中,开发者不能仅请求ACCESS_FINE_LOCATION权限。正确的做法是在单个运行时请求中同时包含ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION权限。这是因为系统要求这两个权限必须一起请求,以提供用户选择的机会。
  2. 优化权限请求时机 :开发者应该在用户明确需要使用特定功能时才请求相应的权限。例如,只有在用户主动使用地图功能时才请求位置权限。这种做法不仅能提高权限请求的成功率,还能增强用户对应用的信任。
  3. 提供明确的权限使用说明 :在请求敏感权限时,开发者应该向用户解释为什么需要这个权限,以及它将如何改善用户体验。这可以帮助用户做出知情的决定,同时减少因误解而拒绝权限的情况。
  4. 实现权限降级处理 :如果用户仅授予了ACCESS_COARSE_LOCATION权限,应用应该能够优雅地降级功能,而不是完全失效。开发者需要考虑如何在仅有大致位置信息的情况下提供基本服务。
  5. 更新隐私政策 :鉴于Android 12增加了许多新的隐私保护功能,开发者需要更新应用的隐私政策,明确说明应用如何处理用户数据,以及用户如何控制这些数据的使用。

通过采取这些策略,开发者可以确保应用在Android 12及更高版本中保持良好的兼容性和用户体验,同时也能满足系统对数据隐私保护的新要求。这些变化虽然增加了开发的复杂度,但从长远来看,它们将有助于提高整个Android生态系统的安全性和可靠性,最终受益的是广大用户。

Android11(API30)

Android 11 (API 30) 的发布标志着系统在存储管理方面的一项重大变革。这一版本 强制实施了分区存储 策略,对应用的文件访问权限进行了严格限制。这项变化旨在提高用户数据的隐私保护,但也对应用的文件管理方式提出了新的挑战。

在Android 11中,系统对应用的外部存储访问权限进行了全面收紧。即使是那些将targetSdkVersion设置为30的应用,也不再能够使用 requestLegacyExternalStorage 标记来绕过分区存储的限制。这意味着所有应用都将受到分区存储策略的约束,无法再像以前那样自由访问外部存储空间。

为了适应这一变化,开发者需要采取以下策略:

  1. 使用MediaStore API :对于多媒体文件的访问,MediaStore API提供了统一的接口。这种方法不仅符合Android 11的新规范,还能确保应用在未来版本中保持良好的兼容性。
  2. 使用Storage Access Framework (SAF) :对于需要访问非媒体文件的情况,SAF提供了一个标准化的API,使应用可以与用户设备上的各种存储提供者进行交互。通过SAF,应用可以请求用户授权访问特定的文件或目录,而不是像以前那样直接访问整个外部存储。
  3. 利用应用专属目录 :Android 11为每个应用提供了专用的外部存储目录,位于 /storage/emulated/0/Android/data/<package name>/files 路径下。这个目录是应用的私有空间,无需任何特殊权限即可访问。开发者可以充分利用这个空间来存储应用相关的数据和文件。
  4. 注意权限请求时机 :在Android 11中,系统对权限请求的时机有了更严格的要求。开发者应该在用户明确需要访问特定文件或目录时才请求相应的权限,而不是在应用启动时就请求所有权限。这种做法不仅能提高权限请求的成功率,也能增强用户对应用的信任。

对于需要访问大量文件的特殊应用,如文件管理器或备份软件,Android 11引入了 MANAGE_EXTERNAL_STORAGE 权限。申请这个权限需要在AndroidManifest.xml文件中声明:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

然而,使用这个权限需要格外谨慎。Google Play商店对使用此权限的应用有严格的审核要求,开发者需要提供充分的理由说明为什么常规的SAF或MediaStore API无法满足应用的需求。

在进行适配时,开发者还需要注意 数据迁移 的问题。对于已经安装在Android 11设备上的应用,系统提供了一个 preserveLegacyExternalStorage 标记,允许应用暂时保留原有的存储模式。这个标记可以在应用更新到Android 11后使用,但它会在应用卸载后失效。因此,开发者需要制定详细的迁移策略,确保用户数据在新旧存储模式之间平滑过渡。

通过采取这些策略,开发者可以确保应用在Android 11及更高版本中保持良好的兼容性和用户体验,同时也能满足系统对数据隐私保护的新要求。虽然这些变化可能会增加开发的复杂度,但从长远来看,它们将有助于提高整个Android生态系统的安全性和可靠性。

Android10(API29)

Android 10 (API 29) 的发布标志着系统在存储管理方面的一项重大变革。这一版本引入了 分区存储 功能,为每个应用在外部存储设备中提供了一个“隔离存储沙盒”。这项变化旨在提高用户数据的隐私保护,同时也对应用的文件访问策略提出了新的要求。

在Android 10中,系统对应用的外部存储访问权限进行了严格限制。即使应用获得了 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 权限,也只能访问自身目录下的文件和公共媒体文件。这种限制有效地防止了应用之间的数据泄露,但同时也给开发者带来了新的挑战。

为了适应这一变化,开发者需要采取以下策略:

  1. 使用MediaStore API :对于多媒体文件的访问,MediaStore API提供了统一的接口。这种方法不仅符合Android 10的新规范,还能确保应用在未来版本中保持良好的兼容性。
  2. 使用Storage Access Framework (SAF) :对于需要访问非媒体文件的情况,SAF提供了一个标准化的API,使应用可以与用户设备上的各种存储提供者进行交互。通过SAF,应用可以请求用户授权访问特定的文件或目录,而不是像以前那样直接访问整个外部存储。
  3. 利用应用专属目录 :Android 10为每个应用提供了专用的外部存储目录,位于 /storage/emulated/0/Android/data/<package name>/files 路径下。这个目录是应用的私有空间,无需任何特殊权限即可访问。开发者可以充分利用这个空间来存储应用相关的数据和文件。
  4. 合理使用公共目录 :对于需要被其他应用访问的文件,如多媒体文件,可以考虑使用系统提供的公共目录,如 Pictures、Videos 等。这些目录可以通过 Environment 类的相关方法轻松访问。
  5. 注意权限请求时机 :在Android 10中,系统对权限请求的时机有了更严格的要求。开发者应该在用户明确需要访问特定文件或目录时才请求相应的权限,而不是在应用启动时就请求所有权限。这种做法不仅能提高权限请求的成功率,也能增强用户对应用的信任。

通过采取这些策略,开发者可以确保应用在Android 10及更高版本中保持良好的兼容性和用户体验,同时也能满足系统对数据隐私保护的新要求。

Android9.0(API28)

Android 9.0 (API 28) 的发布标志着系统在网络安全性方面的重要进步。这一版本引入了 严格的网络安全性配置 ,旨在保护用户免受中间人攻击和数据泄露的风险。这些变化对应用的网络通信产生了深远影响,尤其体现在HTTPS连接的使用上。

在Android 9.0中,系统默认禁用了对 未加密的HTTP流量 的支持。这一改变是为了推动应用采用更安全的HTTPS协议,从而保护用户数据的隐私和完整性。对于仍需要使用HTTP的应用,开发者必须在应用清单文件中明确声明这一需求:

<application
    android:usesCleartextTraffic="true">
    ...
</application>

然而,这种做法并不推荐,因为它削弱了应用的整体安全性。

为了适应这一变化,开发者需要采取一些关键措施来确保应用的网络连接符合新的安全标准:

  1. 全面转向HTTPS :对于大多数应用来说,最理想的解决方案是完全切换到HTTPS。这不仅能满足Android 9.0的安全要求,还能为用户提供更安全的网络体验。
  2. 使用现代TLS版本 :Android 9.0要求应用至少使用TLS 1.2版本。开发者可以通过修改应用的网络库配置来实现这一点:
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, null, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
  1. 证书固定 :对于需要更高安全级别的应用,可以考虑实施证书固定技术。这种方法通过将服务器的公钥硬编码到客户端,可以有效防止中间人攻击。
  2. 使用OkHttp库 :对于需要更高级网络功能的应用,可以考虑使用OkHttp这样的第三方网络库。它不仅提供了丰富的API,还内置了许多安全特性,如自动TLS版本协商和证书验证。

通过这些措施,开发者可以确保应用在网络层面符合Android 9.0的安全要求,同时为用户提供更安全、可靠的服务。这些变化虽然增加了开发复杂度,但从长远来看,它们将有助于提高整个Android生态系统的安全水平。

Android8.0(API26)

Android 8.0 (API 26) 的发布标志着系统在后台执行管理和通知系统方面的重要变革。这些变化虽然增加了开发者的适配难度,但也为用户带来了更好的设备性能和电池寿命。让我们深入了解这些变化及其对应用开发的影响。

后台执行限制

在后台执行方面,Android 8.0 引入了严格的限制,主要体现在 后台服务的使用 上。系统对后台服务的启动和运行时间进行了严格管控,以优化设备资源和延长电池寿命。具体而言:

  1. 后台应用无法启动后台服务 :这是Android 8.0的一个重要变化。系统不允许后台应用创建新的后台服务,除非该服务被标记为前台服务。
  2. 前台服务的要求 :为了将服务标记为前台服务,开发者需要在服务启动后的5秒内调用 startForeground() 方法,并提供一个用户可见的通知。这要求开发者重新思考服务的设计和使用方式。
  3. 空闲状态的判定 :系统会根据应用的活跃程度将其标记为“空闲”。一旦应用进入空闲状态,系统可能会终止其所有后台服务。这种机制有助于节省系统资源,但可能会影响需要长期运行的服务型应用。

为了应对这些变化,开发者可以考虑以下策略:

  • 使用JobScheduler :这是一种替代后台服务的有效方法,可以在指定条件下执行任务,而不必一直保持服务运行。
  • 合理使用前台服务 :对于确实需要长期运行的任务,可以考虑将其包装成前台服务,并向用户明确说明原因。
  • 优化服务设计 :将长时间运行的任务分解为多个短时间任务,使用WorkManager等API来调度这些任务。

通知渠道

在通知系统方面,Android 8.0 引入了 通知渠道 的概念。这是一项重要的变化,旨在帮助用户更好地管理和控制来自不同应用的通知。开发者需要为每种类型的通知创建相应的渠道,并设置适当的优先级和行为。

创建通知渠道的基本步骤如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val channel = NotificationChannel(
        CHANNEL_ID,
        "Channel Name",
        NotificationManager.IMPORTANCE_DEFAULT
    )
    channel.description = "Channel Description"
    val manager = getSystemService(NotificationManager::class.java)
    manager.createNotificationChannel(channel)
}

通知渠道的引入要求开发者重新考虑通知的设计和使用。合理的通知渠道设置可以帮助应用更好地融入系统生态,提高用户体验。同时,这也意味着开发者需要投入更多精力来管理应用的通知输出,确保不会过度打扰用户。

通过这些变化,Android 8.0 在后台执行和通知管理方面实现了更好的平衡,既提升了系统整体性能,又为用户提供了更精细的控制选项。开发者需要积极适配这些新特性,以确保应用在新版本系统中能够保持良好体验。

Android7.0(API24)

Android 7.0 (API 24) 的发布带来了多项重要更新,其中最引人注目的是 严格的文件共享限制 和 多窗口支持 功能。这些变化不仅影响了应用的设计和开发方式,也为用户带来了更好的体验和更高的安全性。

文件共享限制

在文件共享方面,Android 7.0 引入了严格的安全措施。为了提高私有文件的安全性,系统对应用的文件访问权限进行了限制。特别是, 面向 Android 7.0 的应用被禁止在应用外部公开 file:// URI 。这一变化旨在防止私有文件元数据的泄露,如文件大小或是否存在。

为了应对这一变化,Android 7.0 引入了 FileProvider 类,这是一个特殊类型的 ContentProvider,用于通过创建 content:// 类型的 URI 来替代 file:// 类型的 URI,从而实现更安全的文件共享。使用 FileProvider 的主要步骤包括:

  1. 在 AndroidManifest.xml 文件中声明 provider
  2. 创建 xml 文件指定可共享的文件路径
  3. 使用 FileProvider.getUriForFile() 方法获取 content URI
  4. 通过 Intent 传递 content URI 并添加必要的权限标志

这种方法不仅提高了文件共享的安全性,还为应用间的数据交换提供了更可靠的机制。

多窗口支持

除了文件共享方面的变化,Android 7.0 还引入了 多窗口支持 功能。这一特性允许用户同时在屏幕上打开并操作两个应用,大大提高了生产力。系统提供了多种多窗口模式,包括:

  • 分屏模式 :将屏幕一分为二,同时显示两个应用界面
  • 画中画模式 :主要用于电视设备,允许视频播放窗口始终显示在最顶层
  • Freeform模式 :类似于桌面操作系统,应用窗口可以自由拖动和调整大小

为了支持多窗口功能,Android 7.0 在 Manifest 文件中新增了几个属性:

  • android:supportsPictureInPicture :指示应用是否支持画中画模式
  • android:resizeableActivity :控制应用是否可以以分屏或 Freeform 模式启动

此外,系统还提供了一系列新的 API,如:

  • Activity.isInMultiWindowMode() :查询应用是否处于多窗口模式
  • Activity.onMultiWindowModeChanged() :在多窗口模式发生变化时进行通知

这些 API 使开发者能够更好地控制应用在多窗口环境下的行为,为用户提供更一致和流畅的体验。

通过这些变化,Android 7.0 不仅增强了系统的安全性,还为用户提供了更多的多任务处理选项,同时也为开发者带来了新的机遇和挑战。开发者需要仔细考虑如何在新版本中适配这些变化,以确保应用的兼容性和用户体验。

Android6.0(API23)

Android 6.0 (API 23) 的发布标志着Android系统在用户隐私保护方面迈出了重要一步。这一版本引入了 运行时权限机制 ,彻底改变了应用获取敏感权限的方式。

在Android 6.0之前,应用需要在安装时声明所有所需的权限,用户只能选择接受或拒绝全部权限请求。这种全有或全无的方式不仅可能侵犯用户隐私,还可能导致用户因为担心隐私泄露而放弃安装应用。为了解决这些问题,Android 6.0引入了一种更为灵活和精细的权限管理系统。

新机制将权限分为两大类:

  • 普通权限(Normal Permissions) :通常不涉及用户隐私,无需特别授权
  • 危险权限(Dangerous Permissions) :可能涉及用户隐私,需要在运行时动态申请

危险权限进一步细分为多个权限组,如CALENDAR、CAMERA、CONTACTS等。这种分组设计使得用户可以更直观地理解和管理应用的权限需求。

在Android 6.0中,应用需要在运行时动态请求危险权限。这意味着开发者不能再像以前那样在manifest文件中静态声明所有权限,而是要在应用运行过程中,根据实际需要动态请求权限。这种做法不仅提高了用户对应用的信任度,也迫使开发者更加谨慎地考虑哪些权限真正必要。

为了适应这一变化,开发者需要掌握以下几个关键概念和API:

  1. 检查权限 :使用ContextCompat.checkSelfPermission()方法检查当前应用是否已获得某个权限。
  2. 请求权限 :使用Activity.requestPermissions()方法发起权限请求。
  3. 处理权限结果 :在onRequestPermissionsResult()回调方法中处理用户的选择。

以下是一个简单的示例,展示了如何请求CAMERA权限:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.CAMERA},
            MY_PERMISSIONS_REQUEST_CAMERA);
} else {
    // 已经获得了权限,可以直接使用
}

在这个例子中,MY_PERMISSIONS_REQUEST_CAMERA是一个自定义的请求码,用于在onRequestPermissionsResult()方法中识别这次权限请求。

值得注意的是,Android 6.0还引入了一个“不再提醒我”选项。如果用户选择了这个选项并拒绝了权限请求,应用将无法再次提示用户授予该权限。在这种情况下,开发者需要引导用户手动前往应用设置页面重新开启权限。

为了更好地适应这一新机制,开发者应该遵循以下原则:

  1. 最小权限原则 :只请求应用真正需要的权限。
  2. 适时请求 :在用户明确需要某个功能时才请求相应权限。
  3. 提供解释 :向用户解释为什么需要某个权限,以及它将如何改善用户体验。
  4. 优雅降级 :如果用户拒绝了某个非关键权限,应用应该能够继续运行其他功能。

通过合理实现这些策略,开发者不仅可以遵守新的权限规则,还能提高用户满意度和应用的留存率。这种更加尊重用户隐私的做法,长远来看将有助于建立更强的品牌信任度。

最近更新:: 2025/12/26 19:38
Contributors: luokaiwen