【问题标题】:How to generate a shared library temporary and pack it into a APK package如何临时生成共享库并打包成APK包
【发布时间】:2017-04-20 02:52:01
【问题描述】:

我有一个名为“ABC”的安卓应用程序,它需要打包一个名为“libxxx-jni.so”的 jni 共享库。所以源码树如下:

ABC
+- Android.mk
+- java
+- res
+- jni
    +- Android.mk
    +- xxx.cpp

ABC应用的Android.mk是:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional
LOCAL_PACKAGE_NAME := ABC
LOCAL_SRC_FILES := $(call all-java-files-under, java)

LOCAL_RESOURCE_DIR += \
        $(LOCAL_PATH)/res

LOCAL_JNI_SHARED_LIBRARIES := libxxx-jni

include $(BUILD_PACKAGE)

# Also build sub-targets under this one: the shared library.  
include $(call all-makefiles-under, $(LOCAL_PATH))

而jni库xxx的Android.mk为:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libxxx-jni
LOCAL_SRC_FILES := xxx.cpp

LOCAL_SHARED_LIBRARIES := \
    libutils \
    libcutils

LOCAL_LDLIBS += -llog

LOCAL_C_INCLUDES += \
    $(JNI_H_INCLUDE)

include $(BUILD_SHARED_LIBRARY)

我把这些源码放在android aosp源码树中,使用android构建环境构建整个系统。

我的问题是我需要将 libxxx-jni.so 打包到我的设置 apk 中。目前,构建完成后,我看到 libxxx-jni.so 位于 /system/lib。在 APK 的 lib 子文件夹中,我只看到 /system/lib/libxxx-jni.c 的链接。

这不是我的期望。我想将 so 打包到我的 APK 的 lib 子文件夹中,而不仅仅是一个链接。而且我不希望libxxx-jni.so出现在/system/lib中。

我没有使用 IDE(eclipse 或 android studio),我只在 aosp 源码树中使用 Android.mk。

我应该如何修改这些 Android.mk 以满足我的期望?谢谢。

【问题讨论】:

  • AOSP 构建确实如您所描述的那样工作:您构建的应用程序被视为 系统应用程序,它所依赖的所有本机库都安装到 /system/lib。这是有道理的,因为这个应用程序永远不会被安装,并且pm 将没有机会提取打包的本机库,就像普通 APK 发生的那样。
  • 您可以在aapt 命令的帮助下将任何文件添加到您的APK,参见stackoverflow.com/a/23655436/192373

标签: android makefile android-ndk android-build android-install-apk


【解决方案1】:

将此添加到 Android.mk:

LOCAL_MODULE_TAGS := 样本

【讨论】:

    猜你喜欢
    • 2017-11-08
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多