# 小米应用加速器
## 其他语言
[English](./README.md)
## Index
- [我们的目的](#我们的目的)
- [简介](#简介)
- [我们的优势](#我们的优势)
- [接入说明](#接入说明)
- [申请调试权限](#申请调试权限)
- [使用maven依赖](#使用maven依赖)
- [接口定义](#接口定义)
- [申请正式权限](#申请正式权限)
- [更多合作](#更多合作)
## 我们的目的
一切为了用户,让用户得到最好的体验!
## 简介
小米应用加速器向开发者提供申请系统资源的接口,可以为开发者提升应用关键场景下的性能,提升用户使用体验。
## 我们的优势
* __*轻量级接入*__
通过JAR包接入,大小只有几kb, 不会对开发者的应用造成负担
* __*快速系统通信*__
通过Binder直接与系统层进行通信,申请系统资源,快速高效
* __*场景化定制*__
为开发者在不同的场景下提供不同级别的系统资源
## 接入说明
*MiBridge.jar*
您可以引入此jar包调用小米应用加速器相关接口。
*TestMiBridge*
此目录包含:
*mibridge*: MiBridge jar包的实现代码。
*app*: 测试MiBridge的app代码。
#### 申请调试权限
请提供以下信息,发送到邮箱xiaomi-mispeed-support@xiaomi.com, 申请接入调试权限。
#### 邮件主题:xx(APP名称)申请小米应用加速器接入调试权限
应用包名 | 申请人 |
---- | ----- |
com.mi.testmibridge | 张三 |
我们将会为您开通调试权限.
[__支持设备版本列表__](./support_devices.md)
#### **使用maven依赖**
1.**配置小米应用加速器的Maven仓库地址**
打开Android Studio项目级“build.gradle”文件。在“allprojects > repositories”中配置小米应用加速器的Maven仓地址。
```
allprojects {
repositories {
...
//增加小米应用加速器的Maven仓库地址
maven {
url "https://repos.xiaomi.com/maven"
credentials {
username 'mi-bridge'
password 'AKCp8nH4XbDQshne9w5PgaLroZ7kozqtAPo6Kw6pfZLBWzPEtAJoFzU73RHryxXkmcL5biUL2'
}
}
}
}
```
**2、添加编译依赖**
打开应用级的“build.gradle”文件。
```
dependencies {
...
//1.0.xx是mibridge的版本号,后续升级也要修改对应版本号。
implementation "com.xiaomi.mibridge:mibridge:1.0.18"
...
}
```
#### 接口定义
__权限检查接口__
1. ```boolean checkDebugPermission(Context context, String pkg, int uid, String auth_key)```
__介绍:通过申请获得的鉴权码,检查应用是否有调试权限。__
参数:
*context* : 应用上下文
*pkg* : 应用包名
*uid* : android.os.Process.myUid()
*auth_key* : 上一步中申请获得的鉴权码
返回结果:
true: 权限检查通过
false: 权限检查失败,无接口使用权限
2. ```boolean checkPermission(String pkg, int uid)```
__介绍:检查应用是否有权限__
参数:
*pkg* : 应用包名
*uid* : android.os.Process.myUid()
返回结果:
true: 权限检查通过
false: 权限检查失败,无接口使用权限
__系统资源申请接口__
3. ```int requestCpuHighFreq(int uid, int level, int timeoutms)```
__介绍:向系统申请cpu频率资源的接口__
参数:
*uid* : android.os.Process.myUid()
*level* : 需要的cpu频率level,系统将会根据不同机型设置不同的cpu频率
*timeoutms* : 申请cpu资源的持续时间
Level级别 | 解释(以小米8为例)| timeoutms
---- | -----|-----
1 | Level 1 将会设置系统当前最小频率为系统最高频率 | 最长10s
2 | Level 2 将会设置系统当前最小频率为系统较高频率
例:小米8对应大核最低2.2GHz, 小核最低1.5GHz | 最长5s
3 | Level 3 将会设置系统当前最小频率为系统正常频率以上
例:小米8对应大核最低1.9GHz, 小核最低1.0GHz | 最长1.5s
__注意:请谨慎使用Level 1级别。Level 1级别使用场景数量限制为5,__
__Level 2级别使用场景数量限制为20,Level 3 不做限制。__
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
4. ```int cancelCpuHighFreq(int uid)```
__介绍:取消申请cpu频率资源的接口__
参数:
*uid* : android.os.Process.myUid()
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
5. ```int requestThreadPriority(int uid, int req_tid, int timeoutms)```
__介绍:申请线程获得高优先级,将会优先得到调度运行__
参数:
*uid* : android.os.Process.myUid()
*req_tid* : 申请的线程id
*timeoutms* : 申请的时长
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
6. ```int cancelThreadPriority (int uid, int req_tid)```
__介绍:取消申请线程优先级的接口__
参数:
*uid* : android.os.Process.myUid()
*req_tid* : 取消的线程id
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
7. ```int requestGpuHighFreq(int uid, int level, int timeoutms)```
__介绍:向系统申请gpu频率资源的接口__
参数:
*uid* : android.os.Process.myUid()
*level* : 需要的gpu频率level,系统将会根据不同机型设置不同的gpu频率
*timeoutms* : 申请gpu资源的持续时间
Level级别 | 解释 | timeoutms
---- | -----|-----
1 | Level 1 将会设置系统当前最小频率为系统最高频率 | 最长10s
2 | Level 2 将会设置系统当前最小频率为系统较高频率 | 最长5s
3 | Level 3 将会设置系统当前最小频率为系统正常频率以上 | 最长1.5s
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
8. ```int cancelGpuHighFreq(int uid)```
__介绍:取消申请gpu频率资源的接口__
参数:
*uid* : android.os.Process.myUid()
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
9. ```int requestDdrHighFreq(int uid, int level, int timeoutms)```
__介绍:向系统申请ddr频率资源的接口__
参数:
*uid* : android.os.Process.myUid()
*level* : 需要的ddr频率level,系统将会根据不同机型设置不同的ddr频率
*timeoutms* : 申请ddr资源的持续时间
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
10. ```int cancelDdrHighFreq(int uid)```
__介绍:取消申请ddr频率资源的接口__
参数:
*uid* : android.os.Process.myUid()
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
11. ```int requestIOPrefetch(int uid, String filePath)```
__介绍:申请IO预读取接口__
参数:
*uid* : android.os.Process.myUid()
*filePath* : 预读取的文件路径
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
12. ```int requestBindCore(int uid, int req_tid)```
__介绍:申请线程优先大核运行接口__
参数:
*uid* : android.os.Process.myUid()
*req_tid* : 申请的线程id
返回结果:
0: Success
-1: Fail
-2: Permission not granted!
__系统状态接口__
13. ```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!
14. ```int registerThermalEventCallback(int uid, ThermalEventCallBack cb)```
__介绍:注册回调,当系统温控级别发生变化,触发回调接口onThermalLevelChanged__
```java
ThermalEventCallBack cb = new ThermalEventCallBack() {
@Override
public void onThermalLevelChanged(int level) {
//do somthing;
}
};
```
参数 :
*uid* : 调用者UID
*cb* : 回调实例,须重写onThermalLevelChanged()方法
返回结果 :
- 0 : 注册成功
- -1 : 注册失败
- -2 : Permission not granted!
15. ```int unRegisterThermalEventCallback(int uid, ThermalEventCallBack cb)```
__介绍:注销回调__
参数:
*uid* : 调用者UID
*cb* : 回调实例
返回结果 :
- 0 : 注销成功
- -1 : 注销失败
- -2 : Permission not granted!
#### 申请正式权限
请提供以下信息,发送到邮箱xiaomi-mispeed-support@xiaomi.com, 申请正式权限。
邮件主题:xx(APP名称)申请小米应用加速器正式权限
__1. 资源接口使用场景
场景 | cpu level | thread priority | timeout (ms)
---- | ----- | ------ | -------
打开xxx页面 | 1 | 0 | 100
Xxx滑动 | 2 | 0 | 1000
场景3 | 3 | 1 | 500
场景4 | 1 | 0 | 100
场景5 | 0 | 1 |2000
__2. 性能测试
场景 | 具体测试内容 | 优化前 | 优化后 | 提升
---- | ----- | ------ | ------- | --------
进入某页面 | 进入页面耗时 | 100 ms | 80 ms | 20%
某页面滑动 | 滑动丢帧数(率) | 10% | 6% | 40%
场景3 | 测试内容3 | .. | .. |..
备注:我们也会根据您提供的场景进行性能测试。
__3. 功耗测试
场景 | Base | 接入后 | Diff
---- | ----- | ------ | -------
场景1 | 1000 mA | 1050 mA | 50
场景2 | .. | .. | ..
备注:我们也会根据您提供的场景进行功耗测试。
#### 更多合作
后续将会开放更多接口
requestIOHighFreq,requestMemory,requestNetwork等
后续可以提供的支持
为您的应用提供更多的支持(例如,卡顿打点,内存泄漏打点),提升应用的性能,提升用户的使用满意度。