【干货】Android系统定制基础篇:第一部分(文件权限、增加信号强度、双路背光控制)

这篇具有很好参考价值的文章主要介绍了【干货】Android系统定制基础篇:第一部分(文件权限、增加信号强度、双路背光控制)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Android指定某个文件的权限

当需要修改某文件或路径权限时,我们可以在init.rc开机启动某节点添加chmod命令进行修改。但是对于system分区,由于是ro权限,在init.rc使用chmod修改权限无效。需要在文件编译时,对权限进行修改。不同的Android版本改法一样,但是文件所在目录有差异,Android O主要修改文件是system\core\libcutils\fs_config.cpp。此文件可以修改目录和文件权限,具体可参考代码现有例子进行修改。

比如,修改su命令的权限为“04755”:

#ifdef CUSTOM_ROOT
    { 04755, AID_ROOT,      AID_SHELL,     0, "system/xbin/su" },
#else
    { 04750, AID_ROOT,      AID_SHELL,     0, "system/xbin/su" },
#endif

编译libcutils.so模块:

$ mmm system/core/libcutils/

重新编译system.img,再烧录system分区验证:

$ make systemimage -j32

2、Android增加信号强度(假)

该方案纯粹为了使WiFi信号从表面看上去更强,使原来3格信号的热点变为满格,以满足一些特殊需求。可以通过属性『ro.wifi.rssigain』配置 rssi 虚增多少db。

diff --git a/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WificondControl.java b/frameworks/opt/ne
old mode 100644
new mode 100755
index b6104a8..2a71926
--- a/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WificondControl.java
+++ b/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WificondControl.java
@@ -28,6 +28,8 @@ import android.net.wifi.WifiSsid;
 import android.os.Binder;
 import android.os.RemoteException;
 import android.util.Log;
+import android.os.SystemProperties;
+import android.text.TextUtils;
 
 import com.android.server.wifi.hotspot2.NetworkDetail;
 import com.android.server.wifi.util.InformationElementUtil;
@@ -72,6 +74,15 @@ public class WificondControl {
 
     private String mClientInterfaceName;
 
+    // Added by ayst.shen@foxmail.com, for enhance signals.
+    private static int sRssiGain = 0;
+    static {
+        String gain = SystemProperties.get("ro.wifi.rssigain", "");
+        if (!TextUtils.isEmpty(gain)) {
+            sRssiGain = Integer.parseInt(gain);
+        }
+    }
+    // Added end
 
     private class ScanEventHandler extends IScanEvent.Stub {
         @Override
@@ -303,7 +314,7 @@ public class WificondControl {
             return null;
         }
         WifiNative.SignalPollResult pollResult = new WifiNative.SignalPollResult();
-        pollResult.currentRssi = resultArray[0];
+        pollResult.currentRssi = resultArray[0] + sRssiGain; // Modified by ayst.shen@foxmail.com, for enhance si
         pollResult.txBitrate = resultArray[1];
         pollResult.associationFrequency = resultArray[2];
         return pollResult;
@@ -382,8 +393,9 @@ public class WificondControl {
                     continue;
                 }
 
+                // Modified by ayst.shen@foxmail.com, for enhance signals.
                 ScanDetail scanDetail = new ScanDetail(networkDetail, wifiSsid, bssid, flags,
-                        result.signalMbm / 100, result.frequency, result.tsf, ies, null);
+                        (result.signalMbm / 100) + sRssiGain, result.frequency, result.tsf, ies, null);
                 // Update carrier network info if this AP's SSID is associated with a carrier Wi-Fi
                 // network and it uses EAP.
                 if (ScanResultUtil.isScanResultForEapNetwork(scanDetail.getScanResult())

属性配置:

# 值:整数,rssi增加的db值
ro.wifi.rssigain=6

3、Android 双路背光控制

双屏项目有时两个屏背光需要单独调节,而Android默认只有一路背光控制逻辑,因此,此方案从驱动到Android Framework增加一路背光控制逻辑,使得Android同时支持两路背光控制。

以下方案基于Rockchip平台实现,如果是其它平台,驱动和dts可能稍有变化。

kernel

dts
复制一份原背光配置,compatible 改为“pwm-backlight-ext”。
kernel\arch\arm\boot\dts\rk3288-android.dtsi

backlight_extend: backlight_extend {
		compatible = "pwm-backlight-ext";
		brightness-levels = <
			255 231 231 230 230 229 229 229 228 228
			228 227 227 227 226 226 226 226 225 225
			225 224 224 224 224 223 223 223 222 222
			222 221 221 221 220 220 219 218 217 216
			215 214 213 212 211 210 209 208 207 206
			205 204 203 202 201 200 199 198 197 196
			195 194 193 192 191 190 189 188 187 186
			185 184 183 182 181 180 179 178 177 176
			175 174 173 172 171 170 169 168 167 166
			165 164 163 162 161 169 159 158 157 156
			155 154 153 152 151 150 149 148 147 146
			145 143 142 141 140 139 138 137 136 135
			134 133 132 131 130 129 128 127 126 125
			124 123 122 121 120 119 118 117 116 115
			114 113 112 111 110 109 108 107 106 105
			104 103 102 101 100 99 98 97 96
			95 94 93 92 91 90 89 88 87 86
			85 84 83 82 81 80 79 78 77 76
			75 74 73 72 71 70 69 68 67 66
			65 64 63 62 61 60 59 58 57 56
			55 54 53 52 51 50 49 48 47 46
			45 44 43 42 41 40 39 38 37 36
			35 34 33 32 31 30 29 28 27 26
			25 24 23 22 21 20 19 18 17 16
			15 14 13 12 11 10 9 8 7 6
			5 4 3 2 1 0>;
		default-brightness-level = <128>;
		pwms = <&pwm2 0 25000 0>;
	};

driver

修改kernel原背光驱动,of_device_id 数组增加“pwm-backlight-ext”。
kernel\drivers\video\backlight\pwm_bl.c

static struct of_device_id pwm_backlight_of_match[] = {
	{ .compatible = "pwm-backlight" },
    { .compatible = "pwm-backlight-ext" },
	{ }
};

开机后,驱动会创建对应的设备节点:

/sys/class/backlight/backlight/brightness
/sys/class/backlight/backlight_extend/brightness

Framework

参考 Android-DualBacklightAdjust 合入Framework补丁。

使用

系统设置

『设置->显示->副屏亮度』。

方法1 只调节亮度不保存值

  1. 新建 app/src/main/aidl/android/os/ILightsService.aidl,内容如下:
package android.os;
 
/** {@hide} */
interface ILightsService
{
	boolean setBrightness(int type, int brightness);
}

2.调用 setBrightness 方法。文章来源地址https://www.toymoban.com/news/detail-489521.html

package com.ayst.sample.items.backlight;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.IBinder;
import android.os.ILightsService;
import android.os.RemoteException;
import android.util.Log;

import java.lang.reflect.Method;

/**
 * Created by Administrator on 2018/11/6.
 */

public class Lights {
    private ILightsService mLightsService;

    @SuppressLint("WrongConstant")
    public Lights(Context context) {
        Method method = null;
        try {
            method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
            IBinder binder = (IBinder) method.invoke(null, new Object[]{"lights"});
            mLightsService = ILightsService.Stub.asInterface(binder);
            if (mLightsService == null) {
                Log.i("Lights", "mLightsService is null");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @param type
     *     BACKLIGHT=0,
     *     BACKLIGHT_EXT=1,
     *     KEYBOARD=2,
     *     BUTTONS=3,
     *     BATTERY=4,
     *     NOTIFICATIONS=5,
     *     ATTENTION=6,
     *     BLUETOOTH=7,
     *     WIFI=8,
     * @param brightness 0~255
     * @return
     */
    public boolean setBrightness(int type, int brightness) {
        if (null != mLightsService) {
            try {
                return mLightsService.setBrightness(type, brightness);
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }
        return false;
    }
}
方法2 调节亮度并保存值(推荐)
public void saveMainBrightness(int brightness) {
    try {
        Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness);
    } catch (Exception localException) {
        localException.printStackTrace();
    }
}

public void saveSubBrightness(int brightness) {
    try {
        /**
         * Settings.System.SCREEN_BRIGHTNESS_EXT = "screen_brightness_ext"
         */
        Settings.System.putInt(mContext.getContentResolver(), "screen_brightness_ext", brightness);
    } catch (Exception localException) {
        localException.printStackTrace();
    }
}

到了这里,关于【干货】Android系统定制基础篇:第一部分(文件权限、增加信号强度、双路背光控制)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【OpenCV入门】第一部分——图像处理基础

    图像处理包括4个基本操作: 读取图像 、 显示图像 、 保存图像 和 获取图像属性 。 imread() filename :目标图像的完整路径名。 flags :图像的颜色类型的标记,有0和1两个值,其中1为默认值。当读取一幅彩色图像时,如果想要得到一幅 彩色图像 ,那么flags的值为1(此时flags的

    2024年02月11日
    浏览(47)
  • [软件测试] 第一部分 软件测试基础

    软件测试期末复习系列 课件知识点整合 : 软件测试基础 白盒测试 黑盒测试 PTA习题汇总 : 软件测试基础 白盒测试-逻辑覆盖测试 白盒测试-基本路径测试 白盒测试-静态测试 黑盒测试-等价类划分 黑盒测试-边界值测试 黑盒测试-场景法 软件危机 :软件危机是指落后的软件生

    2024年02月04日
    浏览(65)
  • 使用Android Studio 利用极光推送SDK 制作手机 APP 实现远程测试技术 (第一部)

    总参考文章:https://blog.csdn.net/qq_38436214/article/details/105073213 Android Studio 安装配置教程 - Windows(详细版) 1.JDK 安装与环境变量配置(Win10详细版) 《jdk-8u371-windows-i586.exe》 https://blog.csdn.net/qq_38436214/article/details/105071088 此时会让登录账号密码: https://login.oracle.com/mysso/signon.jsp 账号:

    2024年02月03日
    浏览(49)
  • 图论 (Java) 从入门到入土 /第一部分 图的基础-图的表示/

            图,是一种比较复杂的数据结构。和树的一个节点只和上层一个节点相连不同,在图中,任意两个节点都可能相连,且可能具有方向性,并且节点的边具有权重,因此,图被用于描述各种复杂的数据对象,在自然科学、社会科学和人文科学等诸多领域有着非常广泛

    2024年02月08日
    浏览(43)
  • C++入门教程,C++基础教程(第一部分:从C到C++)七

    由C语言发展而来的一种面向对象的编程语言。 本章讲述 C++ 语言的简史,以及 C++ 语言中与面向对象关系不大、C语言中没有的特性。这些特性能够增加编程的便利性,提高程序的可扩充性。 inline 可以只在函数定义处添加,也可以只在函数声明处添加,也可以同时添加

    2024年02月02日
    浏览(45)
  • Linux Shell 脚本编程学习之【第2章 Linux文件系统和文本编辑器(第一部分)】

    1、root用户 系统唯一,是真实的。该用户既可以登录系统,可 以操作系统任何文件和命令,拥有最高权限。 2、虚拟用户 这类用户也被称为伪用户或假用户,与真实用户区分开来,这类用户不 具有登录系统的能力,但却是系统运行不可缺少的用户,比如 bin、daemon、adm、 ft

    2024年02月16日
    浏览(55)
  • Zabbix监控系统 第一部分:zabbix服务部署+自定义监控项+自动发现与自动注册(附详细部署实例)

    zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix 能监视各种网络参数,保证服务器系统的安全运营,提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbix 由 2 部分构成,zabbix server 与可选组件 zabbix age

    2024年02月07日
    浏览(44)
  • 章节 1:入门React.js -《React.js手把手教程:从初学者到实战高手》- 第一部分:React.js基础

    《React.js手把手教程:从初学者到实战高手》 第一部分:React.js基础 在我们开始探索 React.js 的奇妙世界之前,让我们先来认识一下这个“ 人人都在谈论 ”的家伙。你可以把 React.js 想象成是一个全栈工程师的一大碗甜品,不仅好吃,还可以让你的应用更美味!那么,究竟什么

    2024年02月11日
    浏览(53)
  • 【干货】Android系统定制基础篇:第七部分-Android OTA升级(系统、应用)

    项目地址:https://github.com/aystshen/Android-RomUpgrade. 这是一个负责 Android OTA 升级的后台应用,开机后自动运行后台 Service,支持系统升级和应用升级,支持本地升级(tf卡、u盘)和在线升级(百度),支持推荐升级和静默升级。 已知兼容版本: ● Android 5.1 ● Android 6.0 ● Android

    2024年02月09日
    浏览(62)
  • 【干货】Android系统定制基础篇:第六部分-Android扩展服务-AndroidX

    AndroidX 做为一个后台 Service 应用,开机自动运行,配合系统做一些定制化功能,并且对外提供 API。 主要功能: ● 硬件看门狗代理 ● USB Host/Device 切换 ● 4G 网络保活 ● 系统日志写入文件 ● 键值拦截 ● 启用应用 项目地址:https://github.com/aystshen/AndroidX 硬件看门狗代理主要

    2024年02月09日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包