升级NDK版本时,我应该重建所有库吗?

时间:2016-12-21 04:02:47

标签: android c++ android-ndk

我的android项目中有很多共享库(*。so)。其中一些是由其他人构建的,我没有源代码。

我正在使用NDK r10e,我想将NDK版本升级到r13b。

如果我不更改makefile,只需使用NDK-r13b构建部分共享库,其他使用NDK-r10e构建的库不会更改。 android程序的功能有问题吗?

NDK-r10e use clang-3.5
NDK-r13b use clang-3.8

以下配置相同:

APP_ABI := armeabi-v7a
APP_PLATFORM := android-19
APP_STL := gnustl_shared

1 个答案:

答案 0 :(得分:3)

这通常是一个好主意,但并不总是需要。我们尝试保持NDK版本之间的兼容性,因为,当您没有依赖关系源时,跨越兼容性边界是很困难的,但有时可以在不破坏兼容性的情况下修复错误。

这通常是一个好主意,因为这样做会有最少的惊喜。我们只测试NDK版本。当 兼容性中断时,它还会为您节省大量时间来解决出错的问题。

可能出错的几个例子(绝不是完整的清单):

NDK的公共API表面随着时间的推移而发生了变化。 API仍然存在于设备上,以便遗留应用程序继续工作,但有时会从NDK中删除API,以便新应用程序不会使用它们(这可能会发生一些原因)。在这些情况下,使用已删除符号的旧库无法使用没有这些API的NDK链接到新库/可执行文件(这实际上取决于链接器的行为;静态库总是如此,我认为它只是共享库的arm64。

特别是从r10升级时,libc ++中存在ABI中断(需要避免与系统的讨厌交互),这意味着使用r10构建的库和使用r11 +构建的库不兼容。您正在使用gnustl,因此问题不会对您产生影响,但对于落在这里的其他人来说值得一提。