【问题标题】:Include .so in android.mk system app android在 android.mk 系统应用程序 android 中包含 .so
【发布时间】:2018-08-21 03:27:05
【问题描述】:

我有一个包含 java 代码和一些 .so 文件的 APK。我已经在 Android Studio 中构建了 APK,现在这个 APK 需要成为我自定义 ROM 上 /system/app/ 文件夹的一部分。

Java 代码 + .so = APK

要将其包含在 system/app/ 中,我在 Android.mk 文件中有以下构建脚本并从 device.mk 文件中调用它。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := utility
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := utility.apk
include $(BUILD_PREBUILT)

构建映像后,我发现我的 APK 崩溃了,并且日志显示“无法链接可执行文件”并且所有 .so 文件似乎都丢失了。 但是,如果我使用 adb install utility.apk,APK 就可以工作。

谁能告诉我构建脚本中缺少什么导致 .so 文件不可用。

P.S.:我在 /data/data/com.org.utility/、/system/lib/ 文件夹中进行了搜索,但没有找到 .so 文件。 但是如果我使用 adb install,.so 文件会在 /data/data/com.org.utility/lib/x86/ 文件夹中找到。

【问题讨论】:

    标签: android android-source android-build android.mk


    【解决方案1】:

    我不记得在 L 或 M 中,构建系统中存在错误。

    system/app或system/priv-app内建的apk中的so无法释放到系统中。但是第三方应用程序可以通过 PackageManagerService 释放那里的库。

    一种解决方案: 1.在apk中手动发布so。 2.添加与Android.mk相关的so,例如:

        LOCAL_PATH := $(call my-dir)
        include $(CLEAR_VARS)
        LOCAL_MODULE := test
        LOCAL_SRC_FILES := libtest.so
        include $(PREBUILT_SHARED_LIBRARY)
    
    1. 将此模块名称添加到 PRODUC_PACKAGES micro。

    这些在您的应用程序中将被构建到您的系统/lib 或 lib64。

    祝你好运。

    【讨论】:

    • 如果我们可以访问代码库,这种方法就可以工作。对于系统/应用中要包含的第三方APK,此方案不适用。
    • @user3022690 您可以自己从第三方 APK 中提取所有 .so 文件。毕竟,它只是一个签名的 ZIP 文件。我相信你甚至不需要重新打包这个 APK,过时的 .so 文件不会有什么坏处。
    • 嗯,1.如果你可以通过Android.mk制作apk,你也可以制作。 2.如果你无法访问源代码,需要把你的apk放到system/app,你有root权限,这种情况下,你可以释放so,也放到system/lib。 3.如果你没有root,你必须通过adb或其他方式安装apk,PMS会释放你的libs,不会出现这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2012-08-13
    • 1970-01-01
    • 2020-01-13
    相关资源
    最近更新 更多