我正在将第三方API集成到Android应用程序中,并且必须包含他们的NDK库。我正在使用Android Studio w / gradle并将所有本机库放在:
src/main/jniLibs/
我的问题是:他们提供了' .so'子目录下的库:
armeabi/ mips/ x86/
我是否需要在我的应用程序中将所有这些目录包含在jniLibs下?
仅指定了实施说明' armeabi',但后来我不确定为什么提供其他架构。 mips目录大约是3.2 MB,x86目录大约是6MB,所以如果没有必要,我不想在我的应用程序中打包它们。不确定它们的用途。
答案 0 :(得分:3)
MIPS驱动的设备目前占据相对较小的市场份额,这是市场的低端(主要是零售价格)部分。您的应用可能完全适合这个市场,或者您可能没有兴趣抓住这个机会(请注意,对于高端和低端目标,营销方法甚至技术挑战都有很大差异。)
另一方面,我看到的所有基于英特尔的设备都内置了体面的ARM仿真,正是为了弥补原生应用开发者对该平台的不良覆盖。因此,如果您不关心性能,可以轻松地放弃x86支持。
实际上,提供本机库的 armv7-a 版本可能更为重要,因为使用高级指令集(尤其是使用NEON)可能会提高应用程序的性能绝大多数用户(现在大多数现代平板电脑和手机都带有支持这些的芯片组之一)。
此外,在不到一个月的时间内,新的ABI将进入市场:64位Intel和ARM设备,例如Nexus 6,运行Android 5.0 Lollipop。
但最终,您主要担心的是 APK 文件的大小,数百万用户将从 Play商店下载 将是不必要的巨大。要解决此问题,有一种不同的技术,它允许您拆分APK并上传到Play商店的单独版本,每个版本对应一个ABI。诀窍是应该仔细管理版本号,以便为每个平台的用户平滑升级。 Here您的真正提议(并且Ashwin S Ashok改进了)版本编号方案有助于管理此任务。