【发布时间】:2016-04-13 01:12:02
【问题描述】:
简短: Android NDK 系统如何将“APP_ABI := armeabi-v7a-hard”转换为位于“libs/armeabi-v7a”中的最终 .so 文件?在 Android.mk 中做同样事情的正确方法是什么?目前,为了构建独立的可执行文件并将其放置在与不同 ABI 对应的文件夹中,我使用它,因为硬编码“ifeq ($(TARGET_ARCH_ABI),armeabi-v7a-hard)”,它看起来很难看:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
SAVED_NDK_APP_DST_DIR := $(NDK_APP_DST_DIR)
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a-hard)
NDK_APP_DST_DIR := assets/armeabi-v7a
else
NDK_APP_DST_DIR := assets/$(TARGET_ARCH_ABI)
endif
LOCAL_MODULE := run_pie
LOCAL_SRC_FILES := run_pie.c
include $(BUILD_EXECUTABLE)
NDK_APP_DST_DIR := $(SAVED_NDK_APP_DST_DIR)
Long: 在我的 Android 应用中,我使用的是一组独立的二进制文件。构建后,它们存储在 APK 资源中。在第一次启动应用程序时,我将它们复制到我的应用程序私有文件夹 chmod 777,然后将它们用作系统实用程序,如“ls”或“cp”。我想生成“胖二进制文件”:具有所有 ABI 二进制文件的单个 APK,并在安装后为当前设备选择正确的二进制文件。对于 .so 库,Android 会自动完成所有这些工作。并且“APP_ABI := armeabi-v7a-hard”是 NDK 构建系统的内部,它在文档中进行了说明,“armeabi-v7a-hard”的最终 .so 文件放置在“armeabi-v7a”文件夹中。我可以为我的二进制文件做同样的事情,目前我有办法工作,但它看起来很丑。
将输出二进制文件放置到以 ABI 命名的自定义文件夹并处理“armeabi-v7a-hard”到“armeabi-v7a”转换的正确方法是什么?
【问题讨论】:
标签: android android-ndk android-build