- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
Xamarin documentation对此有点不清楚。如果我在构建首选项中仅勾选 armeabi 构建我的应用程序,我的应用程序会:
如果它确实运行,是否有任何功能,例如使用线程会导致意外行为或崩溃?
我有一个简单的应用程序,并试图保持它的小。另外,我没有 v7a 设备来做一个快速实验。
澄清:
虽然似乎已明确接受仅使用 amreabi 库编译 Android 应用程序是“安全的,但性能不高”(参见这篇出色的帖子:Why use armeabi-v7a code over armeabi code?),但 Xamarin docs on CPU architecture ,我认为适用于他们编译的 .so 库,说:
it is important to remember that the armeabi runtime used by Xamarin.Android is thread safe. If an application that has armeabi support is deployed to an armeabi-v7a device, many strange and unexplainable exceptions will occur.
我已经能够在 v7a 设备上测试我刚刚使用 armeabi 编译的应用程序,并且还没有遇到任何“奇怪且无法解释的异常”。
更新:
看起来 Xamarin 文档已经更新,现在 (2014-07-14) 显示为:
it is important to remember that the armeabi runtime used by Xamarin.Android is not thread safe. If an application that has armeabi support is deployed to an armeabi-v7a device, many strange and unexplainable exceptions will occur.
最佳答案
根据 Xamarin Android 文档,armeabi 代码会在多核 armeavi-v7 设备上以意想不到的方式崩溃。
http://docs.xamarin.com/guides/android/advanced_topics/cpu_architecture
Section 1.1
Note: Xamarin.Android’s armeabi code is not thread safe and should not be used on multi-CPU armeabi-v7a devices (described below). Using aremabi code on a single-core armeabi-v7a device is safe.
Xamarin Android 要求包含 armeabi-v7a 的原因与线程安全内存访问有关。简而言之,armeabi 指令集缺少安全锁定 SMP 设备上的内存所需的指令。
可以在此错误报告中找到对该问题最彻底的讨论:https://bugzilla.xamarin.com/show_bug.cgi?id=7013
Jonathan Pryor 2012-09-20 11:41:45 EDT
As far as I can determine, it is (nearly) IMPOSSIBLE to SAFELY use an armeabi library on a SMP armeabi-v7a device. This is because armeabi lacks the CPU instructions necessary to safely lock data on SMP devices, so if the armeabi library contains data that must be protected against access from multiple threads, it's busted, and libmonodroid.so is such a library. This may be fixable by creating a libmonodroid.so which dynamically determines the runtime CPU, allowing it to use either armeabi or armeabi-v7a lock instructions accordingly, but this has not been done yet, and the implementation timeframe is unknown.
Thus, if your app will be running on SMP hardware, you should include the armeabi-v7a runtime with your app. This can be done in the Project Options dialog.
这些崩溃很少见,但却是灾难性的,而且在您遇到随机内存损坏和段错误时非常难以调试。
我能够在 Galaxy S3 上可靠地重现该问题。一些演示崩溃的示例代码在此错误报告中:https://bugzilla.xamarin.com/show_bug.cgi?id=7167
尚不清楚此错误是否会影响 Android 上的其他 NDK 应用程序。但它肯定会影响 Xamarin Android。
关于android - 仅使用 armeabi 构建的应用程序能否在 armeabi-v7a 设备上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17429139/
我上次在 Android Studio 中将 NDK 版本升级到最新版本后遇到了这个问题。我还找到了解决此问题的解决方案。如果有人有这个问题,我希望这是对你最好的问题和答案。请检查我的答案。 最佳答案
我正在开发一个 Android 项目,我正在使用 NDK 调用本地方法。我有两个库(.so 文件),一个位于 libs/armeabi 文件夹中,另一个位于 libs/armeabi-v7a lib
据我所知,Android NDK 中两种支持的 ARM 架构风格之间的区别仅在于支持的 CPU 指令集。真的是这样吗?调用约定、系统调用顺序或其他方面没有区别吗? 我想知道如果我将模块编译为 ARM
我在我的项目中使用一个库来播放视频。该库提供了一个演示项目。演示项目工作正常。 库有几个.Jar文件,一些库类,还有很多.so文件。演示项目将 Jar 文件放在 lib 文件夹中,将 .so 文件放在
在我当前的项目中,我使用了多个 .so 文件。它们位于 armeabi 和 armeabi-v7a 文件夹中。不幸的是,其中一个 .so 文件是 6MB,我需要减小文件大小。我不想使用胖 APK 文件
Xamarin documentation对此有点不清楚。如果我在构建首选项中仅勾选 armeabi 构建我的应用程序,我的应用程序会: 可以在 Play 商店中使用 v7a 设备吗? 在 v7a 设
我正在一个裸项目中使用 eclipse 中的 ndk 构建应用程序的 native 部分。我稍后将 libs/armeabi/中生成的 libmylib.so 复制到另一个使用它的项目。 我注意到 o
我认为所有支持 armeabi-v7a 的设备都应该能够支持 armeabi-v7a-hard。如果是这样,为什么我们不放弃 armeabi-v7a 或者只是使用 armeabi-v7a-hard 替
我一直在使用新的 APK splits Android 0.13 插件的功能,我设法将大部分构建脚本的大小减半,并将构建速度提高了 4 倍。我的应用程序在每个平台上都有超过 20MB 的库,因此优先考
我有一个由第三方供应商提供的 .so 文件,该文件将包含在我的 Android 应用程序中。我无法访问源代码,也无法(轻松)联系供应商。 有没有办法让我通过检查 .so 文件来确定它是否是针对 arm
我的应用程序使用 2 个 native 库,我们称它们为 LibA.so 和 LibB.so。以前,我的应用程序在 kitkat OS 下运行良好,没有任何问题。 现在它在带有 OS 5.0(loll
我有一个依赖于 lib 项目的 android 项目。而lib项目在“libs”目录下有“armeabi”和“armeabi-v7a”目录,这两个目录里面都有一个.so文件。而我自己的项目在libs目
如果没有,Application.mk 文件中的 arm 架构还有哪些其他选项? 最佳答案 另外两个选项是 x86 和 mips。我相信这 4 个是唯一的选择。 关于android - `armeab
我为 Android 6 及更高版本创建了一个旧版应用。我需要包含一些为“armeabi”架构构建的 .so 文件。我没有这些共享对象的源代码,所以我无法为其他架构构建它们。 目标设备的架构是“arm
我正在使用 openTok 库进行视频聊天,libopentok.so 文件将被放入“libs”下的“armeabi”文件夹中。我的项目已经有 jni,它在编译后将自己的文件夹(如 armeabi、a
eclipse /Cygwin NDK 8c 构建共享库 切换到 armeabi-v7a 后,我无法再启动 gdbserver。我在网上搜索了几个小时,但找不到专门处理 armeabi-v7a 调试问
我在探索开源时多次看到这个库 (armeabi)。 我在网上搜索了它的解释,但我发现的所有结果都在谈论它而不是定义它。 这个 armeabi 是什么?他们为什么在 Android 应用程序中使用它?
Google 最近通知开发者,应用必须兼容 64 位。 我们必须检查包是否包含 arm64-v8a 和 x86_64 文件夹。 在我的应用程序中,我有 arm64-v8a 文件夹,还有“简单”“arm
我成功地为 Android 编译了 PJSIP 库。当我为默认架构 armeabi 构建时,示例项目可以正常工作。现在我尝试为 arch 编译库,例如 armeabi-v7a 和 arm64-v8a。
我正在使用一些预构建的 android 库,将它们粘贴到我的 jni 文件夹中并将其放入 Android.mk # Add prebuilt libgdx include $(CLEAR_VARS)
我是一名优秀的程序员,十分优秀!