安卓8预装可卸载应用

环境

系统:Android 8
CPU:MTK
理论上改法适用于其他平台,比如展讯。
不适用于安卓11。安卓11请参照android 11®预装APP到data/app目录

实现

假设要内置test这个应用。
第一步把test添加到系统编译配置中,不同平台或cpu文件不一样。
比如:
device/mediateksample/xx/device.mk
PRODUCT_PACKAGES += test
然后是创建Android.mk, 这一步很关键,很多种写法都可能要问题。

错误写法1

Adroid.mk有问题的写法

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)LOCAL_MODULE := testapp
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_PRIVILEGED_MODULE := true
LOCAL_MODULE_PATH :=  $(TARGET_OUT)/system/vendor/operator/app
include $(BUILD_PREBUILT)

错误写法2

另外一种写法是针对Android新版本的,在安卓8中不能这么写
LOCAL_MODULE_PATH := $(TARGET_OUT)/system/vendor
这种改法会出错:
Non-symlink out/target/product/xx/system/vendor detected!
You cannot install files to out/target/product/xx/system/vendor while building a separate vendor.img!

错误写法3

使用这个目录也有问题:
$(TARGET_OUT)/system/vendor/operator/app
2023-11-01 08:02:24.012 635-635/system_process I/PackageManager: /vendor/operator/app/xx changed; collecting certs
2023-11-01 08:02:24.174 635-635/system_process W/PackageManager: Failed to scan /vendor/operator/app/test: Failed to collect certificates from /vendor/operator/app/test/test.apk

错误写法4

也不能放data/app/目录下
注意如果这么写,可能会出错

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_PRIVILEGED_MODULE := true
LOCAL_DEX_PREOPT:=false
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
include $(BUILD_PREBUILT)

2023-11-01 08:01:01.132 634-634/system_process W/PackageManager: Failed to scan /data/app/test: Failed to collect certificates from /data/app/xx/text.apk

正确写法

Android.mk要按这样写:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_POST_PROCESS_COMMAND := $(shell mkdir -p $(TARGET_OUT_DATA_APPS)/$(LOCAL_MODULE)
LOCAL_POST_PROCESS_COMMAND := $(shell cp -r $(LOCAL_PATH)/$(LOCAL_MODULE).apk $(TARGET_OUT_DATA_APPS)/$(LOCAL_MODULE)/)

修改PackageManagerService.java,注释掉PackageManagerException(INSTALL_FAILED_INVALID_INSTALL_LOCATION
否则启动会报这个异常。

diff --git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
index a4f6eab106..b9f07bf849 100644
--- a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -11795,11 +11795,12 @@ public class PackageManagerService extends IPackageManager.Stub+ " but expected at " + known.codePathString+ "; ignoring.");}
-                    } else {
+                    } /*else {throw new PackageManagerException(INSTALL_FAILED_INVALID_INSTALL_LOCATION,"Application package " + pkg.packageName+ " not found; ignoring.");}
+               //帅得不敢出门    */}}

作者:帅得不敢出门 原创文件谢绝转载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES6与ES5的区别?

目录 一、模块化区别 1.ES6模块化 2.Commonjs模块化 区别? 二、声明变量方式区别? var特点: let特点: const特点: 一、模块化区别 1.ES6模块化 导出: 1.列表导出 export {first,last} 2.重命名导出 export {first as fi,last…

沿着马可·波罗的足迹,看数字云南

刚入行的时候,有位前辈跟我说过一句话:去现场“要像外国人一样去看”,重新审视那些自己可能早已“熟视无睹”的事物。 前不久,我跟随“看见数字云南——云南数字经济媒体探营活动”,奔赴昆明、大理、西双版纳等地&…

多路径传输(MPTCP MPQUIC)数据包调度研究总结

近些年来,以5G和Wifi6为代表的无线通信技术发展迅速,并已经在全世界实现了大规模部署。此外,智能手机等移动设备不断迭代更新,其网络通信能力也持续演进,使得应用同时利用多个不同网卡在多条不同物理链路上&#xff08…

性价比开放式蓝牙耳机推荐哪款、性价比最高的开放式耳机

传统的耳机设计虽然便携,但却可能给一些需要长时间佩戴的用户带来不适。长时间封闭在耳机内可能导致耳朵不透气,甚至引起疼痛。这就是为什么近年来开放式耳机越来越受欢迎的原因。这种耳机设计无需直接插入耳道,采用挂耳的佩戴方式&#xff0…

Python3+selenium自动化测试框架详解

背景 为了更好的发展自身的测试技能,应对测试行业以及互联网行业的迭代变化。自学python以及自动化测试。 虽然在2017年已经开始接触了selenium,期间是断断续续执行自动化测试,因为还有其他测试任务,培训任务要执行… 前期建议大…

W11+Ipv6+可道云+PHPstudy实现私人云盘搭建

W11Ipv6可道云PHPstudy实现私人云盘搭建 一、搭建原因二、搭建过程软件选择服务器环境管理软件私人云盘 可道云搭建小皮面板搭建 三、相关配置程序开机自启远程关机远程开机 四、相关参考 一、搭建原因 工位电脑上一些文件想备份到家里电脑,购买NAS又有点多余&…

获取安卓的Facebook Developer的hashCode

先决条件: Java Development Kit (JDK) 已安装并配置好环境变量。OpenSSL 安装在你的系统上,并且其可执行文件路径也被添加到系统环境变量中。步骤1:创建批处理文件 打开文本编辑器,如Notepad,并输入以下代码: @echo off set /p alias="Enter keystore alias: &quo…

protobuf动态库和静态编译

protobuf-3.6.1路径下: #protobuf-3.6.1 路径下 mkdir build && cd build mkdir release && cd release mkdir -p ../../../install/release#动态库 cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPERelease -DCMAKE_INSTALL_PREFIX../../…

solidity实现ERC1155多代币标准

文章目录 1、NFT - 维基百科2、IERC1155MetadataURI3、IERC1155Receiver4、IERC11555、ERC11556、NFT11557、开源地址 1、NFT - 维基百科 ERC-1155 标准于2018年6月由Witek Radomski、Andrew Cooke、Philippe Castonguay、James Therien、Eric Binet及Ronan Sandford提出。此标…

CSS新手入门笔记整理:CSS列表样式

列表项符号:list-style-type 在HTML中,对于有序列表和无序列表的列表项符号,都是使用type属性来定义的。 语法 list-style-type:取值; list-style-type属性是针对ol或者ul元素的,而不是li元素。 有序列表属性 属性值 说明 …

RabbitMQ常用命令(二)

用户管理 RabbitMQ安装成功后使用默认用户名guest登录 账号:guest 密码:guest 注意:这里guest只允许本机登录访问需要创建用户并授权远程访问命令如下 添加用户:rabbitmqctl add_user {username} {password} rabbitmqctl add_…

从微软官网下载系统镜像重装的方法

一、制作系统镜像介质U盘 1、在一台能够正常进入系统的电脑中登录以下网址:https://www.microsoft.com/zh-cn/software-download/windows10, 点击立即下载工具。 2、在下载完成后,双击打开,选择为另一台电脑创建安装介质&#xf…

2023下半年网络规划设计师上午真题答案及解析

1 eMMB使用的复用技术:OFDM 2.并发性是指同一时间不同时刻 3.无法排除交换机丢包措施:查看交换机路由配置 4.海明码:C0C13,第三位出错1010101 5奎诺斯特定理规定:2W,应该是2倍信道带宽 6安全电子邮件&am…

controller能接收到数据有数据但是前端无法显示数据

又是制作系统时遇到的问题。只是想做个查询商品的页面,结果弄了一天,在网上各种查问题,各种解决办法用在我的代码上,换了无数种关键词搜索终于找到了一条成功解决了问题。 问题描述: 事情是这样的:我要写一…

云原生之深入解析Kubernetes策略引擎对比:OPA/Gatekeeper与Kyverno

一、前言 ① Kubernetes 策略 Kubernetes 的 Pod Security Policy,正如其名字所暗示的,仅是针对 Pod 工作的,是一种用来验证和控制 Pod 及其属性的机制。另外 PSP 只能屏蔽非法 Pod 的创建,无法执行任何补救/纠正措施。而 Gatek…

如何将Java条码Dynamsoft Barcode Reader集成到命令行、GUI和Web应用程序中

Dynamsoft Barcode Reader SDK一款多功能的条码读取控件,只需要几行代码就可以将条码读取功能嵌入到Web或桌面应用程序。这可以节省数月的开发时间和成本。能支持多种图像文件格式以及从摄像机或扫描仪获取的DIB格式。使用Dynamsoft Barcode Reader SDK,…

实验案例二:多表查询

1、表联接类型。 表联接类型可以分为内联接.外联接和交叉联接等。 1.内联接。 内联接〈 inner join)是最常用的-一-种联接方式,只返回两个数据集合之间匹配关系的行,将位于两个互相交叉的数据集合中重叠部分以内的数…

ROS第一个程序——helloworld

目录 一、工作空间的创建 1.创建工作空间并初始化 2.进入 src 创建 ros 包并添加依赖 二、C实现helloworld C源码实现 编辑 ros 包下的 Cmakelist.txt文件 进入工作空间目录并编译 执行 三、python实现helloworld 进入 ros 包添加 scripts 目录并编辑 python 文件 …

推荐6个AI相关开源项目

1.GPT 学术优化 - 一个专注优化论文的 AI 工具 🌐开源地址:https://github.com/binary-husky/gpt_academic 🖥️体验地址:https://huggingface.co/spaces/qingxu98/gpt-academic 📄该工具可以为你的论文提供一键润色…

BLUE引擎开始游戏没反应如何解决

很常见的架设配置出错导致blue引擎开始游戏按钮灰色选择服务器断开点开始游戏没反应怎么办?简单说下这类问题通常 是网关与登录器不配套,替换生成登录器同上生成的网关以及logingate网关IP给占用了或者客户端文件bluem2_client.dat是否和登录器版本不一致。 1、开始…