Android 打包指定的so到apk中

今天遇到一个问题,第三方合作方只提供了arm架构的so,而我们的Android设备是arm64的,怎么办?现在就来讲讲怎么强制打包指定架构的so到我们的apk中。

以我们的工程目录下 libs/armeabi/libxxx.so 为例。分别介绍在 Android Studio 中和 Android.mk 中的方法。

Android Studio 中打包指定的 ABI 架构 so 到 apk 中

app/build.gradle

android {
	...
	defaultConfig {
    	...
    	 ndk {
         	//armeabi armeabi-v7a arm64-v8a x86 x86_64
            abiFilters 'armeabi'
        }
    }

    sourceSets {
        main {
        	//修改so的默认路径 app/src/jniLibs 为 app/libs
            jniLibs.srcDirs = ['libs']
        }
    }
    ...
}

Android.mk 中打包指定的 ABI 架构 so 到 apk 中

Andriod.mk

LOCAL_PREBUILT_JNI_LIBS := app/libs/armeabi/libxxx.so

#arm arm64 x86 x86_64
LOCAL_MODULE_TARGET_ARCH := arm

附:获取目标设备的架构

my_archs := arm arm64 x86 x86_64
my_src_arch := $(call get-prebuilt-src-arch, $(my_archs))

在 Android Studio 和 Android.mk 中修改的方法都很简单。通过上面的方法可以解决没有arm64架构的so在64位的目标设备无法运行的问题。


版权声明:本文为QQxiaoqiang1573原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。