Android 平台包含大量的共享 Java 库,可以使用应用清单中的 标记选择性地将其纳入应用的类路径中。由于应用与这些库相关联,因此在兼容性、API 审核和工具支持方面,应将其与其他 Android API 一样对待。不过,大多数库都没有这些功能。

Android 10 引入了 java_sdk_library,这是一个新的构建规则,可解决共享 Java 库的兼容性问题。设备制造商可在自己的共享 Java 库中运用此机制,以保持其 API 的向后兼容性。如果设备制造商通过 标记(而不是 bootclass 路径)使用自己的共享 Java 库,则 java_sdk_library 可以验证这些 Java 库是否能让 API 保持稳定。

java_sdk_library 是一个 Java 库,可为应用实现可选的 SDK API。通过 makefile (Android.bp) 中的 java_sdk_library 实现的库会执行以下操作:

生成存根库,将 stubs、stubs.system 和 stubs.test 包括在内。这些存根库是通过识别 @hide、@SystemApi 和 @TestApi 注释创建的。在构建时,当 SDK 版本分别为 current、system_current 和 test_current 时,会自动引用它们。

Android 通过存根文件获取 API 列表,并通过将 master 中的当前 API 列表与最近发布的 Android 版本中的 API 列表进行比较来验证是否以向后兼容的方式维护 API。

如果安装了运行时的实现库,就会生成并安装 XML 文件。

图 1. 使用 Java SDK 库的构建流程

示例和来源

存根库的最小组件是必需的 srcs 和 api_packages 属性。

java_sdk_library {

name: "com.android.future.usb.accessory",

srcs: ["src/**/*.java"],

api_packages: ["com.android.future.usb"],

}

如需构建用于运行时的实现库,请填充所有 java_library 属性,如 hostdex、compile_dex 和 errorprone。

java_sdk_library {

name: "android.test.base",

srcs: ["src/**/*.java"],

errorprone: {

javacflags: ["-Xep:DepAnn:ERROR"],

},

hostdex: true,

api_packages: [

"android.test",

"android.test.suitebuilder.annotation",

"com.android.internal.util",

"junit.framework",

],

compile_dex: true,

}

如需创建存根库,请填充 droidstubs 属性,如 srcs_lib、srcs_lib_whitelist_dirs、srcs_lib_whitelist_pkgs、merge_annotations_dirs 和 merge_inclusion_annotations_dirs。您还可以将以下属性用于存根库中:

api_srcs:属于 API 但不属于运行时库的可选源文件的列表。

stubs_only_libs:构建存根时位于类路径中的 Java 库的列表。

hidden_api_packages:必须对 API 隐藏的软件包名称的列表。

droiddoc_options:metalava 的附加参数。

java_sdk_library {

name: "android.test.mock",

srcs: ["src/**/*.java"],

api_packages: [

"android.test.mock",

],

srcs_lib: "framework",

srcs_lib_whitelist_dirs: ["core/java"],

srcs_lib_whitelist_pkgs: ["android"],

compile_dex: true,

}

保持向后兼容性

构建系统通过在构建时将最新的 API 文件与生成的 API 文件进行比较来检查 API 是否保持向后兼容性。此操作通过一个名为 prebuilt_apis 的新构建规则来完成,该规则会创建预构建的存根库模块和 API 列表模块。使用 java_sdk_library 构建的所有库都必须在 prebuilt_apis 中的拥有最新版的 api_dirs 中的 API 文件。当您发布版本时,可以使用 PRODUCT-sdk_phone_armv7-sdk 通过 dist build 获取 API 列表文件和存根库。

api_dirs 属性是 prebuilt_apis 中的 API 版本目录的列表。API 版本目录应位于与 Android.bp 相同的目录级别。

prebuilt_apis {

name: "sdk",

api_dirs: [

"1",

"2",

....

"28",

"current",

],

}

在 prebuilts 目录下配置 version/scope/api/ 结构的目录。version 与 API 级别相对应,而 scope 可确定目录是公开目录、系统目录还是测试目录。

version/scope 包含 Java 库。

version/scope/api 包含 API .txt 文件。在此处创建名为 module_name.txt 和 module_name-removed.txt 的空文本文件。

├── 28

│ ├── public

│ │ ├── api

│ │ │ ├── android.test.base-removed.txt

│ │ │ └── android.test.base.txt

│ │ └── android.test.base.jar

│ ├── system

│ │ ├── api

│ │ │ ├── android.test.base-removed.txt

│ │ │ └── android.test.base.txt

│ │ └── android.test.base.jar

│ └── test

│ ├── api

│ │ ├── android.test.base-removed.txt

│ │ └── android.test.base.txt

│ └── android.test.base.jar

└── Android.bp

androidlib.java_实现 Java SDK 库相关推荐

  1. 语音合成 java_语音合成 JAVA SDK

    语音合成 Java SDK 一.SDK描述 京东AI为满足TTS相关产品的快速接入,在REST API的基础上对各种平台和语言进行封装,大大降低客户接入的难度.现已发布的平台及语言有:C/C++,Ja ...

  2. 微信刷卡 sdk java_微信支付 Java SDK

    微信支付 Java SDK 对微信支付开发者文档中给出的API进行了封装. com.github.wxpay.sdk.WXPay类下提供了对应的方法: 方法名 说明microPay 刷卡支付 unif ...

  3. 微博开发 java_微博开发平台java SDK demo学习之friendships

    本文解释了在java SDK的demo中与feiendships有关的功能 截图如下: 关注一个用户(需要知道该用户uid) 取消关注一个用户(用户uid) 获取用户粉丝列表(授权用户的screen_ ...

  4. java ai库_百度AI开放平台 Java SDK

    安装Java SDK Java SDK主要目录结构 com.baidu.aip ├── auth //签名相关类 ├── http //Http通信相关类 ├── client //公用类 ├── e ...

  5. caffeine java_详细介绍高性能Java缓存库Caffeine

    1.介绍 在本文中,我们来看看Caffeine- 一个高性能的 Java 缓存库. 缓存和 Map 之间的一个根本区别在于缓存可以回收存储的 item. 回收策略为在指定时间删除哪些对象.此策略直接影 ...

  6. 表格存储的Java SDK性能优化经验

    原文发布于阿里云论坛,在圈子内重发. 问题背景 用户通过Java SDK来访问表格存储,在SDK内部也是有开销的,在高并发的场景下这些开销尤其突出.如果SDK的性能很差,用户为了达到更高的QPS,可能 ...

  7. java安装库源文件_JOGL安装

    本章介绍了设置环境以使用JOGL使用不同的集成开发环境(IDE),在您的系统上. 安装JOGL 对于JOGL安装,需要有以下系统要求: 系统要求 第一个要求是要在机器上安装Java Developme ...

  8. couchbase_具有Rx-Java的Couchbase Java SDK

    couchbase 关于Couchbase Java SDK的一件整洁的事情是,它建立在出色的Rx-Java库的基础上,这为与Couchbase服务器实例进行交互提供了一种React性的方式,一旦掌握 ...

  9. 具有Rx-Java的Couchbase Java SDK

    关于Couchbase Java SDK的一件整洁的事情是,它建立在出色的Rx-Java库的基础上,这为与Couchbase服务器实例进行交互提供了一种反应性的方式,一旦掌握了它,它就非常直观. 考虑 ...

最新文章

  1. 将XML转为HTML
  2. 华为,牵手这所新大学!
  3. STM32 资料整理贴(更新到10年1月)[转]
  4. PHP语言 -- Ajax 查询数据
  5. Node.js webpack
  6. 拿来就能用!几步搭建一套简单直播系统 | 原力计划
  7. 研究Ajax(二)WebService实现加 减 乘 除
  8. 张继之为担任BCF理事
  9. python经纬度转换xy坐标公式_经纬度坐标转换为距离及角度(Python)
  10. Windows上的安全模式
  11. 【论文笔记】Self-paced Contrastive Learning with Hybrid Memory for Domain Adaptive Object Re-ID
  12. 保险丝的作用原理及选择
  13. js判断字符串字符数(汉字算两个)
  14. 如何判断一个数是否素数
  15. 美食杰(个人主页) 下
  16. kinit什么意思_kinit
  17. Babel转码器详解
  18. 这样做团建,还担心员工离职吗?
  19. html403禁止访问怎么解决,http403禁止访问错误产生的原因以及解决办法
  20. 不同种类的单片机通讯分析

热门文章

  1. 使用 电报机器人 tele bot 远程执行服务器上的命令
  2. 处理器的计算能力如何计算
  3. 苹果手机很卡怎么解决_iPhone很卡怎么办,教您如何解决iPhone很卡问题!
  4. TestCenter测试管理工具功能详解三(H)
  5. 17个小时内,各地相继出手帮中小企业,地产商减租百亿
  6. CM系统应用源码分析与rom定制
  7. 征途服务器维护镖车怎么办,征途网络游戏家族运镖问题
  8. GPS 轨迹处理方法
  9. Speech Separation
  10. 慕尼黑大学计算机语言学,慕尼黑大学,斯图加特大学和萨尔大学的计算语言学硕士如何选择?...