Android的NDK:编译不同体系结构不同的库 [英] Android NDK : Compiling different libraries for different architectures

查看:215
本文介绍了Android的NDK:编译不同体系结构不同的库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须为armeabi和armeabi7a编译一个小的C ++库。我也有一个非常大的C ++库,只需要编译armeabi。现在他们正在整理(使用NDK)两种架构,但这让我.apk文件非常大。是否有可能针对大库只为armeabi进行编译?我会怎么做呢?

我的文件夹结构是这样的:

  / JNI / biglib /
/ JNI / smalllib /
/jni/Application.mk
/jni/Android.mk

我/jni/Application.mk文件包含:

  APP_ABI:= armeabi-V7A armeabi
APP_OPTIM:=释放

我的根/jni/Android.mk文件结合Android.mk文件,每个库:

  LOCAL_PATH:= $(叫我-DIR)
LOCAL_C_INCLUDE:= $(LOCAL_PATH)/包括:包括$(添加preFIX $(LOCAL_PATH)/ $(addsuffix /Android.mk,\\
    biglib \\
    smalllib \\
))


解决方案

这是绝对有可能的。还有一些code片段,让你去(不考虑biglib Android.mk的确切内容和smallib我帮不了你更多)。

1) APP_ABI 更改为 APP_ABI:= armeabi armeabi-V7A Application.mk

2)修改根目录 Android.mk

  LOCAL_PATH:= $(叫我-DIR)
LOCAL_C_INCLUDE:= $(LOCAL_PATH)/包括:#biglib没有内置的armeabi,V7A
ifneq$(TARGET_ARCH_ABI),armeabi-V7A
  包括$(LOCAL_PATH)/biglib/Android.mk
万一# - - - 剪这里 - - -
#将这个片段的每一个模块,需要biglib,或方便。
#现在,你都会连接biglib的armeabi版本。
IFEQ$(TARGET_ARCH_ABI),armeabi-V7A
  LOCAL_LDFLAGS + = $(LOCAL_PATH)/../ OBJ /本地/ armeabi / libbigLib.so
万一
# - - - 剪这里 - - -包括$(LOCAL_PATH)/smalllib/Android.mk

和多数民众赞成 - 你的 APK 现在文件不包含 libbiglib.so 为armeabi-V7A

I have a small c++ library that must be compiled for both armeabi and armeabi7a. I also have a very large c++ library that only needs to be compiled for armeabi. Right now they are being compiled (using NDK) for both architectures, but this is making my .apk very big. Is it possible to target the big library to be compiled only for armeabi? How would I do this?

My folder structure is something like this:

/jni/biglib/
/jni/smalllib/
/jni/Application.mk
/jni/Android.mk

My /jni/Application.mk file contains:

APP_ABI := armeabi-v7a armeabi
APP_OPTIM := release

My root /jni/Android.mk file combines the Android.mk files for each library:

LOCAL_PATH := $(call my-dir)
LOCAL_C_INCLUDE := $(LOCAL_PATH)/include

include $(addprefix $(LOCAL_PATH)/, $(addsuffix /Android.mk, \
    biglib \
    smalllib \
))

解决方案

It is definitely possible. There are some code snippets to get you going (without exact content of Android.mk for biglib and smallib I can't help you more).

1) Change order of APP_ABI to APP_ABI := armeabi armeabi-v7a in Application.mk.

2) Modify your root Android.mk:

LOCAL_PATH := $(call my-dir)
LOCAL_C_INCLUDE := $(LOCAL_PATH)/include

# biglib is not built for armeabi-v7a
ifneq "$(TARGET_ARCH_ABI)" "armeabi-v7a"
  include $(LOCAL_PATH)/biglib/Android.mk
endif

# ----- cut here -----
# Place this snippet to every module which needs biglib, or where convenient.
# Now you will link against armeabi version of biglib.
ifeq "$(TARGET_ARCH_ABI)" "armeabi-v7a"
  LOCAL_LDFLAGS += $(LOCAL_PATH)/../obj/local/armeabi/libbigLib.so
endif
# ----- cut here -----

include $(LOCAL_PATH)/smalllib/Android.mk

And thats all - your apk file now doesn't contain libbiglib.so for armeabi-v7a

这篇关于Android的NDK:编译不同体系结构不同的库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆