Android 7.0预制应用为可卸载
最近在做CTA认证的时候有个需求,需要预制两个应用为可卸载的方式,且恢复出厂设置之后,可以重新安装。
思路:
- 预制应用需要编译输出在/system/preinstall目录
- 系统首次运行的时候,需要通过脚本将输出的apk拷贝到/data/app目录
应用编译输出到指定目录,通过在Android.mk文件中添加如下字段实现:
LOCAL_MUDULE_PATH := $(PRODUCT_OUT)/system/preinstall
接下来需要实现应用的拷贝逻辑
#!/system/bin/sh
if [ ! -f "/data/app/installed" ]; thenchmod 777 /data/app/cp -rf /system/preinstall/* /data/app/echo "1" > /data/app/installedchmod -R 777 /data/app/*
fi
这段脚本的意思是
- 首先判断/data/app目录是否存在installed文件
- installed文件不存在的情况下,首先对/data/app 赋读写权限。
- 然后拷贝/system/preinstall下的所有文件夹到/data/app目录
- 创建installed文件,表示已经拷贝完成,下一次开机就不再执行
- 给/data/app下所有文件以及文件夹赋权限。
这里遇到了一个问题,使用notepad++编写脚本后push到/system/bin/目录运行,提示"if unmatched"的语法问题,一度以为系统将sh语法支持裁剪了,后面cat了install-recovery.sh查看后,发现系统是支持if语句的,是notepad++编写的字符格式有问题,我把install-recovery.sh pull下来,基于这个文件修改脚本再push就好了。
脚本编译好了之后,需要将其编译进系统里面,在device/xxx/common目录下找到base.mk,添加如下字段:
PRODUCT_COPY_FILES += preload.sh存放路径:preload.sh需要输出的路径
exp:
PRODUCT_COPY_FILES += device/qcom/common/preload.sh:system/bin/preload.sh
添加完成编译后,会发现out目录下的/system/bin中有preload.sh,且其会被打包进system.img
脚本输出到system分区了,还需要在开机启动的时候,执行这个脚本。一般都由init进程触发。
高通平台的init执行动作,描述在device/qcom/common/rootdir/etc/init.qcom.rc文件中。需要在该文件中添加如下代码:
service preload /system/bin/sh /system/bin/preload.shclass late_startuser rootgroup rootoneshot
添加完成后,因为在android 7.0的系统中存在selinux的安全监测,我们需要配置对应的策略。对应高通平台,需要修改device/qcom/sepolicy/msm8937/init_shell.te添加如下代码
allow qti_init_shell apk_data_file:dir { create read write open search getattr setattr add_name };
allow qti_init_shell apk_data_file:file { create read write open getattr setattr };
全部配置完成之后,重编系统,即可。
Android 7.0预制应用为可卸载相关推荐
- android 10.0 预制不可卸载app(RK 展讯 MTK平台都适用)
1.概述 在10.0的系统产品进行定制化开发新手来说,对怎么预制apk感觉很陌生,但是也很简单的,可以把预制的apk放在vendor 目录下 也可以放在package/app下 配置好mk 让系统能编 ...
- android 8.0预装APK为可卸载
需要在如下文件中配置下. vendor/mediatek/proprietary/frameworks/base / data/etc/pms_sysapp_removable_vendor_list ...
- 细数Android 7.0“牛轧糖”的五大缺陷:不支持悬浮窗口
导语:当前,Android 7.0 Nougat(牛轧糖)已经开始被缓慢部署至全球各地的Android设备中.按照惯例,仍然是Nexus设备首先获得谷歌最新的移动操作系统,其他的智能手机则还需要等待一 ...
- visual studio 2017 中默认无法开发 Android 8.0 及以上系统的解决方案
一般默认比较旧有两个原因,系统版本过旧,Visual Studio 版本过旧. 第一步,将windows 更新到最新版,必须是windows 10 并且更新到最新. 第二步,将visual studi ...
- Android 8.1 源码_启动篇(一) -- 深入研究 init(转 Android 9.0 分析)
前言 init进程,它是一个由内核启动的用户级进程,当Linux内核启动之后,运行的第一个进程是init,这个进程是一个守护进程,确切的说,它是Linux系统中用户控件的第一个进程,所以它的进程号是1 ...
- Android 10.0 PackageManagerService(一)工作原理及启动流程-[Android取经之路]
摘要:PackageManagerService是Android系统核心服务之一,在Android中的非常重要,主要负责APK.jar包等的管理. 阅读本文大约需要花费50分钟. 文章的内容主要还是从 ...
- Android 8.0 Oreo 国内可用测试平台上线
Android 8.0 Oreo 已经发布两个月了,无数开发者已经跃跃欲试,想在这个全新版本的 Android 系统上让自己的应用一展身手,我们很清楚,Android 8.0 为了更流畅的系统,以及更 ...
- android 8.0 调系统拍照_Android通知栏微技巧,8.0系统中通知栏的适配
为什么要进行通知栏适配? 不得不说,通知栏真是一个让人又爱又恨的东西. 通知栏是Android系统原创的一个功能,虽说乔布斯一直认为Android系统是彻彻底底抄袭iOS的一个产品,但是通知栏确实是A ...
- android 7.0 禁止 imei,Android一些适配
# Android 版本适配重点 其他细节请查看官网对应版本:https://developer.android.com/preview ## 7.0 1. 后台优化 - 移除了以下静态注册广播通知( ...
最新文章
- Java引入依赖aar_java – 如何将JAR依赖项包含到AAR库中
- word笔记之选择性粘贴-设置默认粘贴为当前格式
- 第十五周程序阅读-范型程序设计(2)
- angular代码分析之异常日志设计
- MySQL基础之控制台常用命令
- orcad如何设置模块化设计_充气膜结构送风设置设计以及通风效果如何呢?
- oracle的排序分页,oracle 排序分页 高效sql语句
- centos 本地化配置
- comsol临时文件夹中有不支持的字符_文件名中不能包含的字符
- 聊聊近期的感受和10月文章精选!
- 平均值 oj 山东科技大学 c 语言作业
- USB学习笔记连载(十五):USB固件更新以及安装驱动
- msysgit中文问题
- 我们用大数据创造没人能理解的人工智能
- SVM(三),支持向量机,线性不可分和核函数
- 在线使用matlab,MATLAB在线版本使用介绍
- 【openv450-samples】像素点聚类EM 图像聚类目标检测
- Ps 原来排版证件照如此简单(╹ڡ╹ )
- 如何认识会计科目,看懂财务报表?
- 服务器 iis ftp配置文件,如何:在 IIS 中创建和配置 FTP 站点
热门文章
- java检测工具_常用Java代码质量检测评估工具
- unity3D射击游戏
- matlab 脉冲压缩算法,线性调频脉冲压缩原理及其MATLAB仿真+程序
- 广和通“乘风破浪”:坚持全球化战略,推动全球5G物联网发展
- 自动判断QQ是否在线,并显示在线状态
- M1芯片已适配达芬奇DaVinci Resolve苹果M1处理器安装新版达芬奇17教程(适配最新M1芯片处理器款mac,支持Big sur )
- 机器人动力学与控制学习笔记(十四)————RBF网络自适应控制
- 用友U8采购暂估案例教程2单到回冲
- 坚持写日记的好处,原来这么重要
- 左手曾国藩,右手胡雪岩读书笔记