对于我的应用,我想要3类效果:
“BASELINE_CONSTRAINED” - 适用于2012年之前制作的旧设备
“BASELINE” - 2012-2013 ......“现在”......“标准”
“BASELINE_EXTENDED” - 高端设备,前沿。
我在iOS上做过这个没有问题 - 更少的设备争吵,所以我可以通过设备ID专门设置。
但是在Android上有4000多种设备类型,通过“发货日期”找到设备的最佳方法是什么?
思想: - DPI和屏幕尺寸的某种组合? - Android SDK X ......但人们可以升级 - 处理器速度? - build.prop“date”怎么样 - > ro.build.date = 11月17日星期六16:10:21 GMT 2012
提前致谢!
答案 0 :(得分:2)
Facebook has released a better option to my manual "performance class" approach.
It's called Year Class: https://github.com/facebook/device-year-class
Glad to see this issue being solved!
答案 1 :(得分:0)
更新:
虽然我仍然使用下面的方法将设备兼容性降低到只有“更新”和更大的屏幕设备 - 这是我的应用程序所需 - 我最终需要更多控制。
我发现 android硬件平台总是(?)合并到 /system/build.prop 文件中。这是我在测试大约十几个设备时发现的最可靠的属性(每个制造商都决定在那里放置不同的属性,很少有人喜欢报告CPU速度或完整的显卡功能)。
使用硬件平台,我可以可靠地将顶层设备与其余设备分开。
我称之为“表演课”。
Class 1 =我的最低端设备。
Class 2 =我的基线设备(截至目前)
3级=我的最高端设备。
const SD600:Array = ["APQ8064T","APQ8064AB","APQ8064-1AA","APQ8064-DEB","APQ8064-FLO","APQ8064M","8064-AU","8936","8939"];
const SD800:Array = ["8074-AA","8274-AA","8674-AA","8974-AA","8974-AB","8074-AB","8274-AB","8274-AC","8674-AB","8974-AB","8974-AC","APQ8084","MSM8974","MSM8992","MSM8994"];
const TEGRA:Array = ["TEGRA k1"];
这些是直接来自Qualcomm和其他公司的型号 - 幸好只有少数平台供应商。
通过可靠地检测到“Class 3”设备,我可以切换更高级的应用程序功能,如高端透明度混合模式和更高质量的渲染(这是一个视频创建应用程序)。
当然,我可以为我的基线设备打开这些东西。但它会使它们运行得更慢(用户体验较差)并增加与内存相关的崩溃的可能性(几乎是有保证的负面评论)。
我喜欢这个解决方案,因为它随着我的应用而增长。下一代硬件发布时,我只需将型号添加到阵列中并创建“Class 4”。然后我可以实现仅在Class 4设备上运行的功能,并最终将我的基线移动到“Class 3”。
因此,虽然下面的解决方案对于确保只有合格的“足够新”设备才能运行我的应用程序至关重要,但是使用Performance Classes实现了辅助功能特定的调整,基于硬件平台变量,该变量始终存在于android中道具。
-
Google Play有大约5k个设备跟踪。
我设法通过清单中的以下设置将我的“支持”列表降低到大约2500:
<supports-screens
android:smallScreens="false"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:requiresSmallestWidthDp="360"/>
<compatible-screens>
<!-- list the screens you support here -->
<screen android:screenSize="normal" android:screenDensity="hdpi" />
<screen android:screenSize="normal" android:screenDensity="xhdpi" />
<screen android:screenSize="large" android:screenDensity="hdpi" />
<screen android:screenSize="large" android:screenDensity="xhdpi" />
<screen android:screenSize="xlarge" android:screenDensity="hdpi" />
<screen android:screenSize="xlarge" android:screenDensity="xhdpi" />
<screen android:screenSize="normal" android:screenDensity="480"/>
<screen android:screenSize="large" android:screenDensity="480"/>
<screen android:screenSize="xlarge" android:screenDensity="480"/>
</compatible-screens>
我只是展示了有区别的清单部分。例如,minsdk不会影响受支持的设备,因为理论上人们可以升级(实际上,不是那么多)。
但即使有了这些设置,我仍然得到报告说人们在应用程序时遇到问题(以1星评价的形式),所以我找到了一种方法来进一步剔除它到752:
<supports-screens
android:smallScreens="false"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:requiresSmallestWidthDp="360"/>
<compatible-screens>
<!-- list the screens you support here -->
<screen android:screenSize="normal" android:screenDensity="xhdpi" />
<screen android:screenSize="normal" android:screenDensity="480"/>
<screen android:screenSize="large" android:screenDensity="xhdpi" />
<screen android:screenSize="large" android:screenDensity="480"/>
<screen android:screenSize="xlarge" android:screenDensity="xhdpi" />
<screen android:screenSize="xlarge" android:screenDensity="480"/>
</compatible-screens>
<application>
有些设备适合我排除的类别(hdpi)和(小)...但我得出的结论是,大多数设备都处于供电状态。
通过专注于xhdpi,设备是一个更新的设备,因此拥有更快的处理器和更多的内存....因此有更好的机会在2013年以上制造:) :)
注意:在您发布到制作后,Google Play通常不会更新“支持的设备”列表。即使上传到“Beta”部分也不总是更新设备列表,使得清单迭代非常耗时且有问题。请记住,您始终可以回滚一个构建...所以推动生产以检查支持的设备列表并不是那么糟糕。
向Google提出的要求: 您可以排除清单允许的设备 还请提供INCLUDE不在清单上的设备的功能。对于“高端”应用程序,选择集要小得多,并且包含在逐个案例中比排除要容易得多。