构建 AOSP 5.1 时出现 API 更改错误

2024-06-11

目前正在尝试构建 android-5.1.0_r5。我已经检查了来源并且没有做任何修改。但是,编译时出现以下错误。

Checking API: checkpublicapi-current
out/target/common/obj/PACKAGING/public_api.txt:20: error 5: Added public field android.Manifest.permission.BACKUP
out/target/common/obj/PACKAGING/public_api.txt:82: error 5: Added public field android.Manifest.permission.INVOKE_CARRIER_SETUP
out/target/common/obj/PACKAGING/public_api.txt:106: error 5: Added public field android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE
out/target/common/obj/PACKAGING/public_api.txt:116: error 5: Added public field android.Manifest.permission.RECEIVE_EMERGENCY_BROADCAST

******************************
You have tried to change the API from what has been previously approved.

To make these errors go away, you have two choices:
   1) You can add "@hide" javadoc comments to the methods, etc. listed in the
      errors above.

   2) You can update current.txt by executing the following command:
         make update-api

      To submit the revised current.txt to the main Android repository,
      you will need approval.
******************************

比较公共 api txt 文件确实显示出差异。

diff frameworks/base/api/current.txt out/target/common/obj/PACKAGING/public_api.txt 
19a20
>     field public static final java.lang.String BACKUP = "android.permission.BACKUP";
80a82
>     field public static final java.lang.String INVOKE_CARRIER_SETUP = "android.permission.INVOKE_CARRIER_SETUP";
103a106
>     field public static final java.lang.String READ_PRIVILEGED_PHONE_STATE = "android.permission.READ_PRIVILEGED_PHONE_STATE";
112a116
>     field public static final java.lang.String RECEIVE_EMERGENCY_BROADCAST = "android.permission.RECEIVE_EMERGENCY_BROADCAST";

但是,我无法弄清楚这些额外的公共字段来自哪里。有任何想法吗?


如果您没有触及任何内容,请不要执行“make update-api”。还有其他 api 来自框架/base/res/AndroidManifest.xml,被 aapt 严重解析,使用有缺陷的 system/core/libcore/String8.cpp@@removeAll() 它们使用 memcpy 但应该是 memmove 来处理内存中重叠的字符串。

这是最新的 Debian (sid) 或 Ubuntu(16 也许 15)构建机器上的问题。 这是 libcore/String8.cpp 中的谷歌错误。修复在这里:https://android.googlesource.com/platform/system/core/+/dd060f01f68ee0e633e9cae24c4e565cda2032bd https://android.googlesource.com/platform/system/core/+/dd060f01f68ee0e633e9cae24c4e565cda2032bd

这个人(迈克尔·斯科特)找到了它,也许其他人也找到了它。以下是他的调查:https://plus.google.com/+hashcode0f/posts/URHo3hBmfHY https://plus.google.com/+hashcode0f/posts/URHo3hBmfHY

生活在(Ubuntu)边缘......可能会很痛苦!

我已经运行 Ubuntu 15.04 一段时间了。太棒了 拥有最新的内核以及最新的改进 Ubuntu 和 Debian。 (我过去关于使用 zRAM ramdisk 的文章是 例子)。

然而,拥有最新最好的玩具也有其缺点。我 最近花了 4 天对 Android 中的构建中断进行故障排除 3月25日之后的一段时间开始。我猜我更新了软件包 或者无意中更改了我的 glibc 版本。

结果是 Android checkapi 阶段出现构建错误 建造:

安装:/out/mydroid-ara/host/linux-x86/bin/apicheck 检查 API: checkpublicapi-last 检查 API:checkpublicapi-current /out/mydroid-ara/target/common/obj/PACKAGING/public_api.txt:20:错误 5:添加公共字段android.Manifest.permission.BACKUP /out/mydroid-ara/target/common/obj/PACKAGING/public_api.txt:82:错误 5:添加公共字段android.Manifest.permission.INVOKE_CARRIER_SETUP /out/mydroid-ara/target/common/obj/PACKAGING/public_api.txt:106:错误 5:添加公共字段 android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE /out/mydroid-ara/target/common/obj/PACKAGING/public_api.txt:116:错误 5:添加公共字段 android.Manifest.permission.RECEIVE_EMERGENCY_BROADCAST

**************************** 您已尝试更改先前批准的 API。

要消除这些错误,您有两种选择:1) 您可以添加 “@hide”javadoc 对方法中列出的注释等 上面的错误。

2)您可以通过执行以下命令来更新current.txt: 制作更新API

  To submit the revised current.txt to the main Android repository,
  you will need approval.

这发生在我的两个 Ubuntu 15.04 机器上,并且在 当构建 AOSP android-5.0.2_r1 和 android-5.1.0_r1 时。

对于那些不熟悉 Android 这部分的人 构建时,Android 框架导出所有公共部分 API 并确保当前版本与当前版本相匹配 位于frameworks/base/api/current.txt下。它通过以下方式做到这一点 解析frameworks/base/res/AndroidManifest.xml和任何当前的 设备的覆盖 .xml 文件并处理标有各种标记的项目 上面注释中的标志:@SystemApi、@hide 等。 checkapi 阶段的解析和处理部分是由 二进制“aapt”(Android 资产打包工具)。它的来源位于 在frameworks/base/tools/aapt下。

我首先检查平台/构建的上游修复或 平台/框架/基础项目。出局后我开始 通过使用以下命令调试 android 构建:“make checkapi showcommands”,然后使用“strace”手动运行命令 查看每个二进制文件是如何参与的以及它生成的输出。

经过最初几个小时的调试后,很明显 out/target/common/obj/APPS/frameworks-res_intermediates/src/android/Manifest.java 文件中的注释在生成 aapt 时已损坏 它。我能够对 AndroidManifest.xml 进行一些手动更改 文件并让构建通过(删除多余的部分 评论)。

通过 strace 深入挖掘,然后查看各种静态链接 来源,我发现在 AndroidManifest.xml 注释中 处理 @SystemApi 令牌是通过 String8.removeAll("@SystemApi") 函数调用。实验上,我 去掉了这部分的处理。你瞧!构建 工作了。仔细研究一下removeAll函数,我能够 将 memcpy 函数定位为函数的一部分 造成腐败。

然后我研究了一点 memcpy 并指出你不应该 在重叠的内存地址上使用 memcpy,而不是 memmove 首选,因为它会在进行任何更改之前复制源文件 正在被送往目的地。将 memcpy 的使用更改为 memmove 构建已修复,世界一切顺利!

作为开源世界的一名优秀玩家,我立即认为我 应该将这一令人难以置信的调试壮举上游到主分支 系统/核心。可惜!修复已在 master 分支中 自2014年11月11日起!并且还没有被带入任何 当前的开发标签!叽https://android.googlesource.com/platform/system/core/+/dd060f01f68ee0e633e9cae24c4e565cda2032bd https://android.googlesource.com/platform/system/core/+/dd060f01f68ee0e633e9cae24c4e565cda2032bd

此后,我就这一更改联系了 Google 团队,并让他们 了解我的经验,希望我们能在 Android 的未来版本标签。

结论:显然 glibc 正在经历一些变化,其中一些 这些现在已经过滤到我的 Ubuntu 盒子里了。以前的地方 memcpy 用法不正确但仍然可用,它现在导致构建 我看到了。

如果您在 Android 版本中看到此类错误,并且您正处于 新版本的 Ubuntu 或 Debian 发行版,您可能想尝试 这个简单的补丁,看看是否有帮助。

  • Hash

自己就大了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建 AOSP 5.1 时出现 API 更改错误 的相关文章

随机推荐

  • Toast.LENGTH_LONG 和 Toast.LENGTH_SHORT 的值是多少?

    我正在我的应用程序中打印 Toast 消息以显示通知 但我想知道 Toast LENGTH LONG 和 Toast LENGTH SHORT 我还可以使用哪些其他值 谁能告诉我这两个变量的值是多少 还有另一个问题可以回答您正在寻找的内容
  • 核心数据推导表达式关键路径使用运算符作为中间组件

    我正在尝试编写一对多关系属性之和的派生表达式 我有一个商品和一个组 该商品有价格和总价 金额 价格 我想编写一个表达式 将该组的总价格作为其组成部分的总和 当我构建时出现错误 错误 属性配置错误 LAEItemGroup totalPric
  • MailChimp 取消订阅 URL 中每个参数的用途是什么?

    在以下 URL 中 从列表中取消订阅用户 http xxxxx us2 list manage com unsubscribe u 87f537bccxx35e53a1890e0d9 id 40dcxx6cd6 e c4aaxx1dd6 c
  • Numpy:查找两个 3-D 数组之间的欧几里德距离

    给定两个维度为 2 2 2 的 3 D 数组 A 0 0 92 92 0 92 0 92 B 0 0 92 0 0 92 92 92 如何有效地找到 A 和 B 中每个向量的欧几里得距离 我尝试过 for 循环 但速度很慢 而且我正在按 g
  • 从一个 NSManagedObjectContext 保存的更改不会反映在主 NSManagedObjectContext 上

    我有一个主NSManagedObjectContext是在appDelegate 现在 我正在使用另一个NSManagedObjectContext用于编辑 添加新对象而不影响主对象NSManagedObjectContext 直到我拯救它
  • 就地改变 numpy 函数输出数组

    我正在尝试编写一个对数组执行数学运算并返回结果的函数 一个简化的例子可以是 def original func A return A 1 A 1 为了加速并避免为每个函数调用分配新的输出数组 我希望将输出数组作为参数 并就地更改它 def
  • 将 Swift 闭包作为值添加到 Swift 字典中

    我想创建一个 Swift 字典 将 String 类型作为其键 将 Closures 作为其值 以下是我的代码 但它给了我错误 lvalue 与 String gt Void 不同 class CommandResolver private
  • 用 C# 解析和查询 SOAP

    我正在尝试解析一个大量命名空间的 SOAP 消息 源也可以在here http tinyurl com n3av6k
  • 如何解决 Xcode 7 中的 No Type or Protocol Named 错误?

    我试图passing从第二个开始的值class我正在使用的头等舱protocol and delegate过程 每当我运行我的程序时 我都会遇到以下问题 No Type or Protocol Named locateMeDelegate
  • 理解“窗口”对象[重复]

    这个问题在这里已经有答案了 可能的重复 JS 窗口全局对象 https stackoverflow com questions 10035771 js window global object 如何window对象工作 我知道它是顶级对象并
  • Liftweb 环境中的后台任务

    我必须编写守护进程 并且我想使用模型来连接到数据库和一些有用的 Lift 类 是否可以运行 Rails 的 rake 任务的模拟 Scala 社区组上也有类似的问题 答案是使用Actors来做后台处理
  • 转储 Windows DLL 版本的命令行工具?

    我需要一个命令行工具来转储标准 Windows DLL 版本信息 以便我可以通过 bash 脚本 Cygwin 对其进行处理 作为一名 Java 开发人员 我不太习惯 Microsoft 开发工具 尽管我对 Microsoft Visual
  • 使用 pytz 获取时区的国家/地区代码?

    我在用着pytz http pytz sourceforge net country information 我已经阅读了整个文档表 但没有看到如何做到这一点 我有一个时区 美国 芝加哥 我想要的只是获取该时区的相应国家 地区代码 美国 它
  • rspec 在需要存根的私有方法中测试私有方法

    Simplecov 检测到我遗漏了一些测试lib api verson rb class class ApiVersion def initialize version version version end def matches req
  • 整个程序可以是不可变的吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我熟悉不可变性并且可以设计不可变类 但我主要拥有学术知识 缺乏实践经验 请参考上面的链接图片 尚不允许嵌入 从下往上看 学生需要新地址
  • Linux find 命令权限被拒绝

    我想过滤掉不必要的信息 权限被拒绝 这些是命令 的输出find type f name sources list find run lxcfs Permission denied find run sudo Permission denie
  • R 脚本 - 如何在错误时继续执行代码

    我编写了一个 R 脚本 其中包含一个检索外部 Web 数据的循环 数据的格式大多数时候是相同的 但有时格式会以不可预测的方式发生变化 并且我的循环崩溃 停止运行 有没有办法不管错误如何继续执行代码 我正在寻找类似于 VBA 中的 On er
  • Apache Zeppelin 安装 grunt 构建错误

    我的配置如下 Ubuntu 15 04 Java 1 7 Spark 1 4 1 Hadoop 2 7 Maven 3 3 3 我正在尝试从 github 成功克隆 Apache Zeppelin 并使用以下命令后安装它 mvn clean
  • ASP.NET 中的 ThreadStaticAttribute

    我有一个需要存储的组件static每个线程的值 它是一个通用组件 可以在许多场景中使用 而不仅仅是在 ASP NET 中 我想用 ThreadStatic 属性来实现我的目标 假设它在 ASP NET 场景中也能正常工作 因为我假设每个请求
  • 构建 AOSP 5.1 时出现 API 更改错误

    目前正在尝试构建 android 5 1 0 r5 我已经检查了来源并且没有做任何修改 但是 编译时出现以下错误 Checking API checkpublicapi current out target common obj PACKA