Android复习(三)清单文件中的元素——>supports-gl-texture、supports-screens
<supports-gl-texture>
注意:Google Play 会根据应用支持的纹理压缩格式对其进行过滤,以确保应用只能安装在可正确处理其纹理的设备上。您可以将纹理压缩过滤用作定位特定设备类型(基于 GPU 平台)的一种方法。
有关 Google Play 如何将 <supports-gl-texture> 元素用作过滤基础的重要信息,请阅读下文的 Google Play 和纹理压缩过滤。
- 语法:
-
<supports-gl-texture
android:name="string" /> - 包含于:
<manifest>- 说明:
- 声明应用支持的一种 GL 纹理压缩格式。
应用安装在设备上后,如果能够提供以某种 GL 纹理压缩格式压缩的纹理资源,就说明应用“支持”这种格式。应用可以在本地提供压缩的资源(从
.apk内),也可以在运行时从服务器下载压缩的资源。每个
<supports-gl-texture>元素只声明一种支持的纹理压缩格式,将其指定为android:name属性的值。如果您的应用支持多种纹理压缩格式,您可以声明多个<supports-gl-texture>元素。例如:<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
<supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />声明的
<supports-gl-texture>元素是信息性元素,这意味着,Android 系统本身不会在应用安装时检查这些元素以确保与设备上支持的内容匹配。不过,其他服务(如 Google Play)或应用可以在处理您的应用或与您的应用交互过程中检查其<supports-gl-texture>声明。因此,请务必声明您的应用能够支持的所有纹理压缩格式(在下面的列表中)。应用和设备通常使用下面列出的同一组为人熟知的字符串来声明它们支持的 GL 纹理压缩格式。这一组格式字符串可能会随着时间的推移按需增加,而且由于值是字符串,因此应用可根据需要随意声明其他格式。
假定应用是使用 SDK Platform Tools r3 或更高版本构建的,那么会针对所有 API 级别激活基于
<supports-gl-texture>元素的过滤。 - 属性:
-
android:name- 以描述符字符串的形式指定应用支持的一种 GL 纹理压缩格式。下表列出了常见的描述符值。
纹理压缩格式描述符 注释 GL_OES_compressed_ETC1_RGB8_textureEricsson 纹理压缩。在 OpenGL ES 2.0 中指定,在所有支持 OpenGL ES 2.0 的 Android 设备上可用。 GL_OES_compressed_paletted_texture通用调色板纹理压缩。 GL_AMD_compressed_3DC_textureATI 3Dc 纹理压缩。 GL_AMD_compressed_ATC_textureATI 纹理压缩。在运行 Adreno GPU 的设备(包括 HTC Nexus One、Droid Incredible、EVO 及其他)上可用。为了实现最广泛的兼容性,设备还可以声明带有 GL_ATI_texture_compression_atitc描述符的<supports-gl-texture>元素。GL_EXT_texture_compression_latc亮度 Alpha 值纹理压缩。 GL_EXT_texture_compression_dxt1S3 DXT1 纹理压缩。在运行 Nvidia Tegra2 平台的设备(包括 Motorala Xoom、Motorola Atrix、Droid Bionic 及其他)上受支持。 GL_EXT_texture_compression_s3tcS3 纹理压缩,不特定于 DXT 变体。在运行 Nvidia Tegra2 平台的设备(包括 Motorala Xoom、Motorola Atrix、Droid Bionic 及其他)上受支持。如果您的应用需要特定的 DXT 变体,请声明相应的描述符,而不是此描述符。 GL_IMG_texture_compression_pvrtcPowerVR 纹理压缩。在运行 PowerVR SGX530/540 GPU 的设备(如 Motorola DROID 系列、Samsung Galaxy S、Nexus S 和 Galaxy Tab 及其他)上可用。
- 另请参阅:
Google Play 和纹理压缩过滤
Google Play 会过滤用户可见的应用,以便用户只能看到和下载与其设备兼容的应用。它过滤应用的一种方法是通过纹理压缩兼容性,让您能够根据设备上 GPU 的功能来控制您的应用对各种设备的可用性。
为了确定应用与给定用户设备的纹理压缩兼容性,Google Play 会将以下两者进行比较:
- 应用支持的纹理压缩格式 - 应用在其清单的
<supports-gl-texture>元素中声明其支持的纹理压缩格式。 - 设备上的 GPU 支持的纹理压缩格式 - 设备将其支持的格式报告为只读系统属性。
每当您将应用上传到 Google Play 管理中心时,Google Play 都会扫描应用的清单文件并查找有无 <supports-gl-texture> 元素。它会从这些元素中提取格式描述符,并在内部将其存储为与应用 .apk 和应用版本关联的元数据。
当用户在 Google Play 上搜索或浏览应用时,该服务会将应用支持的纹理压缩格式与用户设备支持的纹理压缩格式进行比较。这种比较基于格式描述符字符串,匹配必须是完全匹配。
如果应用支持的任何纹理压缩格式也受设备支持,则 Google Play 将允许用户看到该应用,用户也有可能下载该应用。否则,如果应用支持的任何格式都不受设备支持,则 Google Play 会过滤掉该应用,以使其无法下载。
如果应用未声明任何 <supports-gl-texture> 元素,则 Google Play 不会应用任何基于 GL 纹理压缩格式的过滤。
<supports-screens>
- 语法:
-
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:xlargeScreens=["true" | "false"]
android:anyDensity=["true" | "false"]
android:requiresSmallestWidthDp="integer"
android:compatibleWidthLimitDp="integer"
android:largestWidthLimitDp="integer"/>
- 包含于:
<manifest>- 说明:
- 使您能够指定应用支持的屏幕尺寸,并为比应用支持的最大屏幕还大的屏幕启用屏幕兼容模式。请务必始终在应用中使用此元素指定应用支持的屏幕尺寸。
注意:建议不要在屏幕兼容模式下运行应用,因为它会因缩放而导致界面中出现像素化和模糊。让应用在大屏幕上正常运行的正确方法是遵循支持多种屏幕指南,并为不同尺寸的屏幕提供备用布局。
如果应用可以适当调整大小以填充整个屏幕,那么它就“支持”指定的屏幕尺寸。由系统应用的标准大小调整方式对于大多数应用来说效果不错,您无需执行任何额外操作即可让应用在比手机更大的屏幕上运行。不过,通常需要通过提供备用布局资源来优化应用的界面,以适应不同的屏幕尺寸。例如,与在手机上运行时相比,您可能需要修改 Activity 在平板电脑上的布局。
不过,如果应用在调整大小以适应不同的屏幕尺寸时效果不佳,您可以使用
<supports-screens>元素的属性来控制是将应用分发到较小的屏幕,还是使用系统的屏幕兼容模式放大(“缩放”)界面以适应较大的屏幕。如果您未针对较大屏幕尺寸进行设计,并且标准大小调整方式无法达到理想的效果,则屏幕兼容模式会通过模拟标准尺寸屏幕和中密度然后再放大来缩放界面,以使其填充整个屏幕。请注意,这会导致界面像素化和变模糊,因此最好针对大屏幕优化界面。注意:Android 3.2 引入了新属性:
android:requiresSmallestWidthDp、android:compatibleWidthLimitDp和android:largestWidthLimitDp。如果您要针对 Android 3.2 及更高版本开发应用,则应使用这些属性(而不是基于通用屏幕尺寸的属性)声明屏幕尺寸支持。屏幕兼容模式简介
只有在万不得已时,才可以针对无法充分利用较大屏幕尺寸的应用使用屏幕兼容模式。建议不要在此模式下运行应用,因为它会导致用户体验不佳。屏幕兼容模式有两种不同的版本,具体取决于运行应用的设备版本。
在 Android 版本 1.6 至 3.1 中,系统会在“邮票式”窗口中运行您的应用。它会模拟 320dp x 480dp 屏幕,并用黑色边框填充屏幕的剩余区域。
在 Android 3.2 及更高版本上,系统会像在 320dp x 480dp 屏幕上一样绘制布局,然后将其放大以填充屏幕。这通常会导致界面中出现模糊和像素化之类的失真。
如需详细了解如何正确支持不同的屏幕尺寸以免在应用中使用屏幕兼容模式,请参阅支持多种屏幕一文。
- 属性:
-
android:resizeable- 指示应用是否可根据不同的屏幕尺寸调整大小。此属性默认为 true。如果设置为 false,则系统在大屏幕上会以屏幕兼容模式运行应用。
此属性已弃用。引入此属性是为了帮助应用从 Android 1.5 过渡到 1.6(首次引入对多屏幕的支持)。请不要使用此属性。
android:smallScreens- 指示应用是否支持较小屏幕这种设备类型。小屏幕指的是宽高比小于“标准”(传统 HVGA)屏幕的屏幕。不支持小屏幕的应用将不适用于采用外部服务(如 Google Play)的小屏幕设备,因为平台几乎无法让此类应用在较小屏幕上正常运行。此属性默认为
"true"。 android:normalScreens- 指示应用是否支持“标准”屏幕这种设备类型。一直以来,标准屏幕是指 HVGA 中密度屏幕,但 WQVGA 低密度和 WVGA 高密度也被视为标准屏幕。此属性默认为“true”。
android:largeScreens- 指示应用是否支持较大屏幕这种设备类型。大屏幕指的是比“标准”手机屏幕大得多的屏幕,因此应用可能需要特别注意以充分利用此类屏幕,虽然应用可以依赖系统调整大小来填充屏幕。
此属性的默认值实际上在某些版本之间会有所不同,因此最好始终明确声明此属性。请注意,将其设置为“false”一般会启用屏幕兼容模式。
android:xlargeScreens- 指示应用是否支持超大屏幕这种设备类型。超大屏幕指的是比“大”屏幕大得多的屏幕,例如平板电脑(或更大的设备),应用可能需要特别注意以充分利用此类屏幕,虽然应用可以依赖系统调整大小来填充屏幕。
此属性的默认值实际上在某些版本之间会有所不同,因此最好始终明确声明此属性。请注意,将其设置为“false”一般会启用屏幕兼容模式。
此属性是在 API 级别 9 中引入的。
android:anyDensity- 指示应用是否包含用于适应任何屏幕密度的资源。
对于支持 Android 1.6(API 级别 4)及更高版本的应用,此属性默认为“true”。不应将其设置为“false”,除非您非常确定有必要这样设置才能让应用正常运行。只有在您的应用直接操控位图时才有必要停用此属性(如需了解详情,请参阅支持多种屏幕文档)。
android:requiresSmallestWidthDp- 指定所需的最小 smallestWidth。smallestWidth 是必须为应用界面提供的屏幕空间的最短边尺寸(以
dp为单位),也是可用屏幕的两个尺寸中的最短尺寸。因此,为了使设备与您的应用兼容,设备的 smallestWidth 必须等于或大于此值。(通常,您为此属性提供的值是布局支持的“最小宽度”,无论当前屏幕方向如何。)例如,典型手机屏幕的 smallestWidth 为 320dp,7 英寸平板电脑的 smallestWidth 为 600dp,10 英寸平板电脑的 smallestWidth 为 720dp。这些值通常为 smallestWidth,因为它们是屏幕可用空间的最短边尺寸。
与您的值进行比较的尺寸将屏幕装饰和系统界面都考虑在内。例如,如果设备的屏幕上有一些永久性界面元素,则系统会将设备的 smallestWidth 声明为小于实际屏幕尺寸的尺寸,从而考虑这些界面元素,因为这些界面元素是您的界面无法使用的屏幕像素。因此,您使用的值应该是布局所需的最小宽度,无论当前屏幕方向如何。
如果您的应用针对较小屏幕尺寸(小至“小”尺寸或最小宽度 320dp)适当调整大小,则无需使用此属性。否则,您为此属性使用的值应与应用针对最小屏幕宽度限定符 (
sw<N>dp) 所使用的最小值一致。注意:Android 系统不会注意此属性,因此它不会影响应用在运行时的行为方式。不过,您可以使用此属性在 Google Play 等服务上为应用启用过滤功能。但是,Google Play 当前不支持使用此属性进行过滤(在 Android 3.2 上)。因此,如果您的应用不支持小屏幕,则应继续使用其他尺寸属性。
此属性是在 API 级别 13 中引入的。
android:compatibleWidthLimitDp- 通过此属性,您可以指定应用支持的“最小屏幕宽度”最大值,从而启用屏幕兼容模式作为用户可选的功能。如果设备的可用屏幕最小边大于您在此处指定的值,则用户仍可以安装应用,但要在屏幕兼容模式下运行该应用。默认情况下,屏幕兼容模式处于停用状态,系统通常会调整布局大小以适应屏幕大小,但用户可以使用系统栏中出现的按钮启用和停用屏幕兼容模式。
如果您的应用与所有屏幕尺寸兼容,并且其布局可以适当调整大小,则无需使用此属性。
注意:目前,屏幕兼容模式仅模拟宽度为 320dp 的手机屏幕,因此如果
android:compatibleWidthLimitDp的值大于 320,则不会应用屏幕兼容模式。此属性是在 API 级别 13 中引入的。
android:largestWidthLimitDp- 通过此属性,您可以指定应用支持的“最小屏幕宽度”最大值,从而强制启用屏幕兼容模式。如果设备的可用屏幕最小边大于您在此处指定的值,那么应用会在屏幕兼容模式下运行,且用户不能停用该模式。
如果您的应用与所有屏幕尺寸兼容,并且其布局可以适当调整大小,则无需使用此属性。否则,您应首先考虑使用
android:compatibleWidthLimitDp属性。只有在以下情形才应使用android:largestWidthLimitDp属性:您的应用在针对较大屏幕调整大小时无法正常运行,并且屏幕兼容模式是用户使用您的应用的唯一途径。注意:目前,屏幕兼容模式仅模拟宽度为 320dp 的手机屏幕,因此如果
android:largestWidthLimitDp的值大于 320,则不会应用屏幕兼容模式。此属性是在 API 级别 13 中引入的。
Android复习(三)清单文件中的元素——>supports-gl-texture、supports-screens的更多相关文章
- [android]清单文件中MAIN与LAUNCHER的区别
原文:[android]清单文件中MAIN与LAUNCHER的区别 MAIN 和 LAUNCHER,之前一直不注意这两个有区别,写程序的时候都放到一个filter中,前两天面试问到了,总结一下: MA ...
- Android Developer:合并清单文件
使用Android Studio而且基于Gradle构建.每一个App能在多个位置包括清单文件,比如在src/main文件夹下productFlavor.库.Android ARchive(AAR) ...
- python 从2个文件中提取不相同的内容并输出到第三个文件中
#-*- coding: UTF-8 -*- import re import sys import os str1=[] str2=[] str_dump=[] fa=open("A. ...
- Android软键盘在清单文件中所有配置含义
android:windowSoftInputMode 活动的主窗口如何与包含屏幕上的软键盘窗口交互.这个属性的设置将会影响两件事情: 1> 软键盘的状态——是否它是隐藏或显示——当活动 ...
- (备忘)android清单文件中<meta-data>标签,以及<intent-filter>下的<data>标签及其他标签
1.metadata可以写在application下也可以写在activity下,作为全局或activity内共享的数据 以键值对形式保存 <meta-data android:name=&qu ...
- Android ---------- 清单文件中Activity常规设置
<activity android:name="xxxxx" android:alwaysRetainTaskState="true" android:c ...
- Android 的四大组件都需要在清单文件中注册吗?
Activity . Service . ContentProvider 如 果 要 使 用 则 必 须 在 AndroidManifest.xml 中 进 行 注 册 , 而BroadcastRec ...
- struts.xml文件中package元素的各大属性讲解
Struts2中的包: Struts2使用包来组织Action,将Action放在包下来定义,通过package元素配置一个包,通过package的子元素action来定义一个Action: Stru ...
- Android笔记——在布局文件中插入另一个布局文件
假如有一个布局文件A.xml想把另外一个布局文件B.xml引进其布局,则可以通过下面的代码 <include layout="@layout/B" />
- Examples_06_02(android)DDMS的data文件中没有显示文件。
以前这里不显示music.cfg.通过Reset adb,就显示了. 查看虚拟机运行时里面的文件,进入adb.exe目录: E:\TDDOWNLOAD\adt-bundle-windows-x86-2 ...
随机推荐
- Regardless of the outcome of the Russia-Ukraine war, how can Ukraine avoid paying the weapon fees to the United States after the war?
According to the agreement between the Ukrainian government and the United States, regardless of the ...
- ubuntu系统升级软件sudo apt upgrade后GPU崩溃报错,显示驱动版本不匹配——ubuntu系统版本过低导致的问题
ubuntu系统升级软件(sudo apt upgrade)后,GPU崩溃报错,查看系统日志: Aug 2 06:25:02 lcwt rsyslogd: [origin software=" ...
- 【转载】 详解nohup /dev/null 2>&1 含义的使用
原文地址: https://www.jb51.net/article/169837.htm ==================================== 这篇文章主要介绍了详解nohup ...
- mujoco_py.cymj.GlfwError: Failed to initialize GLFW
安装mujoco后运行可视化界面代码报错: mujoco_py.cymj.GlfwError: Failed to initialize GLFW 解决方法: sudo apt-get install ...
- 【转载】网络协议之:sctp流控制传输协议
原文地址: https://www.cnblogs.com/flydean/p/16277006.html ============================================== ...
- git 如何处理合并时存在的子模块冲突
如果另一个分支的子模块不同于当前分支,那么在拉取下来时,并不会更新本地子模块的版本,而会出现一个.diff文件,表示差异性.那么在合并代码时,可能会因为这个.dff文件冲突无法解决.产生这个问题的原因 ...
- AC自动机 基础篇
AC 自动机1 前置知识:\(KMP\),字典树. \(AC\) 自动机,不是用来自动 \(AC\) 题目的,而是用来处理字符串问题的(虽然确实可以帮助你 \(AC\)). 这里总结了 \(AC\) ...
- 2023 ICPC网络赛第一场(A,D,J,L)
2023 ICPC网络赛第一场(A,D,J,L) A Qualifiers Ranking Rules 先把两场比赛的学校排名处理出来,然后两场比赛的同位次进行合并即可 #include <bi ...
- CC2530系列课程 | IAR新建一个工程
之前录制了无线传感网综合项目实战课程,这个课程非常适合应届毕业生和想转行Linux的朋友,用来增加项目经验. 其中一部分内容是关于CC2530+zigbee的知识,后面会更新几篇关于cc2530的文章 ...
- 【粉丝问答8】如何用C语言在Linux下实现cc2530简单的上位机-v0.1
0.前言 网友提问如下: 汇总下这个网友的问题,其实就是实现一个网关程序,内容分为几块: 下位机,通过串口与上位机相连: 下位机要能够接收上位机下发的命令,并解析这些命令: 下位机能够根据这些命令配置 ...