一、SDK下载
https://github.com/MiCode/MiBridge
二、调试权限申请
申请接入调试权限需提供以下信息并发送邮件到 mispeed-help@xiaomi.com。
邮件主题:xx公司申请接入小米应用加速器调试权限
正文:
应用简介:(必填)
xxxxxxxxxxxxxxxxxxx
调试信息(必填)
应用包名 | 公司名称 | 申请人 | 手机型号 | MIUI | VAID号 |
com.mi | XX | 张三 | Redmi K20 | MIUI 11 20.3.5 | ec8ec830b8e8031c |
预期接入功能(选填):
1. 在xx界面进行提频
2. 接入智能刷新率
米方将会回复您一个鉴权码,供前期接入SDK调试使用。
备注:什么是VAID,如何获得VAID号?
VAID是MAS移动安全联盟统一的开发者匿名设备标识符,请参考 http://msa-alliance.cn/col.jsp?id=120 ,也可参考示例代码(TestMiBridge)中的Testing getVAID.
三、接入方式
1. 手动下载Jar包
2.使用maven在线依赖
打开Android Studio项目级“build.gradle”文件。在“allprojects > repositories”中配置小米应用加速器的Maven仓地址。
allprojects {
repositories {
google()
jcenter()
maven {
url "https://repos.xiaomi.com/maven"
credentials {
username 'mi-bridge'
password 'AKCp8nH4XbDQshne9w5PgaLroZ7kozqtAPo6Kw6pfZLBWzPEtAJoFzU73RHryxXkmcL5biUL2'
}
}
}
}
打开应用级的“build.gradle”文件。
dependencies { ... //1.0.5是mibridge的版本号,后续升级也要修改对应版本号。 implementation "com.xiaomi.mibridge:mibridge:1.0.5" ... }
四、接口定义
1、权限检查接口
①boolean checkDebugPermission(Context context, String pkg, int uid, String auth_key)
介绍:通过申请获得的鉴权码,检查应用是否有调试权限。
参数:
context: 应用上下文
pkg: 应用包名
uid: android.os.Process.myUid()
auth_key: 上一步中申请获得的鉴权码
返回结果:
true: 权限检查通过
false: 权限检查失败,无接口使用权限
②boolean checkPermission(String pkg, int uid)
介绍:检查应用是否有正式权限,正式权限的申请参考“五、正式权限申请“,
获得正式权限后,使用此接口检查权限,无需使用上一个接口的鉴权码。
参数:
pkg: 应用包名
uid: android.os.Process.myUid()
返回结果:
true: 权限检查通过
false: 权限检查失败,无接口使用权限
2、系统资源申请接口
① int requestCpuHighFreq(int uid, int level, int timeoutms)
介绍:向系统申请cpu频率资源的接口
参数:
uid: android.os.Process.myUid()
level: 需要的cpu频率level,系统将会根据不同机型设置不同的cpu频率
timeoutms: 申请cpu资源的持续时间(单位:ms)
Level级别 | 解释 | timeouts |
1 | Level 1 将会设置系统当前最小频率为系统最高频率 | <=10 000ms |
2 | Level 2 将会设置系统当前最小频率为系统较高频率 | <=5 000ms |
3 | Level 3 将会设置系统当前最小频率为系统正常频率以上 | <=1 500ms |
注意:请谨慎使用Level 1级别。Level 1级别使用场景数量限制为5,
Level 2级别使用场景数量限制为20,Level 3 不做限制。
返回结果:
-0: Success
-1: Fail
-2: Permission not granted!
② int cancelCpuHighFreq(int uid)
介绍:取消申请的cpu频率资源
参数:
uid: android.os.Process.myUid()
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
③int requestThreadPriority(int uid , int req_tid, int timeoutms)
介绍:申请线程获得高优先级,将会优先得到调度运行。
参数:
1)uid: android.os.Process.myUid()
2)req_tid: 申请的线程id
3)timeoutms: 申请的时长(单位:ms)
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
④int cancelThreadPriority (int uid , int req_tid)
介绍:取消申请的线程优先级
参数:
uid: android.os.Process.myUid()
req_tid: 取消的线程id
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
⑤int requestGpuHighFreq(int uid, int level, int timeoutms)
介绍:向系统申请gpu频率资源的接口
参数: uid : android.os.Process.myUid()
level : 需要的gpu频率level,系统将会根据不同机型设置不同的gpu频率
timeoutms : 申请gpu资源的持续时间 (单位:ms)
Level级别 | 解释 | timeouts |
1 | Level 1 将会设置系统当前最小频率为系统最高频率 | <=10 000ms |
2 | Level 2 将会设置系统当前最小频率为系统较高频率 | <=5 000ms |
3 | Level 3 将会设置系统当前最小频率为系统正常频率以上 | <=1 500ms |
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
⑥int cancelGpuHighFreq(int uid)
介绍:取消申请gpu频率资源的接口
参数: uid : android.os.Process.myUid()
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
⑦int requestDdrHighFreq(int uid, int level, int timeoutms)
介绍:向系统申请ddr频率资源的接口
参数: uid : android.os.Process.myUid()
level : 需要的ddr频率level,系统将会根据不同机型设置不同的ddr频率
timeoutms : 申请ddr资源的持续时间 (单位:ms)
Level级别 | 解释 | timeouts |
1 | Level 1 将会设置系统当前最小频率为系统最高频率 | <=10 000ms |
2 | Level 2 将会设置系统当前最小频率为系统较高频率 | <=5 000ms |
3 | Level 3 将会设置系统当前最小频率为系统正常频率以上 | <=1 500ms |
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
⑧int cancelDdrHighFreq(int uid)
介绍:取消申请ddr频率资源的接口
参数: uid : android.os.Process.myUid()
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
⑨int requestIOPrefetch(int uid, String filePath)
介绍:申请IO预读取接口
参数:
uid : android.os.Process.myUid()
filePath : 预读取的文件路径
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
⑩int requestBindCore(int uid, int[] tids, int level, int timeoutms)
介绍:申请线程绑核运行接口
参数:
uid : android.os.Process.myUid()
tids : 申请的线程id
level : 需要的线程优先大核运行level
Level级别 | 解释 |
1 | Level 1 将线程绑定小核运行 |
2 | Level 2 将线程绑定大核运行 |
4 | Level 4 将线程绑定超大核运行 |
timeoutms : 申请绑核的持续时间 (单位:ms)
返回结果:
reqId(一个大于等于0的整数): 申请成功得到的申请id
-1: Fail
-2: Permission not granted!
⑪int cancelBindCore(int uid, int reqId)
介绍:取消申请绑核资源的接口
参数:
uid : android.os.Process.myUid()
reqId: 申请线程绑核运行接口成功时得到的申请id
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
3、智能帧率调节接口
①public int setScene( int uid,String pkgName,int sceneId)
介绍:设置目标场景接口,以调节帧率
参数:依次为调用者的 uid 包名 场景参数值
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
②谷歌官方接口文档:https://developer.android.google.cn/guide/topics/media/frame-rate
4、机型等级判定接口
引入import com.mi.mibridge.DeviceLevel
①int getDeviceLevel(int version)
介绍:根据RAM/CPU/GPU的不同标准,获取当前设备的机型细分等级,从而决定调用系统资源接口的level
参数:
version : 机型等级定义的版本,目前为1
返回结果:
- DeviceLevel.LOW:入门机
- DeviceLevel.MIDDLE:中端机
- DeviceLevel.HIGH:高端机
- DeviceLevel.UNKNOWN:未知类型
②int getDeviceLevel(int version, int type)
介绍:根据CPU/GPU的不同标准,获取当前设备的机型细分等级,从而决定调用系统资源接口的level
参数:
version : 机型等级定义的版本,目前为1
type : 表示机型细分等级的类型,目前有2类:
- DeviceLevel.CPU
- DeviceLevel.GPU
返回结果:
- DeviceLevel.LOW:入门机
- DeviceLevel.MIDDLE:中端机
- DeviceLevel.HIGH:高端机
- DeviceLevel.UNKNOWN:未知类型
5、系统状态接口
①int getSystemState(int uid, Context context, int type)
介绍:如开发者所知,在设备温度升高的时候,系统常常会为了降低温度/减缓温度升高的速度,保护硬件进行限频、限帧等限制。同时,系统续航模式切换到省电模式或超级省电的时候,系统也会为了延长续航进行限频、限帧等限制。限制后可能会导致应用出现卡顿等状况让设备使用体验不佳,因此当设备温控限频即将发生变化时,系统可调用预定义的回调函数通知三方应用,同时系统也为三方应用提供了温控level的查询接口及当前续航模式的查询接口,在温控level变化时应用可收到警报,或者应用要进行复杂操作时,可查询下用户当前的温控level及续航模式,如果温控限频严重或续航模式为省电模式/超级省电,建议应用可在保障基本操作流畅的前提下,动态调整代码执行负载和代码复杂度,配合手机系统协同优化,提高整机使用体验。
参数:
uid : 调用者UID
context : 应用上下文
type : 查询的系统状态类型,目前有两类:
1 : 设备壳温
2 : 系统省电模式
返回结果:
当查询设备壳温时(type = 1),返回对应温度的温控级别
0: 正常范围
1: 轻微限频
2: 较严重限频
3: 非常严重限频
-2: Permission not granted!
当查询设备省电模式(type = 2),返回当前省电模式
0:性能模式
1:均衡模式
2:省电模式
3:超级省电
-2: Permission not granted!
②int registerThermalEventCallback(int uid, ThermalEventCallBack cb)
介绍:注册回调,当系统温控级别发生变化,触发回调接口onThermalLevelChanged
ThermalEventCallBack cb = new ThermalEventCallBack() {
@Override
public void onThermalLevelChanged(int level) {
//do somthing;
}
};
参数 :
uid : 调用者UID
cb : 回调实例,须重写onThermalLevelChanged()方法
返回结果 :
0 : 注册成功
-1 : 注册失败
-2: Permission not granted!
③int unRegisterThermalEventCallback(int uid, ThermalEventCallBack cb)
介绍:注销回调
参数:
uid : 调用者UID
cb : 回调实例,须重写onThermalLevelChanged()方法
返回结果 :
0 : 注销成功
-1 : 注销失败
-2: Permission not granted!
五、正式权限申请
请提供以下信息并发送邮件到 mispeed-business@xiaomi.com 申请正式权限。
邮件主题:xx公司申请小米应用加速器正式权限
注意:申请正式权限,需要签订相关商务权限。
1. 资源接口使用场景
场景 | cpu level | thread priority | timeout (ms) |
打开页面 | 1 | - | 100 |
滑动 | 2 | - | 100 |
场景3 | 3 | - | 500 |
2. 性能测试
备注:我们也会根据您提供的场景进行性能测试。
如贵公司无相关测试条件,也可以由我们帮您进行测试。
场景 | 具体测试内容 | 接入前 | 接入后 | 提升 |
进入页面 | 进入页面耗时 | 100 ms | 80 ms | 20% |
页面滑动 | 滑动丢帧率 | 10% | 6% | 40% |
场景X | 测试内容X |
3. 功耗测试
场景 | 接入前 | 接入后 | 差值 |
场景一 | 70mA | 78mA | 50 |
场景二 |
备注:我们也会根据您提供的场景进行功耗测试。如贵公司无相关测试条件,也可以由我们帮您进行测试。
六、更多合作
后续会为您的应用提供更多的支持(例如卡顿打点,内存泄漏打点),提升应用的性能,提升用户的使用满意度。
如果您有任何建议或者反馈,欢迎交流:
我们的宗旨是:
一切为了用户,让用户得到最好的体验!