首页 \ 问答 \ 为什么在armeabi代码中使用armeabi-v7a代码?(Why use armeabi-v7a code over armeabi code?)

为什么在armeabi代码中使用armeabi-v7a代码?(Why use armeabi-v7a code over armeabi code?)

在我目前的项目中,我使用了多个.so文件。 这些位于armeabi和armeabi-v7a文件夹。 不幸的是.so文件之一是6MB,我需要减少文件大小。 而不是使用一个胖的APK文件,我只想使用armeabi文件,并删除armeabi-v7a文件夹。

根据NDK文档,armeabi-v7a代码是扩展的armeabi代码,可以包含额外的CPU指令。 这一切都超出了我的专长,但我怀疑为什么一个人想要有armeabi-v7a和armeabi代码。 有两个好的理由呢?

在我的测试设备上,这一切似乎都很好。 这些具有ARM v7 CPU。 假设一切都有效吗?


In my current project I make use of multiple .so files. These are located at the armeabi and armeabi-v7a folder. Unfortunately one of the .so files is a 6MB and I need to reduce file size. Instead of having a fat APK file, I would like to use just the armeabi files and remove the armeabi-v7a folder.

According to the NDK documentation, armeabi-v7a code is extended armeabi code which can contain extra CPU instructions. This all goes beyond my expertise, but I question why one would like to have both armeabi-v7a and armeabi code. There must be a good reason to have both, right?

On my test devices this all seem to work fine. These have ARM v7 CPU's. Is it safe to assume that everything works now?


原文:https://stackoverflow.com/questions/7080525
更新时间:2021-06-08 18:06

最满意答案

取决于您的本机代码,但v7a支持硬件浮点运算,这是一个巨大的差异。 armeabi可以在所有设备上正常工作,但速度会慢一些,不会更新新设备的CPU功能。 为您的特定应用程序采取一些基准测试,但删除armeabi-v7a二进制文件通常不是一个好主意。 如果您需要减小大小,您可能需要为旧的(armeabi)和较新的(armeabi-v7a)设备分别安装两个apks。


Depends on what your native code does, but v7a has support for hardware floating point operations, which makes a huge difference. armeabi will work fine on all devices, but will be a lot slower, and won't take advantage of newer devices' CPU capabilities. Do take some benchmarks for your particular application, but removing the armeabi-v7a binaries is generally not a good idea. If you need to reduce size, you might want to have two separate apks for older (armeabi) and newer (armeabi-v7a) devices.

相关问答

更多

当lib项目在libs目录中同时包含armeabi和armeabi-v7a目录时,android无法加载库(android can't load library when lib project has both armeabi and armeabi-v7a directory in libs directory)

如果您需要同时支持armeabi和armeabi-v7a那么只需从库项目中删除armeabi-v7a库。 但是,如果可以放弃armeabi支持,那么从库项目中删除armeabi库,并在主项目中将armeabi库移动到新的armeabi-v7a文件夹中。 注意:如果你这样做,记下这个未经证实的错误报告。 你可以在我的答案这里阅读更多关于这个。 If you need to support both armeabi and armeabi-v7a then just delete the armeab ...

如何确定Android .so文件的ABI(即armeabi或armeabi-v7a)?(How to determine ABI of Android .so file (i.e. armeabi or armeabi-v7a)?)

我最终使用Android NDK中的arm-linux-androideabi-objdump程序拆解了.so文件。 在反汇编代码中,我找到了vmaxnm.f32指令,该指令存在于armeabi-v7a指令集中,但不存在于armeabi中。 基于此,我得出结论,.so编译为armeabi-v7a。 可能还有其他指令可供我查找,但我对ARM指令集并不熟悉。 我很幸运,这个是相当明显的(因为它是一个浮点运算,是armeabi和armeabi-v7a之间的主要区别之一)。 感谢发布者的想法。 I end ...

无法更新android studio 3.1:在同步项目期间冲突的配置:'armeabi-v7a,x86'(not able to update android studio 3.1: Conflicting configuration : 'armeabi-v7a,x86' during sync project)

最后我通过放置来理清 abi { enable false reset() include 'x86', 'armeabi-v7a' universalApk true } multiDexEnabled true但我不知道这是排除了问题还是忽略了错误 ndk.abiFilters configuration means that only selected processor architectures of native libraries will be included in the fi ...

为什么在armeabi代码中使用armeabi-v7a代码?(Why use armeabi-v7a code over armeabi code?)

取决于您的本机代码,但v7a支持硬件浮点运算,这是一个巨大的差异。 armeabi可以在所有设备上正常工作,但速度会慢一些,不会更新新设备的CPU功能。 为您的特定应用程序采取一些基准测试,但删除armeabi-v7a二进制文件通常不是一个好主意。 如果您需要减小大小,您可能需要为旧的(armeabi)和较新的(armeabi-v7a)设备分别安装两个apks。 Depends on what your native code does, but v7a has support for hardw ...

没有工具链可用于构建平台'armeabi-v7a'(No tool chain is available to build for platform 'armeabi-v7a')

两种解决方案 1)从https://github.com/android-ndk/ndk/wiki下载ndk-r12,向下滚动到“当前测试版”,并指出你的android工作室使用native-audio / local.properties文件中的那个版本 2)按原样使用当前的ndk,但从native-audio / app / build.gradle注释掉以下内容 toolchain ='clang' 那么它将使用gcc来构建 感谢ggfan 在github上回答这个问题 Two soluti ...

预定义符号告诉armeabi-v7a分开?(Predefined symbol to tell armeabi-v7a apart?)

对于运行时支持,请查看$ NDK / docs / CPU-FEATURES.html 。 或者参见machine / cpu-features.h了解各种可能的定义。 For runtime support have a look into $NDK/docs/CPU-FEATURES.html. or see machine/cpu-features.h for various possible defines.

Android系统从armeabi,armeabi-v7a,arm64-v8a加载本机库(so文件)是什么规则?(What's rule does Android system load native library(so file) from armeabi,armeabi-v7a,arm64-v8a?)

你见过: http : //developer.android.com/ndk/guides/abis.html#am 我相信它会回答你的问题: Play商店和包管理器都希望在APK中的文件路径中查找匹配以下模式的NDK生成的库: /lib/<abi>/lib<name>.so 如果系统找不到它所期望的本地共享库,则它不能使用它们。 在这种情况下,应用程序本身必须将库复制过来,然后执行dlopen()。 进一步在页面下方是这个特定位: 安装时自动提取本机代码 在安装应用程序时,软件包管理器服务扫 ...

为什么“x86”库安装在“armeabi-v7a”仿真器而不是“armeabi-v7a”库上?(Why “x86” library is installed on a “armeabi-v7a” emulator instead of “armeabi-v7a” library?)

终于用@ user1056837的帮助解决了我的问题。 我需要搜索的奇怪的事情是: 对于ABI“x86”(至少?),当你想使用依赖于其他库的libmylib.so时,你只需要加载libmylib.so: System.loadLibrary("mylib"); 但是对于ABI“armeabi-v7a”(至少?),你必须手动加载你的lib,你的lib的依赖关系,以及你的lib依赖的依赖... System.loadLibrary("dep1"); System.loadLibrary("dep2" ...

本地组件,armeabi-v7a和拇指?(Native components, armeabi-v7a, and thumb?)

Android使用-mthumb因为它生成更紧凑的代码。 处理器的低下与它无关。 在普通的ARM指令集中,每条指令都是32位的,而且每条指令都很有表现力(有不同的指令可以做很多不同的事情)。 不幸的是,这也意味着代码可能有点大,因为每条指令都需要4个字节。 我们引入了拇指指令集来解决这个问题 - 这里每条指令只有16位长,因此您可以在同一个空间中容纳两倍的指令,但由于指令较短,因此没有多少不同的指令。 每条指令仍然在32位寄存器上运行,否则其行为与ARM指令完全相同,所以它只是一种不同的,更紧凑的 ...

编译armeabi-v7a时未定义PRIx64格式宏(PRIx64 format macro not defined when compiling for armeabi-v7a)

使用PRIx64格式时需要定义宏: -D__STDC_FORMAT_MACROS A macro needs to be defined when using PRIx64 format: -D__STDC_FORMAT_MACROS

相关文章

更多

最新问答

更多
  • 如何从远程文件拉取文件而不覆盖本地文件?(How do I pull files from remote without overwriting local files?)
  • Reactjs:状态改变时重新渲染iframe(Reactjs: re-renders iframes when state changed)
  • 奇怪的网址,以及跟随php页面流程的困难(odd url, and difficulty in following the php page flow)
  • 标签活动无效(Tab Activity is not working)
  • JavaME合适的语法编译器建议?(JavaME-suitable grammar compiler recommendations?)
  • 指定参数(Specifying arguments)
  • 可以通过Ruby插件或控制台覆盖Sketchup中的键盘快捷键吗?(Can one override keyboard shortcuts in Sketchup through the a Ruby Plugin or Console?)
  • 计算Java EE Web App中用户数的最佳方法(Best way to count number of users in a Java EE web App)
  • 无法使用templateUrl加载cordova中的外部模板(unable to load external templates in cordova with templateUrl)
  • PHPExcel:写入期间无法使用缓存(PHPExcel: Unable to use cache during write)
  • 在javascript中嵌套这个指针(nested this pointer in javascript)
  • 谁跟领航致远培训过,有问题问下啊
  • 控制器要求在入门时下载(Controller ask to download on entry)
  • 未能通过conda安装Asyncio(Failure to install Asyncio via conda)
  • 如何查找已完成项目的总长度?(How to find length of total completed items?)
  • 如何检查OleInitialize是否已被调用?(How to check if OleInitialize has already been called?)
  • SQL在特定范围内返回列中具有最大值的行(SQL Returning rows with max value in column, within a specific range)
  • preg_match从url获取id(preg_match get the id from url)
  • 如何在运算符中为make方程转换perl变量?(How to convert a perl variable in a operator for make equations?)
  • 在导航上方添加空格/标题。(Add a white space/ header above navigation.)
  • MeetingItem已保存;(MeetingItem saved; but change now shown in Calendar)
  • c#vb:我们应该使用System.Lazy进行资源密集型任务吗?(c# vb: Should we use System.Lazy for resource-intensive task? (when threading is not needed))
  • 为什么在armeabi代码中使用armeabi-v7a代码?(Why use armeabi-v7a code over armeabi code?)
  • 获取请求的自定义标头(Java HTTP)(Fetching a custom header of a request (Java HTTP))
  • 是否可以在嵌套的if语句中从varchar转换为numeric以动态评估参数?(Is it possible to convert from varchar to numeric within a nested if statement in order to dynamically evaluate a parameter?)
  • 如何将Html.ActionLink转换为链接到Ajax调用的按钮?(How to convert from Html.ActionLink to a button linked to Ajax call?)
  • 应用程序如何处理Windows符号链接?(How are Windows symbolic links treated by the apps?)
  • html,js,css在jsfiddle中工作,但不在sharepoint中(html, js, css works in jsfiddle but not in sharepoint)
  • 从Ruby脚本调用Elasticsearch Rest API(Calling Elasticsearch Rest API from Ruby script)
  • 如何将嵌套setTimeouts转换为承诺(How to convert nested setTimeouts to promises)