Android 9 (P)版本解决VNDK library: XXX’s ABI has EXTENDING CHANGES

Android 9 (P)开发适配指南系列博客目录:

Adnroid 9 (P) recovery升级Map of '@/cache/recovery/block.map’failed问题分析指南
Android 9 (P)版本解决VNDK library: XXX’s ABI has EXTENDING CHANGES
Android 9 (P)非SDK API限制调用开发指南
Android 9 (P)适配以太网功能开发指南
Android 9 (P)在user模式下无法使用fastboot烧录怎么破
Android 9 (P)静默安装/卸载App适配终极指南


引言

  此时的我吃着火锅唱着歌,进行着Android P(此P非彼P,Android 9)的适配工作。我真的只能说每次Android版本的迭代更新,都是对我们的一次炼狱般的摧残啊,各种适配啊,我真的想说fuck the coding。但是吐槽归吐槽,为了我热爱的coding事业,让我们愉快的适配起来。这不问题又来了,当我们修改liblog源码时提示error: VNDK library: liblog’s ABI has EXTENDING CHANGES,木得办法兵来将挡水来土掩,只能上了。

注意:本文演示的代码是Android P高通msm8953平台。


一.问题现象

当我们尝试对Android源码下面的system/core/liblog源码目录下面的文件添加一些接口时,适配问题出现了,编译一直报错,如下所示:

QSSI: not enabled for msm8953_64 target as vendor/qcom/proprietary/release/QSSI/QSSI_enforced_targets_list.txt was not found.
ninja: no work to do.
ninja: no work to do.
No need to regenerate ninja file
No need to regenerate ninja file
[ 50% 1/2] glob .
[ 16% 1/6] //system/core/liblog:liblog header-abi-diff liblog.so.abidiff
FAILED: out/soong/.intermediates/system/core/liblog/liblog/android_arm64_armv8-a_core_shared/liblog.so.abidiff
(prebuilts/clang-tools/linux-x86/bin/header-abi-diff -allow-unreferenced-changes -allow-unreferenced-elf-symbol-changes -lib liblog -arch arm64 -o out/soong/.intermediates/system/core/liblog/liblog/android_arm64_armv8-a_core_shared/liblog.so.abidiff -new out/soong/.intermediates/system/core/liblog/liblog/android_arm64_armv8-a_core_shared/liblog.so.lsdump -old out/soong/.intermediates/system/core/liblog/liblog/android_arm64_armv8-a_core_shared/liblog.so_ref.lsdump)|| (echo ' ---- Please update abi references by running platform/development/vndk/tools/header-checker/utils/create_reference_dumps.py -l liblog ----' && exit 1)
******************************************************
error: VNDK library: liblog's ABI has EXTENDING CHANGES Please check compatiblity report at : out/soong/.intermediates/system/core/liblog/liblog/android_arm64_armv8-a_core_shared/liblog.so.abidiff
******************************************************---- Please update abi references by running platform/development/vndk/tools/header-checker/utils/create_reference_dumps.py -l liblog ----
ninja: build stopped: subcommand failed.
09:34:59 ninja failed with: exit status 1


不用怀疑,这个不是你源码的问题。这个是由于Android P增加了VNDK的限制。


二.VNDK是什么

VNDK(Vendor Native Development Kit)是一组专门用于vendor实现其HAL的lib库,因为自Android 8.0以来,Google引入了Treble架构,希望对vendor和system分区进行解耦处理,期待实现:framwork进程不加载vendor共享库,vendor进程仅加载vendor共享库(和部分framework共享库),而framework进程和vendor进程之间通过HIDL和hwbinder来通信。总结为如下几点:

  • platform和Vendor的构建是相互隔离的;
  • platform lib对应 system.img;
  • vendor lib对应 vendor.img;
  • 大多数情况下,Vendor lib跟系统核心不能相互使用;Vendor lib不允许dlopen私有的系统库;
  • 合作伙伴不允许为自己的产品在VNDK新增lib,只能贡献到AOSP;


关于VNDK的具体介绍可以参见如下博客:
ABI 稳定性
Android : 供应商原生开发套件 (VNDK)
供应商原生开发套件 (VNDK)


三.怎么解决

在代码中搜索,发现 development/vndk/tools/header-checker/header-abi-diff/src 中的 header_abi_diff.cpp 报出的错误。错误提示如下:

184   if (should_emit_warning_message) {185     llvm::errs() << "******************************************************\n"
186                  << error_or_warning_str
187                  << "VNDK library: "
188                  << lib_name
189                  << "'s ABI has "
190                  << status_str
191                  << unreferenced_change_str
192                  << " Please check compatiblity report at : "
193                  << compatibility_report << "\n"
194                  << "******************************************************\n";
195   }

于是,直接修改代码,让里面的 main 直接返回 abi_util::CompatibilityStatusIR::Compatible; 然后重新编译这个文件,覆盖到代码中的检查库。全编译。通过!!

下面让我们详细讲解一下步骤

  • 修改development/vndk/tools/header-checker/header-abi-diff/src/header_abi_diff.cpp,改动如下:
--- a/development/vndk/tools/header-checker/header-abi-diff/src/header_abi_diff.cpp
+++ b/development/vndk/tools/header-checker/header-abi-diff/src/header_abi_diff.cpp
@@ -182,21 +182,21 @@ int main(int argc, const char **argv) {bool should_emit_warning_message = ShouldEmitWarningMessage(status);if (should_emit_warning_message) {-    llvm::errs() << "******************************************************\n"
-                 << error_or_warning_str
-                 << "VNDK library: "
-                 << lib_name
-                 << "'s ABI has "
-                 << status_str
-                 << unreferenced_change_str
-                 << " Please check compatiblity report at : "
-                 << compatibility_report << "\n"
-                 << "******************************************************\n";
+//    llvm::errs() << "******************************************************\n"
+//                 << error_or_warning_str
+//                 << "VNDK library: "
+//                 << lib_name
+//                 << "'s ABI has "
+//                 << status_str
+//                 << unreferenced_change_str
+//                 << " Please check compatiblity report at : "
+//                 << compatibility_report << "\n"
+//                 << "******************************************************\n";}-  if (!advice_only && should_emit_warning_message) {-    return status;
-  }
  • 重新编译 development/vndk/tools/header-checker,编译命令如下:
mmm  development/vndk/tools/header-checker/ -j32
616+0 records in
616+0 records out
630784 bytes (631 kB, 616 KiB) copied, 0.0032836 s, 192 MB/s
[ 66% 2/3] glob .
[100% 5/5] Install: out/host/linux-x86/bin/header-abi-diff
  • 复制 out/host/linux-x86/bin/header-abi-diff 到 prebuilts/clang-tools/linux-x86/bin 中覆盖,命令如下:
cp out/host/linux-x86/bin/header-abi-diff prebuilts/clang-tools/linux-x86/bin/header-abi-diff
  • 重新souurce lunhcer,再执行你需要修改的so文件,譬如我们这里的是liblog,我们编译一把:
make  -j32 liblog//编译结果
vendor/qcom/build/tasks/generate_extra_images.mk:558: warning: overriding commands for target `kernelclean'
device/qcom/common/generate_extra_images.mk:558: warning: ignoring old commands for target `kernelclean'
[100% 76/76] build out/host/linux-x86/obj32/SHARED_LIBRARIES/liblog_intermediates/liblog.so.toc

好了,大功告成可以愉快的修改VNDK的相关改动了。


结语

各位乡亲们,Android P版本解决VNDK library: XXX’s ABI has EXTENDING CHANGES就结束了,整的我腰酸背痛啊。Android版本升级之时就是我等受苦之时啊。


写在最后

  好了如上就是Android P版本解决VNDK library: XXX’s ABI has EXTENDING CHANGES的所有,如有问题或者有任何疑问请及时沟通或者交流,也可点个赞或者吐槽一番也是可以的。so goodbye。

Android 9 (P)版本解决VNDK library: XXX‘s ABI has EXTENDING CHANGES相关推荐

  1. (android R) VNDK library: XXX’s ABI has EXTENDING CHANGES

    修改了libBinder 但是编译不过 由于修改adiDiff  工具源码,编译的时候,编译不过,下载google 源码,网络原因下不下来,只能修改编译脚本,跳过vndk 检测.

  2. error: VNDK library: liblog‘s ABI has EXTENDING CHANGES Please check compatiblity report at

    android 9 1.修改代码: diff --git a/development/vndk/tools/header-checker/header-abi-diff/src/header_abi_ ...

  3. android apt最新版本,解决Android studio 2.3升级到Android studio 3.0 后apt报错问题

    解决Android studio 2.3升级到Android studio 3.0 后apt报错问题 发布时间:2020-09-16 19:59:42 来源:脚本之家 阅读:62 作者:哈特中尉 1. ...

  4. Android-Studio-Chipmunk版本解决gradle报错connection-refuse的问题

    Android Studio Chipmunk版本解决gradle报错connection refuse的问题 文章目录 Android Studio Chipmunk版本解决gradle报错conn ...

  5. 如何导入别人的android studio项目,解决gradle版本不兼容问题

    如何导入别人的android studio项目,解决gradle版本不兼容问题 参考文章: (1)如何导入别人的android studio项目,解决gradle版本不兼容问题 (2)https:// ...

  6. Android引包出现Duplicate class com.xxx.xxx found in modules错误

    方法一:改依赖库的版本 其实就是依赖的包版本不一样,产生了冲突,把所有依赖的库改成版本一致的就可以了. 注意:如果有多个library的引用,并且各自引入了 so库文件,编译时发生了so重复引入的问题 ...

  7. Android Gradle 插件版本说明

    Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件添加了几项专用于构建 Android 应用的功能.虽然 Android 插件通常会与 Andro ...

  8. android:关于主工程和library project

    1.如何将一个android工程作为库工程(library project)library project是作为jar包被其它android工程使用的,首先它也是普通的android工程.然后:1)在 ...

  9. Android RecyclerView 向上偏移解决、添加自定义分割线,瀑布流,ScrollView嵌套RecyclerView滑动卡顿

    向上偏移解决 android:focusableInTouchMode="true" android:focusable="true" android:fill ...

最新文章

  1. 为了杀蚊子,这位博士用树莓派DIY了一把激光枪,网友:伤到人怎么办?
  2. 程序设计实习MOOC/自增和自减运算符的重载
  3. 我看ITIL在中国(六):如何建立有中国特色的IT运维管理平台【二】
  4. Arch Linux下打不开gnome-shell
  5. oracle的一些常使用命令,Oracle 经常使用命令小结
  6. java实现的简单程序登录界面
  7. Samba简单应用案例
  8. SQL-SERVER触发器
  9. Call for Presentations!Flink Forward Global 2021 议题征集ing
  10. pycharm自动调整格式_PyCharm开发Django,好玩么?
  11. Atitit 团队工具链体系打造---开发方面提升效率的软件与技术体系 attilax总结.docx
  12. Android实战开发通用流行框架大全
  13. 解决:AttributeError: ‘str‘ object has no attribute ‘decode‘
  14. linux下mysql数据库备份与恢复(全量+增量)
  15. 说说JDBC 操作数据库的步骤?
  16. MAC苹果电脑关闭系统完整性保护SIP(System Integrity Protection)
  17. 实验一 关系数据库标准语言SQL
  18. vue如何实现在页面上画画_vue组件:canvas实现图片涂鸦功能
  19. js中计算两个时间差
  20. 阿里云GPU计算型弹性裸金属服务器实例ebmgn6v详解和使用场景

热门文章

  1. 沙箱环境--虚拟环境
  2. Elasticsearch之拼音搜索(十五)
  3. excel表格汇总软件
  4. JAVA日记之SpringJdbcTemplate/声明式事务控制 ----喝最烈的酒.
  5. 火影T7C笔记本Win11重装Win10系统方法分享
  6. 元宵节就要到了,手把手教你用Python打造一款3D花灯
  7. 电信云2020校招-技术笔试题
  8. 解决方案:IDEA没有Java Enterprise选项的问题
  9. 面包屑的实现+tag功能实现+form表单
  10. 审计学习-审计概述02(政府审计和注册会计师审计+职业责任和期望差距+审计报告和信息差距+审计五要素+三方关系人+责任方责任+审计报告预期使用者+鉴证对象+披露+财报编制基础)