当前位置: 首页 > news >正文

AOSP:在rom中打入一个脚本

环境

aosp: android-14.0.0_r1
真机:Pixel5

目标

测试:将一个shell脚本,打入到rom中,最终刷机,并能在手机中使用。

步骤

  1. 添加 PRODUCT_PACKAGES
# 路径:device/google/redfin/device-redfin.mk
PRODUCT_PACKAGES += mysh
  1. 创建mysh文件(无后缀)
    路径:device/google/redfin/prebuilt/mysh
#!/system/bin/shcurrent_time=$(date +"%Y-%m-%d %H:%M:%S")
echo "gn--->time=: $current_time" >> /data/local/tmp/gn.log
  1. 新增Android.mk构建模板文件
    路径:device/google/redfin/prebuilt/Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := mysh
LOCAL_SRC_FILES := mysh
LOCAL_MODULE_PATH := $(TARGET_OUT)/bin
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := EXECUTABLES
include $(BUILD_PREBUILT)
  1. 设置权限
    路径:system/sepolicy/prebuilts/api/34.0/private/file_contexts
    和system/sepolicy/private/file_contexts
    这两个路径都需要新增下面内容
/system/bin/mysh	u:object_r:system_file:s0
  1. 设置init.rc
    路径:system/core/rootdir/init.rc
on property:sys.boot_completed=1start myserverservice myserver /system/bin/myshclass mainseclabel u:r:system_file:s0user rootdisabledoneshot
  1. 禁用artifact_path_requirements检测
    路径:build/envsetup.sh
# disable artifact check
export DISABLE_ARTIFACT_PATH_REQUIREMENTS="true"

如果不禁用的话,make编译的时候,会遇到如下报错:

FAILED: 
build/make/core/artifact_path_requirements.mk:30: warning:  device/google/redfin
/aosp_redfin.mk produces files inside build/make/target/product/generic_system.m
ks artifact path requirement. 
Offending entries:
system/bin/mysh
In file included from build/make/core/main.mk:1373:
build/make/core/artifact_path_requirements.mk:30: error: Build failed.
19:26:07 ckati failed with: exit status 1#### failed to build some targets (01:39 (mm:ss)) ####

编译打包

最后编译打包,最好先清理掉所有的out,否则容易影响成包。
编译:

make clean
source build/envsetup.sh
lunch <我这里选择的是pixel5对应的userdebug版本>
make

编译成功后,可以在out中找到mysh,路径:out/target/product/redfin/system/bin/mysh
刷机:

adb reboot fastboot
fastboot devices
fastboot flashall -w

当然不要忘记设置ANDROID_PRODUCT_OUT

结果验证

最终在手机中,可以在/system/bin中找到mysh运行脚本。
shell进去,运行mysh,可以在/data/local/tmp中生成gn.log文件,里面是打印当前时间。则说明验证通过

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ARM----时钟
  • 【全网最全】2024年数学建模国赛B题31页完整建模过程+25页成品论文+matlab/python代码等(后续会更新
  • 【数据库】MySQL表的Updata(更新)和Delete(删除)操作
  • 【Hot100】LeetCode—394. 字符串解码
  • Post-Training有多重要?一文带你了解全部细节
  • 【MySQL00】【 杂七杂八】
  • Python 错误 TypeError 解析,实际错误实例详解 (五)
  • 强调重点元素、弱化辅助元素、去掉无关元素,工控HMI还能好不了
  • ChatGPT在论文写作领域的应用:初稿设计
  • 在前端中Proj4.js使用简单介绍
  • HarmonyOS】ArkTS学习之基于TextTimer的简易计时器的elapsedTime最小时间单位问题
  • LinuxPTP的安装与应用
  • HCIE云计算--灾备
  • 网络协议-SSH
  • claude和chatgpt对比:哪一个更适合你?
  • 【React系列】如何构建React应用程序
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • es6--symbol
  • ES6--对象的扩展
  • golang中接口赋值与方法集
  • JSONP原理
  • MySQL几个简单SQL的优化
  • React Transition Group -- Transition 组件
  • 初识 webpack
  • 飞驰在Mesos的涡轮引擎上
  • 普通函数和构造函数的区别
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 使用parted解决大于2T的磁盘分区
  • 系统认识JavaScript正则表达式
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #APPINVENTOR学习记录
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (java)关于Thread的挂起和恢复
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)scrum常见工具列表
  • (转)大道至简,职场上做人做事做管理
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .FileZilla的使用和主动模式被动模式介绍
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • :not(:first-child)和:not(:last-child)的用法
  • @ComponentScan比较
  • @ConfigurationProperties注解对数据的自动封装
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @在php中起什么作用?
  • [Android] Upload package to device fails #2720
  • [AutoSar NVM] 存储架构
  • [BZOJ1008][HNOI2008]越狱