华为 EMUI 8.x、9.x 解锁满血快充(亮屏/息屏)、温控、真后台白名单

最后更新时间:2020-5-9 17:41:53,增加贫民进阶版

特别的,关于玩游戏卡顿问题:
请确保关闭了zram和swap,很遗憾,这项操作需要root权限。这里实测崩坏3过图场景大量进行内存数据交换,卡的手机不要不要的,ppt幻灯片,具体表现帧平均生成时间波动太大,极差大,标准差大。

关于华为的多任务后台切换界面显示的可用内存,是可用内存+zram的可用内存的总和,并不是纯粹的可用内存。
EMUI 10.X 理论可用,具体自测,思路是一样的。

方法有3个版本,一个是氪金版,另一个是贫民版,还有一个是贫民进阶版
氪金版:解锁bl+xp/mg+twrp+root,为所欲为,不丢失GPU Turbo功能,满血亮屏快充,永恒进程。
贫民版:adb 苟活,解锁满血亮屏快充会丢失GPU Turbo功能,因为需要iaware和省电精灵进行频率调度,adb只能简单粗暴禁用,无root权限修改省电精灵配置文件
贫民进阶版:完全无视华为手机管家后台清理。

备注:
这3个效果存在鸿沟一样的差距,无法逾越,每个版本的做法都是一个质变。

贫民版仍会受到华为后台管理策略的制约,如手机管家,仅当内存充足,才不会杀进程,当内存紧张时,并且不是活跃进程,仍有一定几率会被kill掉,并且锁屏时被kill几率提升,省电模式下被kill几率进一步提升。
贫民进阶版,不受华为后台管理的策略制约,无视锁屏后台清理,无视省电模式下后台清理,无视华为手机管家乱杀。
氪金版:不好意思,为所欲为。
实际场景中,做到第二步,贫民进阶版,所有进程不杀,只有触发系统OOM才会按照安卓原生内存管理策略综合评定来杀进程。

氪金版:
root+xp/magsik框架用户优先使用此类方法
无需清理省电精灵,iaware,root权限下直接修改相关配置文件提升温控上限,解锁充电的电流限制。
通过xp框架,100%实现后台白名单,无视第三方应用清理,系统级层面清理,部分root权限的杀进程应用,同时无视停用,需要2个插件支持。
一个是进程锁,可以把应用的进程优先级提升为永恒进程+前台应用程序,不过华为太过丧心病狂,在EMUI 9.x之后,单靠永恒锁已经阻止不了HW的乱杀。
另一个是应用控制器去后门版(52破解论坛可以下到大佬修改版),可以实现多任务后台界面划掉之后仍然保留卡片界面,进程永远不会被杀死!在root权限下杀死进程也是极大几率不会暴毙(使用kill -9)。
6G运存使用到剩余210 Mib(我把Zram给关了),所有后台白名单的全部存活,极端情况下,不断新增打开后台白名单应用,使用内存不断增多,触发系统OOM,由于没有空闲的非后台白名单应用可以被清理,最终导致内存不足手机宕机。

贫民版:
贫民用户 【以下通过adb卸载的应用均可无损反悔】↓:
用adb卸载2个应用,只禁用还是会运行的,是没效果的,还会复发。
实际测试,EMUI9.1禁用省电精灵而不卸载,亮屏快充仍然被限制,卸载后才恢复满血快充。

18w(9v2a)快充测试数据
卸载前:低电量亮屏峰值电流 1200mA,超过40%电量后最大800mA,卸载后,即使亮屏75%电量,充电电流保持在2600mA+,亮屏80%,电流2000mA+,亮屏94%,电流700mA+,解锁前后对比,极端情况下,两者效率差距达4倍+,常规情况下充电效率也是稳稳2-3倍+!,如800mA和2600mA。
官方温控是毒瘤,无论出于任何理由,在如下场景中,亮屏25%亮度看小说,处于低电量+低温状态+低功耗状态,亮屏功率居然限死在最大6w,华而不实,为所欲为,大概就是华为。
亮屏快充状态(系统显示快充2个闪电,输出9v电压却被系统控制电源IC输入电流),实测3个半小时充不满电,滑天下之大稽。
如果不是低电量,充电功率最大4w不到(好一个18w快充)。
如果有root权限,system分区未被锁定,不建议卸载/禁用省电精灵,禁用/卸载省电精灵是下下策(因为没root权限?),最好去改省电精灵的配置文件,提高温控上限。

1.处理毒瘤应用1,iaware,com.huawei.iaware,这是系统资源性能调度应用,卸载后发热不会降频,不会随意强制降级屏幕分辨率,无需root权限

pm uninstall --user 0 com.huawei.iaware
有root权限可以更灵活,无需卸载,直接通过setprop来配置iaware状态。

2.处理毒瘤应用2,做掉省电精灵,能解锁满血快充,提升温控上限,极大降低乱杀后台频率,此条件是贫民版实现真后台白名单的前提!副作用就是丧失GPU Turbo功能(待进一步确认)。

pm uninstall --user 0 com.huawei.powergenie
如果忍受不了发热和想提升续航,想反悔恢复这2个应用,可以执行adb shell cmd package install-existing 应用包名 进行无损恢复,如:

adb shell cmd package install-existing com.huawei.iaware
adb shell cmd package install-existing com.huawei.powergenie
效果:主动加入后台白名单的应用,内存不紧张,非省电模式下,存活几率大大提升(实测环境:EMUI 9.1.0.337)

这可不是那些和HW存在PY交易实现的内部后台白名单,如微信,QQ这类是开挂的。

想杀系统也不给杀,我多任务界面划掉微信,打开微信还是之前界面,无需重载,根本没有微信地球界面,即系统根本没有去执行杀死进程操作,阳奉阴违,谁是手机的主人?:

贫民版需要配合系统设置,做如下操作:
1>手机管家允许自启,把需要加白的应用,3个选项都允许
2>忽略电池优化
3>关闭手机管家的流量管理的智能省流量
4>手机管家,电池管理,关闭高耗电提醒
5>休眠时始终保持网络数据连接
6>多任务列表下拉上锁
7>始终开启移动数据

贫民版进阶(2020-5-9 17:18:38 更新):
通过黑域,可以停用手机管家,彻底实现后台不被华为后台策略清理,黑域使用任意激活方式,adb激活/root激活,把手机管家停用。华为的EMUI的后台进程清理被整合进了手机管家,停用手机管家会导致无法手动杀死任意后台进程,必须通过第三方后台管理应用来清理,此时黑域设置为如下设置,后台应用超时1分钟,不再活跃超时为5分钟,即可,对于想要保留后台白名单的应用,则不黑域,普通应用黑域,毒瘤应用全部黑域+激进模式。
可以实现完美后台白名单 + 完美的可以自定义的后台管理。

当然,比起氪金版效果大概就是:贫民版59分,贫民进阶版60分,氪金版100分。

氪金使你变强,使你成为手机的主人,不然还是孙子,在国内这种病态一样的各种美名其曰的畸形深度定制下,碎片化愈演愈烈,各大互联网产商为了信息推送,率先开发毒瘤app,后台驻留,守护进程,相互唤醒,甚至还做了后台内部白名单,如微信QQ,不一一举例,然后还关闭BL解锁码申请渠道,还不开源安卓内核……以上种种恶行罄竹难书。

顺便提一下:当把手机管家停用后,所有内部py交易实现的后台白名单全部原形毕露,全部处于忽略电池优化列表,即使在停用前把内部白名单应用踢出忽略电池优化列表也没用。

什么?你没root权限,那你还往下看?还不右上角x关闭

Linux系统实现虚拟内存有两种方法:交换分区(swap分区)和交换文件
交换文件

    1. 查看内存:free -m , -m是显示单位为MB,-g单位GB
    2. 创建一个文件:touch /root/swapfile
    3. 使用dd命令,来创建大小为2G的文件swapfile:
    1. if=/dev/zero of=/root/swapfile bs=1M count=2048 //命令执行完需要等待一段时间

    if表示input_file输入文件
    of表示output_file输出文件
    bs表示block_size块大小
    count表示计数。
    这里,我采用了数据块大小为1M,数据块数目为2048,这样分配的空间就是2G大小。

    1. 格式化交换文件:mkswap /root/swapfile
    2. 启用交换文件:swapon /root/swapfile
    3. 开机自动加载虚拟内存,在/etc/fstab文件中加入如下命令:
      /root/swapfile swap swap defaults 0 0
    4. 重启后生效reboot

    如果要删除交换分区和交换文件,逆着上面的顺序操作:

    1. 先删除/etc/fstab文件中添加的交换文件行
    2. 停用交换文件swapoff /root/swapfile
    3. 删除交换文件rm -fr /root/swapfile

    交换分区
    采用交换分区的办法其实就是新建一个分区,然后将该分区挂载作为交换空间,方法步骤与传统的新建分区一样。只不过格式化分区和挂载分区分别采用mkswap和swapon命令。在创建分区之前,我们常常要用过fdisk -l和df -Th命令来查看硬盘信息和挂载信息,来确定分区的大小。

    1. 在shell下以root身份创建分区 hdb1fdisk /dev/hdb1 然后 w 保存退出
    2. 设置交换分区,大小视情况自己设置。mkswap /dev/hdb1
    3. 启用交换分区swapon /dev/hdb1
    4. 开机自动加载虚拟内存,在/etc/fstab文件中加入如下命令:
      /dev/hdb1 swap swap defaults 0 0

    作者:Jarhf
    链接:https://www.jianshu.com/p/fae46241ba0c
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    关于 ANDROID 5.0-7.1.2 网络图标上的感叹号及其解决办法
    noisyfox 2014年12月16日
    叹号杀手源码在此:https://github.com/Noisyfox/NoExclamation

    最新版本下载地址:https://github.com/Noisyfox/NoExclamation/releases

    7.1.2
    谷歌又玩我23333

    自7.1.2(开始?),”captive_portal_detection_enabled”设置已被废弃,现在改为了”captive_portal_mode”选项,该选项可设置为以下3种值:

    0:彻底禁用检测(Don’t attempt to detect captive portals.)
    1:检测到需要登录则弹窗提醒(默认值)(When detecting a captive portal, display a notification that prompts the user to sign in.)
    2:检测到需要登录则自动断开此热点并不再自动连接(When detecting a captive portal, immediately disconnect from the network and do not reconnect to that network in the future.)
    叹号杀手已经更新以支持该版本。

    但愿以后谷歌不要再乱改了233333

    感谢 jingyu9575 的帮助 https://github.com/Noisyfox/NoExclamation/issues/2

    7.1.1
    从7.1.1开始,检测用的服务器地址储存格式发生了变化,改为了:

    1
    2
    3
    private static String getCaptivePortalServerHttpsUrl(Context context) {

    return getSetting(context, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL, DEFAULT_HTTPS_URL);

    }
    以及

    1
    2
    3
    public static String getCaptivePortalServerHttpUrl(Context context) {

    return getSetting(context, Settings.Global.CAPTIVE_PORTAL_HTTP_URL, DEFAULT_HTTP_URL);

    }
    可以看到,系统不会自动加入”generate_204″的后缀了,这意味着url可以设计的更加灵活,同时也意味着在设置的时候需要填入完整的url:

    1
    adb shell "settings put global captive_portal_https_url https://www.noisyfox.cn/generate_204"
    当然如果只有http的话,可以执行:

    1
    2
    adb shell "settings put global captive_portal_use_https 0"
    adb shell "settings put global captive_portal_http_url http://www.noisyfox.cn/generate_204"
    复原方法见下文。

    7.0-7.1.0
    需要服务器支持https。

    或者使用命令

    1
    adb shell "settings put global captive_portal_use_https 0"
    禁用https即可。

    恢复可用

    1
    adb shell "settings put global captive_portal_use_https 1"
    或者

    1
    adb shell "settings delete global captive_portal_use_https"
    5.0-6.0
    升级了安卓5.0的同学们一定对网络图标上面的那个感叹号感到十分郁闷。安卓5.0引入了一种新的网络评估机制来评估网络状况,当你有网络请求时会自动选择网络连接条件最好的一个网络进行连接。该机制的代码实现如下:

    enter image description here

    简要来说就是,如果该网络是VPN,那么直接使用这个网络进行连接,否则调用 isCaptivePortal() 函数进行网络状况的判定,再根据判定结果决定是否选用此网络。 而罪魁祸首就是这个 isCaptivePortal() 函数,它会访问 clients3.google.com/generate_204 并根据返回结果来判断网络联通状况。正是这个google的网址被墙导致安卓没有办法评估网络,这样就导致了那个蛋碎的感叹号一直存在,以及wifi用着用着突然自动连回数据连接了。

    本来我想直接把 isCaptivePortal() 函数给屏蔽掉,让他一直返回成功,但是看了下google的代码,发现这个函数是非常有用处的,为什么呢?这个函数有个非常重要的作用,那就是判断当前网络是否需要登录。

    想必大家都连接过那些需要验证才能使用的wifi热点吧,当你们连接这些热点的时候,android会自动弹出提示询问你是否需要登录。而这个功能就是依靠了 isCaptivePortal() 这个函数才得以实现,具体原理如下:

    enter image description here

    安卓先访问 clients3.google.com/generate_204 这个网址,而这个网址如字面所说,会产生一个 http 204 返回值。204返回值的意思就是空内容。如果当前wifi是需要登录才可以连接,那么当试图访问google的服务器的时候,wifi的验证机制一定会自动跳转到一个登录页面,这个时候http请求的返回值就必然不是204了。就是通过这一机制,便可以区分当前wifi是否需要验证,不得不佩服想出这个办法的人来。

    然而这就导致了如果简单的屏蔽掉这个函数的功能,那么就没有办法自动提示登录了,但是如果不屏蔽掉那么这个网址被墙掉了,因此会有一个难看的感叹号。想来想去我想到了一个曲线救国的办法,那就是我们把这个网址改成国内的网址不就可以了?我们自己搭一个服务器,来产生这个204返回值给它,问题不就迎刃而解了吗?

    那么下面就给出解决方法(无需root):
    1.完全屏蔽网络检查功能,最简单快速,但是就没有办法提示wifi登录:

    1
    adb shell "settings put global captive_portal_detection_enabled 0"
    2.用国内的服务器替换掉google的服务器:

    1
    adb shell "settings put global captive_portal_server noisyfox.cn"
    这个服务器是我自己建的,也就是本站:http://noisyfox.cn/ 我在服务器上写了个简单的204页面,网址是 http://noisyfox.cn/generate_204 只要用这个网址替换掉google的网址,就可以正常访问并检测网络状态了。不过由于本人的服务器速度并不快,所以感叹号还是会显示一小会儿的,不过应该很快就会消失。

    3.恢复默认值
    对于第一条指令,恢复默认只需要执行:

    1
    adb shell "settings put global captive_portal_detection_enabled 1"
    或者

    1
    adb shell "settings delete global captive_portal_detection_enabled"
    第二条指令的恢复直接delete即可:

    1
    adb shell "settings delete global captive_portal_server"
    如果你对本站提供的服务速度不满意,可以在文末找到网友提供的其它服务地址。

    enter image description here

    是不是看着很舒服呢?烦人的感叹号没有了~

    经过靠谱的确认,该修改方式具有持久性,重启依旧有效,除非刷机或者清除数据。

    如何建立自己的服务器

    1. 对于apache服务器,如果你的服务器安装了rewrite模块,那么只需要在网站的.htaccess中加入以下代码:

    1
    2
    3
    4
    5
    <IfModule mod_rewrite.c>;
    RewriteEngine On
    RewriteCond %{REQUEST_URI} /generate_204$
    RewriteRule $ / [R=204]
    </IfModule>;

    1. 对于nginx,直接加入以下设置即可:

    1
    location /generate_204 { return 204; }

    1. 如果以上方法都无效,那么就要利用代码中的一个小trick来完成,直接在网站的根目录下建立一个叫做“generate_204”的空文件即可,因为安卓的源码中写了如果返回的内容为空那么也会当成204(毕竟一个空的页面怎么想都不可能是登录页面嘛!)。

    一键设置工具(需要root)
    锵锵锵!由于有些人不太熟悉adb之类的操作,因此就做了一个小工具方便大家直接在手机上设置!

    下载地址
    最新版请移步:https://github.com/Noisyfox/NoExclamation/releases

    今天突然发现好多TCP请求包的大小在60字节以下,但是经过抓包我的电脑发出的连接都是60字节的,于是过滤了局域网的TCP请求包在60字节以下的,结果同事们断网了。遂查找资料发现TCP请求包最小为40字节。