使用 Android APK 2.2 打开硬件加速(如 Android 3+)

Posted

技术标签:

【中文标题】使用 Android APK 2.2 打开硬件加速(如 Android 3+)【英文标题】:Turn on hardware acceleration if available (such Android 3+) with Android APK 2.2 【发布时间】:2012-05-07 12:45:21 【问题描述】:

我为android 3.0开发了一个应用程序,运行良好,但是客户端坚持要兼容2.2设备。

禁用硬件加速,使用 Android Compatibility Package、NIO-backport 支持(用于任务和执行程序)和 View 方法的一些重新实现我能够将我的应用程序移植到 Android 2.2 并且效果非常好,但是如果我运行这个 apk进入较新的设备时性能非常缓慢,所以我想知道如何打开硬件加速(如果可用)但仍使用我的 2.2 APK。

【问题讨论】:

【参考方案1】:

android:hardwareAccelerated="true" 添加到您的清单中,对于<activity><application>

此属性在旧版本的 Android 上将被忽略,但在 Android 3.0+ 上会受到尊重。

这将要求您将构建目标设置为 API 级别 11 或更高,但您可能已经有了。

【讨论】:

构建目标是 8,因此它可以在 Android 2.2 设备上运行。只需添加 android:hardwareAccelerated="true" 和 minSdk=8 就会出错。 @MarcosVasconcelos:构建目标与它可以运行的设备没有任何关系。 没错,它的点是哪个构建目标并不重要,因为 minSdkVersion 受到尊重。 所以如果您将 API 级别设置为 11 或更高,并设置 minSdk=8 并发布您的应用,那么它是否可供 android 2.2 用户使用? 虽然问题并不重要,但我想知道您将如何抑制 XML 的警告?【参考方案2】:

如果您需要旧操作系统(2.3.X 和更早版本)的支持设计,请不要将 android:hardwareAccelerated="true" 添加到您的清单中,请尝试在您的 java 中添加此代码:

try  if( Build.VERSION.SDK_INT >= 11) getWindow().setFlags( 16777216, 16777216);  catch( Exception e)  // FLAG_HARDWARE_ACCELERATED == 16777216 (0x01000000)

这在 OS 3.0++ 中有效,不会在 2.3.X 及更早版本上调用错误。

【讨论】:

【参考方案3】:

您可以查看here,了解如何启用基于 Android 版本的功能。你也可以通过反射来做到这一点,但它很笨重。

【讨论】:

嗯,这帮助我运行每个版本的特定代码。谢谢!

以上是关于使用 Android APK 2.2 打开硬件加速(如 Android 3+)的主要内容,如果未能解决你的问题,请参考以下文章

无法压缩 apk android android studio 2.2

Android ffmpeg 和硬件加速

如何在 Android 上使用硬件加速视频解码?

使用 lockCanvas() 的 Android TextureView 硬件加速

开启硬件加速的 Android 页面转换缓慢

Android Studio 2.2 更新:未使用新的 Gradle 插件 2.2.0 生成对齐的 APK (zipAlign)