深度解析Android系统的定制配置
简单基础的定制android系统,使第一次开机就安装系统应用和预装应用,加载服务工具和其它文件,开机启动画面,设置默认输入法、屏幕亮度等等。
如何简单的定制android系统?这里有两种方法:
第一是使用蘑菇ROM助手,编辑系统ROM。使用方法请百度。
第二种是源码中添加编译规则。复制设备工程中的文件到编译生成的系统中。
这里介绍下第二种方法,使用的是全志T3的android4.4系统源码。
1.添加我们自己的编译项
修改编译文件/android/device/softwinner/t3-p1/t3_p1.mk,添加下面一句
$(call inherit-product-if-exists, device/softwinner/t3-p1/test/test.mk)
2.编辑device/softwinner/t3-p1/test/test.mk文件。
PRODUCT_COPY_FILES += \
$(call find-copy-subdir-files,*,$(LOCAL_PATH)/apk,system/preinstall) \
$(call find-copy-subdir-files,*,$(LOCAL_PATH)/systemapk,system/app) \
$(call find-copy-subdir-files,*,$(LOCAL_PATH)/music,data/test/music) \
$(call find-copy-subdir-files,*,$(LOCAL_PATH)/video,data/test/video) \
$(call find-copy-subdir-files,*,$(LOCAL_PATH)/pic,data/test/pic)
PRODUCT_COPY_FILES += \
device/softwinner/t3-p1/test/test_init:system/bin/test_init \
device/softwinner/t3-p1/test/gocsdk:system/bin/gocsdk
#注意:1、第一次启动,复制文件与安装应用较慢,进入系统后需等待;
# 2、system文件夹用户不可写,故不能删除;
# 3、预装应用可卸载,卸载后不再出现;
# 4、如果需要再次安装,删除目标板的 /data/system.notfristrun文件,然后重启
一 安装系统应用和一般应用
PRODUCT_COPY_FILES是拷贝文件到系统,前面是存放路径,后面是目标路径,$(call find-copy-subdir-files,***)的写法能实现文件夹的拷贝。
在test文件夹下创建apk,systemapk,music,video,pic等文件夹。
system/preinstall是预装软件,放置APK文件,可卸载。
system/app是系统应用,放置APK文件,不可卸载。
因为在device/softwinner/t3-p1/fstab.sun8iw11p1中/dev/block/by-name/system /system ext4 ro wait表明/system的挂载方式是ro只读方式。ROOT就是重新挂载修改这个文件夹的读写权限。非ROOT情况下文件拷贝到里面就可实现文件不可删除。
注意,复制文件会检查是否是APK文件,需要在android/build/core/makefile里面注释掉这段检查。
#define check-product-copy-files
#$(if $(filter %.apk, $(1)),$(error \
# Prebuilt apk found in PRODUCT_COPY_FILES: $(1), use BUILD_PREBUILT instead!))
#endef
二 加载服务工具和其它文件
接着分析test.mk文件,下面三句是复制music、video、pic到目标android系统。也可以是其他文件。实现文件的定制。
再下面两句是添加的工具,其中一个设置默认值的shell指令,一个是蓝牙供应商给的工具。
三 设置默认输入法
设置默认输入法的一个方法是开机的时候创建服务控制台输入settings指令来设置默认输入法。然后/android\/device/softwinner/t3-p1/init.rc文件加载时运行一次该服务。
其中test_init里面添加设置默认输入法指令。
#!/system/bin/sh
settings put secure default_input_method com.google.android.inputmethod.pinyin/.PinyinIME
init.rc加入服务
service test_init /system/bin/sh /system/bin/test_init
class core
user root
group root system
oneshot
google拼音输入法app要放到预装软件或是系统应用文件夹中。
app也装上去了,这样还不行,因为权限不够,需要修改test_init权限,在init.rc文件中添加
chmod 777 /system/bin/test_init
注意:设置默认输入法的另一个方法是修改默认参数。修改/device/softwinner/t3-p1/overlay/frameworks/base/packages/SettingsProvider/res/values的defaults.xml文件,详细请百度。
现在settings指令支持的选项有限,虽然查看setting的数据库有很多选项,但并不好用。
重点是,修改test_init,可以在android系统起来前输入自己需要的shell指令。android系统添加启动服务会具体说明如何添加启动工具或服务。
四 开机启动画面与音乐
全志T3的android4.4系统源码开机画面、开机音乐放在android/device/softwinner/t3-p1/media
推荐阅读
-
深度解析Android系统的定制配置
-
android系统的简单定制
-
深度解析在debugfs文件系统调试阶段使用gpio的实例
-
深入解析推荐系统中的经典深度学习模型
-
Keepalived 配置深度解析:打造高可用系统
-
实战攻略:工作流引擎深度解析 - 思维导图与具体案例" 目录概览: 1. 业务场景实战合集 2. 背景介绍:处理复杂场景 - 如请假、离职流程中的多步骤审批差异 - 详细示例:请假与离职流程的应用演示 3. 案例应用实例: - 内部企业系统(如OA)中的请假、离职流程审批 - 在内容创作工具(如PPT、海报模板)提供下载功能时,针对不同租户设置个性化审批流程 4. 技术选型与实践探讨 注:图片文件名 - "思维导图.png" 和 "请假流程.png" 无需修改。
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
互联网+比赛中的实战应用:基于深度学习人脸识别系统的性别与年龄识别方法解析(第三部分)
-
深度解析!操作系统实战第三章:系统调用详解 - 李治军教授的哈尔滨工业大学讲解(第一部分)
-
全面指南:从安装到升级,深度解析 Nginx 的安全配置详解