在2012年之前检测Android设备的最佳方法是什么?

时间:2014-02-04 23:08:59

标签: android manifest feature-detection

对于我的应用,我想要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

提前致谢!

2 个答案:

答案 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不在清单上的设备的功能。对于“高端”应用程序,选择集要小得多,并且包含在逐个案例中比排除要容易得多。