【问题标题】:Building/finding shared libraries from Android source code从 Android 源代码构建/查找共享库
【发布时间】:2012-06-03 15:42:15
【问题描述】:

我希望将版本 3.1(Honeycomb) 中引入的 Android RTP API 反向移植到早期版本。我下载了 4.0 版本的源代码,发现这些 API 既有 java 又有原生代码。为了使用 NDK 构建本机代码,需要某些共享库。
根据 Android.mk 文件,这些是 libnativehelperlibcutilslibutilslibmedia。尽管所有这些的源代码都存在于源代码中,但构建它们却很困难。每个都需要许多其他共享库。例如,libmedia 需要这些共享库:libuilibcutilslibutilslibbinderlibsonivoxlibicuuclibexpatlibcamera_clientlibgui4、和libdl

所以我的问题是,有没有办法获得原来的 4 个共享库?是否涉及构建整个源代码?

【问题讨论】:

  • 我想最简单的方法是将您的反向移植代码添加到早期版本源的构建路径并构建整个源代码。最多需要 1-2 小时。
  • 我正在寻找类似的东西。我在 SO 上问了this question,但没有得到太多信息。
  • @AndreyErmakov,你能详细说明一下吗?由于我想创建一些 Android 源代码的共享库,我要构建整个源代码吗?这会产生共享库吗?

标签: android android-ndk java-native-interface shared-libraries rtp


【解决方案1】:

假设我需要构建一段将使用标准 Android 共享库的本机代码,例如 libutilslibcutlislibmedia。我将执行以下步骤:

  1. 使用目标版本安装AOSP 存储库。
  2. 将我的源代码添加到./frameworks/base 下的适当目录中。
    在您的情况下,创建一个单独的文件夹并放置正确的Android.mk 当然可能更容易。
  3. 如果这些标准共享库中所需的函数在以前的版本中不存在,您可能会遇到编译错误。
  4. 当您将代码构建为AOSP 的一部分时,它将构建所需的库并自动为您链接它们。

附:为此,您最好使用基于 Linux 的构建主机。

【讨论】:

  • 谢谢。我会试试这个,然后告诉你它是怎么回事。
【解决方案2】:

使用 cygwin 终端,构建原生部分,即 jni 文件夹。要使用 cygwin 构建,请使用 cygdrive 命令转到 jni 文件夹。然后键入 ndk-build。成功完成后,将在 libs 文件夹中创建共享库,即 .so 文件。

【讨论】:

  • ndk-build 代码需要某些我没有的共享库。我的问题是如何生成它们。
【解决方案3】:

我能理解您的问题,您可以从设备或模拟器的 /system/lib 中提取库。但是你需要一个系统权限。但是您可以通过安装应用程序来做到这一点。 否则在 linux 平台上构建你的源代码。构建过程非常简单,只需使用 2 或 3 个命令。第一次需要很长时间来构建。之后你需要很短的时间来构建,它只会根据修改代码的时间戳来构建。 Please have a look here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-28
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2016-08-01
    相关资源
    最近更新 更多