谷歌安卓应用开发困境:Java转向Kotlin、官方库频繁更新带来“破坏性变更”等

IT之家
10 Jun

IT之家 6 月 10 日消息,科技媒体 devclass 今天(6 月 10 日)发布博文,从软件工程师 Ashish Bhatia 视角为切入点,一窥目前开发安卓应用的困境。该媒体称 Bhatia 遇到的问题并非个例,而是代表性问题,是安卓应用开发所面临挑战的一个缩影。

IT之家简要介绍下 Bhatia,他是一位经验丰富的软件工程师,曾参与 Google 的 Android 安全项目,目前开发一款名为 MusicSync 的媒体应用。

这款应用使用 Java 编写,但随着谷歌将 Kotlin 设为首选开发语言,Java 开发者面临困境。Bhatia 指出,在 Java 中,完全无法使用谷歌官方 UI 库 Jetpack Compose,而依赖库从 Java 迁移到 Kotlin 方面,常常需要复杂的解决方法,Kotlin 的协程和挂起函数更是带来了兼容性问题。

此外,安卓官方库的更新频繁带来“破坏性变更”,例如媒体库 ExoPlayer 在 2024 年升级为 ExoPlayer v2,随后又被 Jetpack Media3 取代,每次更新都可能导致应用崩溃。

安卓系统的每次大版本更新都会引入新的“破坏性变更”,尤其是在通知、存储权限和后台代码执行等方面,开发者必须不断调整代码以适应新规。

Bhatia 还提到,UI 设计指南的频繁变动令人头痛,Material 2 被 Material 3 取代,大部分文档只针对 Kotlin,缺乏清晰的 Java 迁移指南。

更糟糕的是,第三方库也常被弃用或停止维护,进一步加重开发负担。开发者无法仅开发一款应用后置之不理,必须持续投入精力更新,否则应用可能因 minSdkVersion 过旧而被 Google Play 商店下架。

Bhatia 的观点引发了广泛共鸣。一位开发者表示,维护应用是“巨大的负担”,每隔几个月就必须更新以符合新政策,包括税务信息、隐私政策和强制性 API 调整等。

另一位开发者提到,他从 2012 年起维护一款应用,在 Google Play 商店发布了 108 个版本,深感疲惫。

此外,谷歌对新应用使用 App Bundles 的要求也引发争议,开发者需将根签名密钥交给谷歌,存在应用被未经授权修改的风险。尽管有“代码透明性”功能作为缓解措施,但许多开发者仍对此表示担忧。

这种开发环境的摩擦显著增加了商业应用的主导地位,因为只有它们有足够的收入支撑开发成本,免费开源或个人爱好者的应用则更容易被放弃。

一位开发者无奈表示:“开发应用本身很简单,但应用商店的官僚作风让人完全不想继续,除非你是大公司。”

另一位开源 SSH 文件传输应用的开发者也指出,Google 的苛刻要求和商业化导向迫使许多优质免费应用(如 Termux)退出平台。

Disclaimer: Investing carries risk. This is not financial advice. The above content should not be regarded as an offer, recommendation, or solicitation on acquiring or disposing of any financial products, any associated discussions, comments, or posts by author or other users should not be considered as such either. It is solely for general information purpose only, which does not consider your own investment objectives, financial situations or needs. TTM assumes no responsibility or warranty for the accuracy and completeness of the information, investors should do their own research and may seek professional advice before investing.

Most Discussed

  1. 1
     
     
     
     
  2. 2
     
     
     
     
  3. 3
     
     
     
     
  4. 4
     
     
     
     
  5. 5
     
     
     
     
  6. 6
     
     
     
     
  7. 7
     
     
     
     
  8. 8
     
     
     
     
  9. 9
     
     
     
     
  10. 10