小米开发平台机型信息获取说明

小米开发平台机型信息获取说明

简介

小米手机机型信息或有相关调整更新,为方便App开发者准确获取相关信息,现提供以下信息供开发者使用。

1、机型名称

新增ro.product.marketname属性,值为手机设备名(上市机型名称);

历史已发布手机上设备型号的属性ro.product.model依然有效,以后新发布的机型上不再生效。请开发者及时适配。

接口说明与示例

建议应用优先读取属性ro.product.marketname,如果返回值不为空,这个值就是手机设备型号。如果此属性返回值为空,则读取之前的属性ro.product.model值。

参考代码:

public static String getDeviceName() {
    String deviceName = "";
    try {
        Class SystemProperties = Class.forName("android.os.SystemProperties");
        Method get = SystemProperties.getDeclaredMethod("get", String.class, String.class);
        deviceName = (String) get.invoke(SystemProperties, "ro.product.marketname", "");
        if (TextUtils.isEmpty(deviceName)) {
            deviceName = (String) get.invoke(SystemProperties, "ro.product.model", "");
        }
    } catch (InvocationTargetException | NoSuchMethodException | IllegalAccessException | ClassNotFoundException e) {
        e.printStackTrace();
    }
    return deviceName;
}

2、CPU 型号信息

GKI 2.0 之前,/proc/cpuinfo 中包含 Hardware 相关信息,应用可以从中读取 cpu 型号信息;

GKI 2.0 之后,/proc/cpuinfo 中不再包含 Hardware 相关信息,应用无法从中读取到 cpu 型号信息,需要从 android.os.SystemProperties 中读取 ro.soc.model 属性信息。参考说明:关于 GKI 内核版本说明

CPU 型号获取方法

建议优先从 android.os.SystemProperties 中读取 ro.soc.model 属性信息,若此属性信息为空,则再从 /proc/cpuinfo 中读取 Hardware 信息即可。

小米手机默认桌面应用管理说明

小米手机默认桌面应用管理说明

1. 介绍 

安卓系统中,由于第三方桌面类的应用不稳定,会带来手机系统卡顿、手机功耗大、偷偷下载应用、恶意扣费等问题,给用户带来了很大的使用困扰。

2. 原则

桌面作为系统常用、基础并承担着入口安全责任的重要应用,为保证系统的稳定、完整、一致性,小米方强制禁止三方应用设为默认桌面,只允许使用系统桌面。

小米耳返功能SDK适配说明

1、耳返功能sdk简介

小米手机目前高通平台机型上提供K歌低延时耳返功能 ,用户可以在小米手机上体验震撼的K歌效果,诚邀应用开发者适配,感谢支持!

支持耳返功能的设备

itgsa接口小米12S, 小米12S Pro,小米12S Ultra和其他出厂系统为Android 13版本的高通平台机型
小米接口其他高通平台机型

2、sdk接入方法

2.1 权限说明

需要应用权限配置:

android.permission.MODIFY_AUDIO_SETTINGS

android.permission.RECORD_AUDIO

2.2 API使用说明

1)小米12S, 小米12S Pro,小米12S Ultra和其他出厂系统为Android 13版本的高通平台机型获取MediaClient单例,其他高通平台机型获取KaraokeMediaHelper单例

2)isSupported判断应用是否支持KTV功能使用,小米平台通过应用白名单控制是否支持app使用KTV功能。 若app申请支持KTV功能,请联系我们(gengping@xiaomi.com

3)演唱开始,先打开KTV系统,openKTVDevice

4)设置相关配置:

setMixerSoundType 混响音效类型

setEqualizerType EQ音效类型

setPlayFeedbackParam 耳返开关

setMicVolParam 耳返音量大小

5)再开启播放,最后开启录音 【小米仅支持deep buffer播放方式的KTV效果】

6)演唱结束,先关闭播放、录音

7)再closeKTVDevice 关闭KTV系统

2.3 接口函数列表

  • itgsa结构机型

小米12S、小米12S Pro、小米12S Ultra和其他出厂系统为Android 13版本的高通平台机型

详情请参考 DEMO

接入实例参考 com.example.mediademo

函数名称功能简介
initialize初始化并获取KTV MediaClient单例。
getVersion获取KTV SDK库版本号。
isDeviceSupportKaraoke判断当前机器设备能否支持KTV。
isAppSupportKaraoke应用是否支持KTV。【oppo、vivo返回默认值true,小米手机检测】补充说明:小米平台通过应用白名单控制是否支持app使用KTV功能。 若app申请支持KTV功能,请联系我们(gengping@xiaomi.com),邮件说明应用包名和应用功能简介。
isSupported应用是否支持KTV功能使用,注意此为前三个接口组合判断结果,通常来说三方只使用该接口判断是否支持。
getKaraokeSupportParameters应用获取当前机器支持KTV的JSON参数信息,比如应用设置何种参数(AudioTrack的采样率、flag等,AudioRecord的source等),判断是否可以正常使用KTV功能。
openKTVDevice打开KTV设备,此动作必须是刚发生在播放伴奏前。
closeKTVDevice关闭KTV设备。
setPlayFeedbackParam控制耳返开启/关闭接口,系统默认打开,建议无论怎么app调用都打开调用一次,排除其他app不正确调用的干扰。
getPlayFeedbackParam获取当前耳返开关状态。
setMicVolParam设置人声音量大小。
getMicVolParam获取当前人声音量值。
setMixerSoundType设置混响效果。 ( 0:无、1:KTV、2:剧场、3:音乐厅、4:录音棚 )
setEqualizerType设置EQ均衡器音效。 (0:无、1:标准、2:浑厚、3:清脆、4:明亮)
getExtMixerSoundType扩展混响音效。
getExtEqualizerType扩展EQ均衡器音效。
  • 小米结构机型

详情请参考:KaraokeMediaHelper

接入实例参考 com.miui.media.KaraokeMediaHelper

函数名称功能简介
KaraokeMediaHelper初始化KTV工具类
isDeviceSupportKaraoke判断当前机器设备能否支持KTV。
getKaraokeSupportParameters应用获取当前机器支持KTV的JSON参数信息,比如应用设置何种参数(AudioTrack的采样率、flag等,AudioRecord的source等),判断是否可以正常使用KTV功能
isDeviceSupportMixerSound判断当前机器设备能否支持KTV。
openKTVDevice打开KTV设备,此动作必须是刚发生在播放伴奏前 。
closeKTVDevice关闭KTV设备。
isAppSupportKaraoke应用是否支持KTV。【小米手机检测】补充说明:小米平台通过应用白名单控制是否支持app使用KTV功能。 若app申请支持KTV功能,请联系我们(gengping@xiaomi.com),邮件说明应用包名和 0:无、1:KTV、2:剧场应用功能简介。
setMixerSoundType设置混响效果。( 0:无、1:KTV、2:剧场、3:音乐厅)
setPlayFeedbackParam控制耳返开启/关闭接口,系统默认打开,建议无论怎么app调用都打开调用一次,排除其他app不正确调用的干扰。
setMicVolParam设置人声音量大小。
getPlayFeedbackParam获取当前耳返开关状态。
getMicVolParam获取当前人声音量值。
setEqualizerType设置EQ均衡器音效。(0:无、1:标准、2:浑厚)
getExtMixerSoundType扩展混响音效。
getExtEqualizerType扩展EQ均衡器音效。

小米开发平台MiHaptic适配说明

小米开发平台MiHaptic适配说明

1.MiHaptic简介

MiHaptic是一套振动波形的生成框架,可以通过参数或者HE格式为你的线性马达机器定制出丰富的振动效果。

1.1.能力

MiHaptic支持接入不同的触感波形生成算法以驱动手机上的线性马达,目前支持小米自研算法和RichTap。

1.2.场景及案例

  • QQ音乐节奏实验室

QQ音乐节奏实验室4D振感,开启音乐随振,让听歌更有节奏感。

  • 和平精英高品质振动

和平精英高品质振动使用MiHaptic方案对不同枪械、载具、脚步声、玻璃破碎等场景提供拟真的触感反馈。

2.使用入门

2.1.开发环境

  • 安卓Studio 4.0 以上

2.2.开发准备

2.2.1.集成MiHaptic SDK

  • miui.os

DynamicEffect_0807_2

提供组合PrimitiveEffect的方式。

  • android.os

DynamicEffect_0128

提供HE文件振动方式。

2.2.2.增加振动权限

2.2.3.使用 MiHaptic SDK文档 中的接口。

DynamicEffect_ZH.docx

2.3.使用MiHaptic

  • 组合PrimitiveEffect的方式

DynamicEffect可组合Transient和Continuous类型的效果,如下图所示

DynamicEffect 数据结构实际上是对一组参数的描述,一个DynamicEffect由若干个PrimitiveEffect和若干Parameter所组成。

PrimitiveEffect 分为两种,一种是描述瞬时振动的Transient,例如哒哒哒的清脆效果;另一种为Continuous,这种振动效果的特点是持续时间长,例如嗡嗡嗡的效果。

对于每种PrimitiveEffect,有两个重要的参数,intensity和sharpness,分别描述它们的强度与锐度。

Parameter与PrimitiveEffect的两个重要属性对应,用来控制PrimitiveEffect的强度或者锐度。

Parameter 可以添加到整个DynamicEffect里,那么它可以控制所有时间范围内的PrimitiveEffect。

Parameter 也可以添加在Continuous效果中,用来作渐变。

例如,下图所示的是一个由两个Continuous与一个Transient所组合成的效果:

DynamicEffect effect = DynamicEffect.startCompose(); 
 
DynamicEffect.PrimitiveEffect continuous1 = DynamicEffect.createContinuous(0.5, 1.0, 3.0); 
DynamicEffect.Parameter param1 = DynamicEffect.createParameter(DynamicEffect.INTENSITY,  
                                                                  new float[]{0.5, 1, 2} , new float[] {0.6 , 0.3, 0.2); 
continuous1.addParameter(1, param1); 
 
DynamicEffect.PrimitiveEffect transient = DynamicEffect.createTransient(0.8, 1.0); 
 
DynamicEffect.PrimitiveEffect continuous2 = DynamicEffect.createContinuous(0.3, 1.0, 6.0); 
DynamicEffect.Parameter param2 = DynamicEffect.createParameter(DynamicEffect.INTENSITY,  
                                                                  new float[]{1.0, 2.0} , new float[] {0.3, 1.0); 
continuous1.addParameter(2, param2); 
 
effect.addPrimitive(0, continuous1); 
effect.addPrimitive(3.5, transient); 
effect.addPrimitive(4, continuous2); 
 
DynamicEffect.Parameter global = DynamicEffect.createParameter(DynamicEffect.INTENSITY,  
                                                                  new float[]{0, 8.0} , new float[] {0.2, 1.0); 
 
effect.addParameter(2.5); 

HapticPlayer player = new HapticPlayer(effect);
player.start();

上图描述了一个DynamicEffect以及intensity属性的渐变示意图。DynamicEffect中包含了两个Continuous和一个Transient。

生成波形的强度在0时刻的强度为0.5,它是由第一个Continuous创建时所指定的。 在第0.5S时强度为0.6,该变化是由Continuous被自己的Parameter所控制引起。第2.5S时,Continuous的强度渐变到了0.04,该变化由于Global参数对其产生了影响,对于强度而言,global参数与PrimtiveEffect参数的强度作乘积,因此变为0.2*0.2=0.04 。而后该Continuous的Intensity无自身Parameter影响,但由于globalParameter存在,从2.5到第3S改变到0.05。

在第3.5S时开始播放Transient,强度为初始值0.8与当前时刻的global参数0.3相乘为0.24。(global起始时间为2.5S,因此在3.5S时参数的值渐变为0.3)。

第二个Continusou起始时间为第4S,从第4s-第6S强度递增,因为当前依旧属于global参数的作用时间,第4S强度为=0.3*0.35 = 0.105,后面的计算方式同理。

  • 使用HE文件
{
 "Metadata": {
 "Version": 1, // 版本号,整形
 "Created": "2020-07-08", // 创建时间,String类型
 "Description": "game haptic" // 震动效果描述,String类型
 },
 "Pattern": 
 [
 {
 "Event": {
 "Type": "continuous", // 事件类型: continuous->持续震动。transient->简短震动
 "RelativeTime": 0, // 相对开始时间, 整形, 单位ms
 "Duration": 300, // 持续震动类型参数:持续时间。整形, 单位ms
 "Parameters": {
 "Intensity": 80, // 震动强度, 整形, [0,100]。0->平台支持的最小值, 100->平台支持的最大值。
 "Frequency": 50, // 震动频率, 整形, [0,100]。0->平台支持的最小值, 100->平台支持的最大值。
 "Curve": [ // 持续震动类型参数:曲线。实现上保证平滑过渡效果
 {"Time": 0, "Intensity": 0, "Frequency": 25}, // 起始点,必须。time为RelativeTime,Intensity必须取值为0。
 {"Time": 100, "Intensity": 0.7, "Frequency": -30}, 
 {"Time": 200, "Intensity": 0.75, "Frequency": 90},
 {"Time": 300, "Intensity": 0, "Frequency": 50} // 结束点,必须。time为Duration,Intensity必须取值为0。
 ]
 }
 }
 },
 {
 "Event": {
 "Type": "transient", // 事件类型: continuous->持续震动, transient->简短震动
 "RelativeTime": 400, // 相对开始时间, 整形, 单位ms
 "Parameters": {
 "Intensity": 80, // 震动强度, 整形, [0,100]。0->平台支持的最小值, 100->平台支持的最大值。
 "Frequency": 40 // 震动频率, 整形, [0,100]。0->平台支持的最小值, 100->平台支持的最大值。
 }
 }
 }
 ]
}

HE文件描述如上面的JSON格式所示,可以将描述文件放在项目中,使用DynamicEffect.create(string)接口创建效果。

InputStream is = getResources().openRawResource(R.raw.demo_he);
try {
    int size = is.available();
    byte[] buffer = new byte[size];
    is.read(buffer);
    is.close();
    str = new String(buffer);
} catch (Exception e){}
effect = DynamicEffect.create(str);
player = new HapticPlayer(effect);
player.start();

注:使用HE文件创建出的DynamicEffect不可再用于添加PrimitiveEffect,HE文件当前仅支持16个以内的event。

小米开发平台MIUI无极音量适配说明

小米开发平台MIUI无极音量适配说明

1.MIUI无极音量综述

MIUI为了提升用户的音频体验,将媒体音音量范围从[0,15]修改为[0,150]。用户在滑动音量条时,每一次轻微的滑动都能改变音量,细微的音量调节让用户能找到更加合适的音频响度。

2.App适配建议

2.1.若App无调节音量功能或不拦截音量上下按键,此时无需单独适配

2.2.若App通过onTouchEvent等接口拦截volume up或down事件

  • 拦截事件后,做其他的事件处理,例如按键拍照等,此时App无需单独适配;
  • 拦截事件后,通过AudioManager的adjustSuggestedStreamVolume接口调节音量,此时MIUI 系统会内部计算每次按键应该调节多少index,此时App无需单独适配;
  • 拦截事件后,通过AudioManager的setStreamVolume接口,此时接口要传递具体的index值,此时App需适配。

App应内部自己定义步长step,进而算出index。

若支持无极音量step = 10,若不支持step = 1;原因是为了兼容不支持无极音量的机型,统一定义:按键15次将音量调满。

统一计算公式  step = MaxVolume /15;

MaxVolume = AudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)。

总结:简单来说,应用App如果有自己的音量调节逻辑,应该内部定义步长step。通过以上方式可兼容任意机型。       

3.未适配的应用具体表现

  • 具体表现为:按键150次,才能调满音量,调节缓慢。

4.联系我们

MIUI 期待您的适配,若有任何问题,请及时与我们沟通:liuxiaoyu7@xiaomi.com。

小米开放平台双WiFi适配说明

小米开放平台双WiFi适配说明

1.双WIFI简介

双WiFi顾名思义提供了手机同时连接两个WiFi同时上网的能力,一般手机只能同时连接AP的一个WiFi频段获取 WiFi信号,而支持双WiFi技术的手机可以同时连接AP的两个频段(2.4Ghz或5GHz)获取WiFi信号(可以连接一个AP的两个频段,也可以连接两个AP的不同频段)。

1.1双WIFI的优点

  • 提升网络稳定性:如果一路链路因为无线参数波动出现网络波动,可以通过另一链路及时将数据包发送出去;
  • 提升网络速度:双WiFi提供了两条链路同时加载数据的能力,提升网络速度。

1.2目前小米支持双WiFi的已发布机型

小米10、小米10 Pro、Redmi K30 5G、Redmi K30 Pro。

1.3如何进入双WIFI UI操作界面

双WiFi UI操作界面可从手机如下操作路径:“设置->WLAN->WLAN助理->双WLAN加速”进入。该界面称为副WiFi界面,副WiFi界面的打开和连接与主WiFi除了频段差异外并无区别(当主WiFi连接5Ghz时,副WiFi只能连接2.4Ghz,反之主WiFi连接2.4Ghz的时候,副WiFi只能连接5Ghz)。如下图所示:

2.双WIFI接入

2.1双WIFI接入需求

  • 判断当前机型是否支持双WiFi;
  • 判断当前双WiFi是否已连接;
  • 若未连接,作双WiFi的连接引导;
  • 接入双WiFi 网络;
  • 副WiFi相关的api。

2.2判断当前机型是否支持双WiFi

private boolean supportDualWifi(Context context) {
    String cloudvalue = Settings.System.getString(context.getContentResolver(), "cloud_slave_wifi_support");
    if ("off".equals(cloudvalue)) {
        return false;
    }
    boolean support;
    try {
        support = context.getResources().getBoolean(
                context.getResources().getIdentifier("config_slave_wifi_support", "bool", "android.miui"));
    } catch (Exception exception) {
        return false;
    }
    return support;
}

2.3判断当前双WIFI是否已连接

WiFi的api都属于系统api,有严格的权限校验,第三方应用无法直接调用。miui提供了workround判断方法,当副WiFi连接上了之后,如下参数会设置为对应的副WiFi的ssid,断开时则会清空,可依此判断当前副WiFi是否已连接。

 private boolean isSlaveWifiConnected(Context context) {
        String slaveWifiSsid =  getDualWifiSsid(context);
        if (slaveWifiSsid == null || slaveWifiSsid.isEmpty()){
            return false;
        } else {
            return true;
        }
    }


    private String getDualWifiSsid(Context context){
        return Settings.System.getString(context.getContentResolver(), "slave_wifi_ssid");
    }

2.4 若副WiFi未连接,则引导用户至副WiFi界面进行连接

判断当前副WiFi是否已连接,若未连接跳转到系统副WiFi界面引导用户连接,返回到当前界面则再次校验,校验成功后进行副WiFi网络操作。

 if (!isSlaveWifiConnected(getApplicationContext())){
            //TODO Provide Dual Wifi Ui guidance and reCheck
            Intent intent = new Intent("android.settings.DUAL_WIFI.WIFI_SETTINGS");
            startActivity(intent);
            return;
        }

2.5接入双WiFi网络part 1/4

反射获取副WiFi的transport

private int getSlaveTransportType() {
        int slaveTransportType = -1;
        try {
            Class networkCapabilitiesClass = Class.forName("android.net.NetworkCapabilities");
            Field field = networkCapabilitiesClass.getField("TRANSPORT_SLAVE_WIFI");
            slaveTransportType = (int) field.get(null);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return slaveTransportType;
    }

2.6接入双WiFi网络part 2/4

初始化副WiFi对应的NetworkRequest

 int slaveTransportType = getSlaveTransportType();
        if (slaveTransportType < 0) {
            return;
        }
        NetworkRequest nr = getNetworkRequestForType(slaveTransportType);


    private NetworkRequest getNetworkRequestForType(int type) {
        return new NetworkRequest.Builder()
                .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                .addTransportType(type).build();
    }

2.7接入双WiFi网络part 3/4

初始化副WiFi所需的NetworkCallback

SlaveCallback slaveNetworkCallback = new SlaveCallback();
    private class SlaveCallback extends ConnectivityManager.NetworkCallback {
        @Override
        public void onAvailable(Network network) {
            Log.d(TAG, "Network available: " + network.toString());
            Socket skS;
            try {
                InetAddress[] inetAddress = network.getAllByName("www.mi.com");
                skS = network.getSocketFactory().createSocket("www.mi.com", 80);
            } catch (IOException e) {
                e.printStackTrace();
                return;
            }
            Log.d(TAG, "skS = " + skS.toString());
        }
    }

2.8接入双WiFi网络part 4/4

请求副WiFi网络

ConnectivityManager cm = (ConnectivityManager) getApplicationContext().
        getSystemService(Context.CONNECTIVITY_SERVICE);
cm.requestNetwork(nr, slaveNetworkCallback);

PS: manifest 添加 permission
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

2.9 api补充

副WiFi提供的api汇总,详见“小米双wifi接口列表v1.0”

3.补充说明

3.1系统支持

当打开“双WLAN加速”并且辅助WLAN连接时,系统可以自动分配连接到不同的WiFi链路。 应用开发者可以跟小米确认开发的APP是否已经被支持。 当前已支持 :

  • 直播类:斗鱼,虎牙、企鹅电竞、抖音、快手、微视;           
  • 购物类:淘宝、天猫、京东、毒、唯品会、苏宁易购、阿里巴巴、有品、小米商城、拼多多、河马生鲜、 PP视频、咸鱼 ;        
  • 视频类:优酷、腾讯视频、哔哩哔哩、爱奇艺、影视大全、西瓜视频、芒果Tv,人人视频、搜狐视频、 电视家;       
  • 浏览器:UC浏览器、QQ浏览器、百度浏览器、搜狗、猎豹,搜狗搜索;        
  • 音乐类:网易云音乐、酷我、央视影音、咪咕音乐、酷狗、qq音乐 ;      
  • 休闲app、大准点评、知乎、最右、虎扑;      
  • 新闻类:今日头条、腾讯新闻、一点资讯、想看、新浪新闻;  
  • 其他:迅雷、58、汽车之家、懂车帝、乐视视频、链家、瓜子二手车、安居客。 

3.2应用适配 

推荐开发者参照本接入指南中的“双WiFi接入”章节和附带的demo对双WiFi进行应用的适配。双WiFi连接的情况下,系统可以在两个网卡之间对socket进行分配,对于多socket的情况,是有加速效果的。   但是这种有一个弊端,系统不知道APP的socket想被放到哪个网卡,是随机控制的,所以就可能出现跨运营商访问的情况。而应用自己做适配,应用可以自己控制数据传输到自己想传输的网卡上,这样就可以避免跨运营商访问的情况,更好地达到提升网络稳定性和数据加载速度的目的。

4.附件

小米商店 MIUI 10 桌面图标上传规范

小米商店 MIUI 10 桌面图标上传规范

1. 背景

自 MIUI 10 开始,小米手机桌面默认图标将升级为全新的样式,图标更精致,圆角更小。

2. 规范

小米手机桌面是直接读取应用包内图标的,但为了保证桌面图标的视觉统一,系统会对图标作一定的截剪缩放,针对「方形」和「非方形」图标,我们有不同的处理规则,详情请见附录一和附录二。希望开发者按以下要求自查或优化现有的包内图标:

  1. 方形图标请保证是直角,且周围无透明像素。由于 MIUI 10 默认桌面图标的圆角很小,请开发者避免上传大圆角的图标。
  2. 提供更大尺寸的图标,防止图标模糊,具体建议尺寸如下:
  • xhdpi:≥ 94px
  • x​xhdpi:≥ 130px

桌面图标是用户对应用的第一印象,希望各位能够保证应用在小米手机上呈现最好的视觉效果。感谢各位开发者的支持与配合,谢谢!

3. 附录

附录一:方形图标的缩放/裁剪规则

附录二:非方形图标的缩放规则

小米手机&平板设备规格

本文档描述了小米手机各个型号及小米平板的软硬件规格

表1:小米手机4、小米手机3联通&电信版、红米手机1S 3G&4G移动版、红米手机1S 3G联通版&电信版

项目小米手机4小米手机3联通&电信版红米手机1S 3G&4G移动版红米手机1S 3G联通版&电信版
屏幕尺寸5.0英寸5.0英寸4.7英寸4.7英寸
系统识别屏幕尺寸NORMALNORMALNORMALNORMAL
屏幕分辨率1920 * 10801920 * 10801280 * 7201280 * 720
像素密度xxhdpixxhdpixhdpixhdpi
CPU骁龙™ 8X74AC 801 四核高通骁龙 800 8274AB 四核MTK MT6582四核(联)高通骁龙400 MSM8228(电)高通骁龙400 MSM8628
GPUAdreno 330Adreno 330Mali-400Adreno 305
内存3072MB2048MB1024MB1024MB
WiFi802.11 a/b/g/n/acWIFI Display WIFI Direct 5GHzWiFi 802.11b/g/n802.11b/g/n
蓝牙BT4.0 + HIDBT4.0 + HIDBT4.0LE +BT3.0HSBT4.0 + HID
定位服务GPS + GLONASS +AGPS+北斗GPS+GLONASS AGPSGPS + AGPSGPS AGPS+GLONASS
系统版本Android 4.4+Android 4.2.1+Android 4.2+Android 4.3+
系统存储16G/64G16G/64G8G8G
外置存储Micro SDMicro SD
后置摄像头
前置摄像头
触摸屏10点触摸10点触摸10点触摸10点触摸
android.os.Build. MANUFACTURERXiaomiXiaomiXiaomiXiaomi
android.os.Build. MODELMI 4WMI 3W&MI 3CHM 1STD HM2014501HM 1SC HM 1SW
陀螺仪支持支持支持支持
距离感应器支持支持支持支持
光线传感器支持支持支持支持
加速度传感器支持支持支持支持
OTG支持支持支持支持
NFC支持

表2: 小米平板、红米手机Note 3G版、红米Note 4G 增强版

项目小米平板红米手机Note 3G版红米Note 4G 增强版
屏幕尺寸7.9英寸5.5英寸5.5英寸
系统识别屏幕尺寸Extra LargeNORMALNORMAL
屏幕分辨率2048 * 15361280 * 7201280 * 720
像素密度xhdpixhdpixhdpi
CPUNVIDIA Tegra K1 四核MTK MT6592 八核高通骁龙400 MSM8928 四核
GPUNVIDIA KeplerARM Mali-450Adreno 305
内存2048MB2048MB1024MB
WiFiWiFi Display/WiFi Direct802.11b/g/n802.11 a/b/g/n/ac
蓝牙BT4.0BT3.0HS+BT4.0(移) BT4.0LE +BT3.0HS(联)BT4.0LE
定位服务不支持GPS定位GPS+AGPSGPS+AGPS +GLONASS +北斗定位
系统版本Android 4.4+Android4.2+Android4.4+
系统存储16G/64G8G8G
外置存储
前置摄像头
后置摄像头
触摸屏10点触摸10点触摸10点触摸
android.os.Build. MANUFACTURERXiaomiXiaomiXiaomi
android.os.Build. MODELMI PADHM NOTE 1LTETD /HM NOTE 1LTEWHM NOTE 1LTETD
陀螺仪支持支持支持
光线传感器支持支持支持
加速度传感器支持支持支持
距离感应器不支持支持支持
OTG支持支持支持
NFC
电子罗盘支持支持支持
气压计不支持支持支持

表3: 小米手机2S、小米手机2A、红米手机、小米手机3 TD版

项目小米手机2S小米手机2A红米手机小米手机3 TD版
屏幕尺寸4.3英寸4.5英寸4.7英寸5.0英寸
系统识别屏幕尺寸NORMALNORMALNORMALNORMAL
屏幕分辨率1280 * 7201280 * 7201280 * 7201920 * 1080
像素密度xhdpixhdpixhdpixxhdpi
CPU高通 骁龙600 1.7G四核高通 骁龙S4 Pro 1.7G双核MTK MT6589T Tagra 4NVIDIA Tegra 4
GPUAdreno 320Adreno 320PowerVR SGX 544MPTagra
内存2048MB1024MB1024MB2048MB
WiFiWIFI Display WIFI DirectWIFI Display WIFI DirectWIFI DirectWIFIDisplay/WIFI Direct
蓝牙BT4.0 + HIDBT4.0 + HIDBT4.0LE +BT3.0HSBT4.0 + HID
定位服务GPS + GLONASS AGPSGPS + GLONASS AGPSGPS + AGPSGPS + GLONASS AGPS
系统版本Android 4.1+Android 4.1+Android 4.2.1+Android 4.2.1+
系统存储16G/32G16G4G16G/64G
外置存储Micro SD
后置摄像头
前置摄像头
触摸屏10点触摸10点触摸10点触摸10点触摸
android.os.Build. MANUFACTURERXiaomiXiaomiXiaomiXiaomi
android.os.Build. MODELMI 2S 或 MI 2SCMI 2A2013022MI 3
陀螺仪支持支持支持支持
距离感应器支持支持支持支持
光线传感器支持支持支持支持
加速度传感器支持支持支持支持
OTG支持支持支持支持
NFC支持支持

表4: 小米手机、小米手机1S、1S青春版、小米手机2

项目小米手机小米手机1S1S青春版小米手机2
屏幕尺寸4.0英寸4.0英寸4.0英寸4.3英寸
系统识别屏幕尺寸NORMALNORMALNORMALNORMAL
屏幕分辨率854 * 480854 * 480854 * 4801280 * 720
像素密度hdpihdpihdpixhdpi
CPU高通 MSM8x60 1.5G双核高通 MSM8260 1.7G双核高通 MSM8260 1.5G双核高通 APQ8064 1.5G四核
GPUAdreno 220Adreno 220Adreno 220Adreno 320
内存1024MB1024MB1024MB2048MB
WiFi
蓝牙BT2.1BT2.1BT2.1BT4.0 + HID
定位服务GPS + AGPSGPS + AGPSGPS + AGPSGPS + GLONASS AGPS
系统版本Android 2.3+Android 2.3+Android 2.3+Android 4.0.3+
系统存储4G4G4G16G/32G
外置存储Micro SDMicro SDMicro SD
后置摄像头
前置摄像头
触摸屏10点触摸10点触摸10点触摸10点触摸
android.os.Build. MANUFACTURERXiaomiXiaomiXiaomiXiaomi
android.os.Build. MODELMI-ONE PlusMI 1S M1 1SCMI 1S M1 1SCMI2
陀螺仪支持支持支持支持
距离感应器支持支持支持支持
光线传感器支持支持支持支持
加速度传感器支持支持支持支持
OTG支持
NFC

文件过滤以及芯片支持的技术文档

小米手机3TD版和小米平板使用的是NVDIA的显卡,apk的supports-gl-texture声明中至少有一个texture是该设备支持的texture。这也是该apk在小米应用商店中不被过滤,可以被现实的前提。 文件过滤以及芯片支持的技术文档 Android的所有应用,都可以通过其中的AndroidManifest.xml文件中的< supports-gl-texture >标签声明该apk文件支持的gl-texture。 同时,设备根据GPU的不同支持的gl-texture也不相同。 小米手机3TD版和小米平板使用的是NVDIA的显卡,apk的supports-gl-texture声明中至少有一个texture是该设备支持的texture。这也是该apk在小米应用商店中不被过滤,可以被现实的前提。

  • 小米平板支持的gl-texture GL_EXT_color_buffer_half_float, GL_EXT_debug_label, GL_EXT_debug_marker, GL_EXT_map_buffer_range, GL_EXT_robustness, GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_s3tc, GL_EXT_texture_format_BGRA8888, GL_EXT_unpack_subimage, GL_KHR_debug, GL_NV_bgr, GL_NV_secure_context, GL_NV_texture_compression_s3tc, GL_OES_EGL_image, GL_OES_EGL_image_external, GL_OES_EGL_sync, GL_OES_compressed_ETC1_RGB8_texture, GL_OES_compressed_paletted_texture, GL_OES_draw_texture, GL_OES_element_index_uint, GL_OES_fbo_render_mipmap, GL_OES_framebuffer_object, GL_OES_matrix_get, GL_OES_packed_depth_stencil, GL_OES_point_size_array, GL_OES_point_sprite, GL_OES_read_format, GL_OES_rgb8_rgba8, GL_OES_stencil8, GL_OES_texture_cube_map, GL_OES_texture_npot, GL_OES_vertex_half_float,
  • 小米手机3 TD版支持的gl-texture GL_EXT_bgra, GL_EXT_debug_label, GL_EXT_debug_marker, GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_s3tc, GL_EXT_texture_format_BGRA8888, GL_EXT_unpack_subimage, GL_NV_texture_npot_2D_mipamap, GL_OES_EGL_image, GL_OES_EGL_image_external, GL_OES_EGL_sync, GL_OES_byte_coordinates, GL_OES_compressed_ETC1_RGB8_texture, GL_OES_compressed_paletted_texture, GL_OES_draw_texture, GL_OES_extended_matrix_palette, GL_OES_fbo_render_mipmap, GL_OES_fixes_point, GL_OES_framebuffer_object, GL_OES_matrix_get, GL_OES_matrix_palette, GL_OES_point_size_array, GL_OES_point_sprite, GL_OER_query_martrix, GL_OES_read_format, GL_OES_rgb8_rgba8, GL_OES_single_precision, GL_OES_stencil8, GL_OES_texture_cube_map, GL_OES_vertex_half_float,