详解android系统的定制
作者:dongyi1988 发布时间:2022-03-14 11:20:19
简单基础的定制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
来源:https://blog.csdn.net/dongyi1988/article/details/55667160


猜你喜欢
- 一、首先我们先大致了解一下什么是多线程。(书上的解释)程序是一段静态的代码,它是应用软件的蓝本。进程是程序的一次动态执行过程,对
- 健康检查是Spring Boot Actuator中重要端点之一,可以非常容易查看应用运行至状态。本文在前文的基础上介绍如何自定义健康检查。
- 本文实例分析了Android动画之逐帧动画。分享给大家供大家参考,具体如下:在开始实例讲解之前,先引用官方文档中的一段话:Frame动画是一
- 摘要:这个问题算是老生常谈了,我也是一段时间没弄过了,所以感觉有些忘了,就记录一下。一、后端通过shiro在session中存储数据://
- 一、题目描述题目:模拟一个简单的银行系统,使用两个不同的线程向同一个账户存钱。实现:使用特殊域变量volatile实现同步。二、解题思路创建
- 一、创建项目创建一个简单的Java项目,其中Main.java为主函数,包含main方法:二、完成JAR配置进入File->Proje
- 概述JDK的bin目录下提供了很多命令工具,比如java.exe,javap.exe,javac.exe。。。。。。这些命令由jdk/lib
- 目录1. 定义排序列数组2. 修改表头点击事件3. 修改表格排序方法4. 修改后台传参实现思路也比较简单,只需要用一个数组来存放所有排序的列
- bind函数定义在头文件 functional 中。可以将 bind 函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用
- 在一个完整的项目中,如果每一个控制器的方法都返回不同的结果,那么对项目的维护和扩展都会很麻烦;并且现在主流的开发模式时前后端分离的模式,如果
- 前言本文是精讲RestTemplate第7篇,前篇的blog访问地址如下:RestTemplate在Spring或非Spring环境下使用精
- 1.问题分析我们在开发中经常遇到多个实体类有共同的属性字段,例如在用户注册时需要设置创建时间、创建人、修改时间、修改人等字段,在用户编辑信息
- @Transactional跟@DS动态数据源注解冲突背景前阵子写一个项目时,有个需求是要往3个库,3个表里插入数据,在同一个方法里,公司是
- 以下将是 C# 7.0 中所有计划的语言特性的描述。随着 Visual Studio “15” Preview 4 版本的发布,这些特性中的
- * 验证码地址:https://007.qq.com/online.html* 使用OpenCv模板匹配* 成功率90%左右* Java +
- 本文实例讲述了java实现将结果集封装到List中的方法。分享给大家供大家参考,具体如下:import java.sql.Connectio
- 一、链表的介绍什么是链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结
- 步骤一:1.查看Eclipse版本的eclipse--help--About Eclipse,在Eclipseplatfrom那行的Vers
- spring boot配置hikari连接池属性事件起因与一个简单应用经常发生Young GC,甚至在没有请求量的情况下也经常发生GC (A
- Android通过访问网页查看网页源码1.添加网络权限<!--访问网络的权限--> <uses-permission an