构建 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 更改错误 的相关文章

  • Android资源未找到异常?

    我在使用 findViewById id 时遇到一个奇怪的问题 尽管资源确实存在 但它返回时未找到资源 它是布局中的一个文本视图 旁边是另一个文本视图 我可以通过 id 找到其中一个文本视图 但另一个显示未找到资源 有什么原因可能会发生这种
  • SurfaceView 将视频播放为拉伸视图

    我正在使用 mediaplayer xml 来播放视频文件
  • Android应用程序启动图标大小[重复]

    这个问题在这里已经有答案了 遵循 Google 的指南 我已将 48x48 和 72x72 启动器图标添加到我的 mdpi 和 hdpi 屏幕项目中 但在某些情况下 图标的大小会被调整 例如 在我的 Acer Iconia A200 平板电
  • 如何在Android 10及更高版本中通过intent MediaStore.ACTION_IMAGE_CAPTURE获取图像URI

    对于版主 我知道已经存在这样的问题 但所有这些方法最终都会通过提供位图data getExtra data 这实际上只是thumbnail 我想要获取 URI 而不是位图 并且我需要获取实际图像的 URI 而不是其缩略图 方法可在2021
  • 应用内结算:库存不正确;让用户再次购买

    编辑 仍在寻找我原来问题的答案 为什么 Android 不会看到该商品之前已购买过 而是让用户再次付款 设置 SharedPreferences 是一个不错的主意 但是如果用户卸载了怎么办 他们将不得不再次购买 我不希望用户这样 谢谢 我试
  • Google Play 游戏服务 - 自定义通知/欢迎回来

    我一直在互联网上查找 但找不到我的答案 有没有办法向用户显示他们已登录 GPGS 第一次登录时 您会收到一条通知 内容为 欢迎 但是当您下次打开应用程序时 什么也没有显示 有没有办法显示欢迎回来通知 对于 iOS 这是可能的 在第 9 步上
  • 在Android中单击按钮后使布局出现动画

    我正在尝试为登录屏幕实现一个简单的动画效果 这是场景 1 默认情况下将显示一些文本和登录按钮 2 单击登录按钮后 将从下到上出现一个新的框架布局 此布局将提示用户输入用户名和密码 我可以制作一个动画 该动画将从一个父级覆盖到另一个父级 在这
  • 隐藏另一个布局的浮动操作按钮

    我有一个FloatingActionButton五月之内activity main xml名为的布局fabBtn 我的应用程序是用ViewPager和三个Fragments 我想隐藏FloatingActionButton当我的第一次Fra
  • Android:可以在同一任务中启动一个活动的多个实例吗?

    我尝试使用此代码从父活动启动多个活动 for int i 0 i
  • 如何用多个手指在画布上绘图

    我正在使用安卓Canvas创建绘图应用程序的类 这是我第一次尝试使用 Canvas 类 到目前为止 我使用的代码工作正常 绘图工作正常 但我在这段代码中意识到 它允许用户仅用一根手指进行绘画 我的意思是说 如果用户使用多于一根手指在画布上绘
  • 相对于当前日期对 Java 集合进行排序

    我想相对于当前日期对日期列表进行排序 例如列表中有下一项 10 01 2018 10 20 2018 10 14 2018 10 02 2018 当前日期是10 08 2018 结果应该是按下一个顺序升序排列的数组 10 14 2018 1
  • 在 Xamarin.Forms 中添加方向更改布局

    我需要实现的是 在将屏幕从纵向更改为横向时向现有页面添加布局 我已经成功地使用检测方向变化void OnSizeAllocation 双倍宽度 双倍高度 但我无法为此事件添加布局 我的示例 C 代码是 public class MyLayo
  • 以编程方式将项目添加到相对布局

    我一直在到处寻找这个问题的答案 我是 Android 新手 尝试通过 java 而不是 xml 以编程方式将项目添加到相对布局 我创建了一个测试类来尝试一下 但项目不断堆叠而不是正确格式化 我现在只想将一个 TextView 放在另一个下面
  • 具有 EditText 材质设计的工具栏

    我正在尝试制作带有 EditText 的工具栏 如下所示 现在我可以做一些类似的事情 但只能使用静态标题 有什么想法可以开始吗 我已经这样做了 如下所示 有Toolbar as AppBar aka ActionBar 位于顶部 其下方的第
  • 如何在AsyncTask中举杯,提示我使用Looper

    我有 AsyncTask 在后台完成的任务 在某些时候 我需要发出一个 Toast 来表示某件事已完成 我尝试过但失败了因为Caused by java lang RuntimeException Can t create handler
  • Android 嵌套片段问题“java.lang.IllegalStateException:活动已被销毁”

    您可能知道 Android 支持嵌套片段 也是通过 API 级别 17 的支持库实现的 所以基本上我正在尝试将嵌套片段添加到 ViewPager 的片段之一中 并熟悉这一新的好功能 在第一次应用程序启动时 一切都按预期工作 即我可以添加子片
  • 给出文档名称的 UID

    我想知道在我的 firestore 数据库中保存用户首选项的最佳实践是什么 我会尝试用一个例子来解释 Case 1 我的 用户 集合中有这种文档 名称是由 Firebase 随机生成的 有 3 个字段 user uid 细绳 nicknam
  • 创建自定义 Google Now 卡片

    Google 为 Google Now 提供了各种 卡片 http www google com landing now http www google com landing now 可以创建自己的卡片吗 该系统看起来非常模块化 但我还没
  • 构建失败:程序类型已存在:com.facebook.ads.Ad

    我尝试在 Android Studio 中构建一个模块 它似乎可以在设备上运行 但是当我尝试构建 APK 时 出现错误 Program type already present com facebook ads Ad 这是完整的日志 org
  • 滚动后 ListView 未显示正确的值

    在我的应用程序中我使用的是CustomListView与ArrayAdapter显示不同国家的时间 但在 6 到 7 行之后 取决于手机屏幕尺寸 时间值会重复 根据之前的一些文章 我编写了以下代码片段来获得解决方案 但问题仍然存在 以下是我

随机推荐

  • 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