【问题标题】:Android in-tree build: include *.so library to apk instead of link to /system/lib/Android in-tree build:将 *.so 库包含到 apk 而不是链接到 /system/lib/
【发布时间】:2015-07-14 19:25:05
【问题描述】:

我有一个集成到 Android 5.0 源的包。它有一个 java 服务和几个本地库。当我构建它时,我得到一个带有指向本机库的符号链接的 apk(在/system/lib64/ 中),并且假设库已经存在。我必须使包可以从应用市场安装,即所有库都必须包含在 apk 中。我可以通过 SDK 获得这样的 apk,但我无法使用它,因为我依赖于非公共库和 java 类。

如何在树中构建 apk,以便我的原生库包含在 apk 本身中?

【问题讨论】:

    标签: android android-ndk android-sdk-tools


    【解决方案1】:

    这真的取决于您要使用的库。

    如果您依赖 libssl.so 和 libcrypto.so,您应该编译您自己的 OpenSSL 版本,在您的 APK 中包含并使用它。

    对于其他正式属于 NDK 的系统库(libc.so、libandroid.so...),无需符号链接,它们会自动从系统加载。

    如果你真的需要使用非公共库和类,你可以这样做,通过直接从系统加载库,嵌入这些库的副本是没有意义的。但是,使用任何私有内容可能会导致崩溃,您不应该这样做。

    【讨论】:

    • 我有自己的库并使用一些非公共库。当我在树内构建我自己的库时,会转到 /system/lib,而不是 apk。我可以以某种方式改变它吗?如果可能的话,我想避免通过 dlsym 获取每个非公共函数......
    • 然后,您可以手动将自己的库复制到您的 Android 项目的 libs/*ABI*/ 子文件夹中并构建它。但是,如果您能够设法根据 ndk 平台头文件和库,从树、您的应用程序和库中构建所有内容,那就更好了。这是确保它可以跨设备正常工作的最佳方式。这也将允许您轻松支持 Android 设备正在使用的所有不同 cpu 架构。
    • 我遇到了同样的问题,我不认为这有任何帮助。它更像是一个评论。我有一个使用自己的 JNI 库的 APK,但该库构建到 /system/lib,这使得我的 APK 不可安装/升级。这是使它成为 APK 的唯一要点!
    • 我想提供更多帮助,但如果您不提供有关您拥有的设置和想要达到的结果的更多详细信息,则无法提供帮助。您甚至可能遇到与原始海报不同的问题,所以也许您应该提出一个新问题。
    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多