Android 内置应用裁剪

文章目录

      • 查询目标 APK 的 Android.mk(或 Android.bp)文件
      • apk裁剪方式
          • 1.注释或删除.mk/.bp文件
          • 2.将 APK 名称加入“OVERRIDES”配置项中
          • 3.自定义“PRODUCT_PACKAGES_REMOVE”配置项

查询目标 APK 的 Android.mk(或 Android.bp)文件

  • 命令

find ./[dir] -type f -name *.mk | xargs grep APKname -in -w
or
find ./[dir] -type f -name *.bp | xargs grep APKname -in -w

  • 功能
    若用户已知目标 APK 名称,且目标 APK 是以.apk 文件的形式存在于源码中,用户可执行此命令
    查询目标 APK 的 Android.mk(或 Android.bp)文件。用户可在返回的 Android.mk(或 Android.bp)
    文件内完成对目标 APK 的裁剪工作。

  • 参数
    dir:文件所在目录,可仅为父目录,也可为父目录及其子目录。若省略此参数,则表示当前目录
    及其子目录
    APKname:APK 名称

  • 示例

/system_mssi_u0$ find ./packages/apps/ -type f -name *.bp | xargs grep CertInstaller -in -w
./packages/apps/CertInstaller/robotests/Android.bp:2:// CertInstaller Robolectric test target. #
./packages/apps/CertInstaller/robotests/Android.bp:17: instrumentation_for: “CertInstaller”,
./packages/apps/CertInstaller/Android.bp:7: name: “CertInstaller”,
/system_mssi_u0$

apk裁剪方式

1.注释或删除.mk/.bp文件

以裁剪MtkContacts为例

  1. 直接删除.mk/.bp文件
    将对应的.mk/.bp文件改名为Android.bp_disable
  2. 使用grep -rn “MtkContacts” device/ 命令搜索,将MtkContacts注释
    在这里插入图片描述
2.将 APK 名称加入“OVERRIDES”配置项中

示例 1:基于 Android.mk 文件,裁剪 Email.apk、Gmail2.apk、Email2.apk 和 Exchange2.apk

  1. 找到一个一定会参与编译的 APK 的 Android.mk 文件;假设,GMailGo.apk 一定会参与编译;
  2. 将待裁剪的具体APK名称(Email 、Gmail2 、Email2 和Exchange2) 添加在 “LOCAL_OVERRIDES_PACKAGES”配置选项中,多个 APK 以空格隔开,如下图:
    在这里插入图片描述
  3. 如 上 图 , Email 、 Gmail2 、 Email2 和 Exchange2 均 被 添 加 在 “LOCAL_OVERRIDES_PACKAGES”中,则编译 GMailGo.apk 时,系统会自动覆盖Email、Gmail2、Email2 和 Exchange2 这四个 APK,从而将这四个 APK 排除在编译选
    项外,达到裁剪的目的。

示例 2:基于 Android.bp 文件,裁剪 QtiCalendar.apk、AospCalendar.apk 和 OtherCalendar.apk

  1. 找到一个一定会参与编译的 APK 的 Android.bp 文件;假设,Calendar.apk 一定会参与编译;
  2. 将待裁剪的具体 APK 名称(QtiCalendar、AospCalendar 和 OtherCalendar)添加在“overrides”配置选项中,具体 APK 名称需要用双引号标记,多个 APK 以逗号隔开,
    如下图:
    在这里插入图片描述
  3. 如上图,QtiCalendar、AospCalendar 和 OtherCalendar 均被添加在“overrides”中,则编译 Calendar.apk 时,系统会自动覆盖 QtiCalendar、AospCalendar 和 OtherCalendar这三个 APK,从而将这三个 APK 排除在编译选项外,达到裁剪的目的。
3.自定义“PRODUCT_PACKAGES_REMOVE”配置项

参考 AOSP 中 PRODUCT_PACKAGES 配置的方式,自定义一个“PRODUCT_PACKAGES_REMOVE”
配 置选项。用户可根据自身项目的需要,将需裁剪的 APK 名称(无需 .apk 后缀) 都添加到“PRODUCT_PACKAGES_REMOVE”项下,从而做到一次性全部裁剪。此方法省去了查找目标 APK 的编译.mk 文件的时间,提高了工作效率。

补丁如下:

在这里插入图片描述
从以上补丁可以发现,只要是添加在“PRODUCT_PACKAGES_REMOVE”配置项下的 APK 都将被裁剪。

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

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

相关文章

LabVIEW机械手视觉引导系统

开发了LabVIEW软件和硬件工具开发的高精度机械手视觉引导系统。系统通过高效的视觉识别和精确的机械操作,提升工业自动化领域的生产效率和操作精度。 项目背景: 随着工业自动化的不断发展,对生产效率和精确度的要求也日益增高。传统的机械手…

Linux 安装JDK8和卸载

目录 一、下载JDK8的rpm包 二、安装JDK 三、设置环境变量 Linux环境下安装JDK的方式有多种,可以通过rpm包、yum安装或者tar.gz压缩包。本章节会教大家通过前两者方式来安装JDK,压缩包的形式因为下载压缩包后上传到服务器环境下,将压缩包解…

Kafka支持SSL/TLS协议技术深度解析

一、Kafka支持SSL/TLS协议技术深度解析 1. SSL/TLS协议概述 SSL(Secure Socket Layer,安全套接层)及其继任者TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。…

Unity 设计模式 之 【什么是设计模式】/ 【为什么要使用设计模式】/ 【架构和设计模式的区别】

Unity 设计模式 之 【什么是设计模式】/ 【为什么要使用设计模式】/ 【架构和设计模式的区别】 目录 Unity 设计模式 之 【什么是设计模式】/ 【为什么要使用设计模式】/ 【架构和设计模式的区别】 一、简单介绍 二、 Unity 设计模式 1、Unity 开发中使用设计模式的特点 2…

【Qt网络编程】Tcp多线程并发服务器和客户端通信

目录 一、编写思路 1、服务器 (1)总体思路widget.c(主线程) (2)详细流程widget.c(主线程) (1)总体思路chat_thread.c(处理聊天逻辑线程&…

汇编(实现C语言程序的调用)

一、ARM汇编指令 mov: 将一个值或寄存器的内容移动到另一个寄存器中。这个指令可以用来赋值。 示例:mov r0, #5 // 将立即数 5 移动到寄存器 r0 add: 执行加法操作,将两个操作数相加,并将结果存储在目标寄存器中。 示例:add r0, …

【Elasticsearch系列十四】Elasticsearch

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

如何使用 Next.js 进行服务端渲染(Server-Side Rendering, SSR)

文章目录 前言步骤 1: 创建 Next.js 应用步骤 2: 创建页面组件示例页面组件 步骤 3: 自定义 _app.js 文件步骤 4: 自定义 _document.js 文件步骤 5: 运行应用步骤 6: 构建和部署总结 前言 Next.js 本身就支持 SSR 并提供了一系列内置的方法来简化这个过程。下面将详细介绍如何使…

MySQL:事务的ACID特性隔离级别脏读、不可重复读、幻读、Next-Key锁——场景复现

目录 1、什么是事务 2、 事务的ACID特性 2.1 事务的隔离性 3、为什么要使用事务? 4、查看支持事务的存储引擎 5、使用事务 5.1 控制事务 5.1.1 开启事务 5.1.2 关闭事务 5.2 开始一个事务,执行修改后回滚 5.3 开始一个事务,执行修…

使用Addressables+SpriteAtlas打包产生冗余

1)使用AddressablesSpriteAtlas打包产生冗余 2)使用SBP打AssetBundle脚本引用丢失 3)Unity构建后处理(IPostprocessBuildWithReport等接口)抛出异常后,构建不会停止 4)Unity 2022.3.0版本使用Oc…

谷歌论文提前揭示o1模型原理:AI大模型竞争或转向硬件

Open AI最强模型o1的护城河已经没有了?仅在OpenAI发布最新推理模型o1几日之后,海外社交平台 Reddit 上有网友发帖称谷歌Deepmind在 8 月发表的一篇论文内容与o1模型原理几乎一致,OpenAI的护城河不复存在。 谷歌DeepMind团队于今年8月6日发布…

svn 1.14.5

svn1.14.5包 https://download.csdn.net/download/weixin_42120669/89765533 svn1.14.5汉化包64位 https://download.csdn.net/download/weixin_42120669/89765533 1.14.2包,含有汉化包 https://download.csdn.net/download/weixin_42120669/89765647

我的AI工具箱Tauri版-VideoClipMixingCut视频批量混剪

本教程基于自研的AI工具箱Tauri版进行VideoClipMixingCut视频批量混剪。 VideoClipMixingCut视频批量混剪 是自研AI工具箱Tauri版中的一款强大工具,专为自动化视频批量混剪设计。该模块通过将预设的解说文稿与视频素材进行自动拼接生成混剪视频,适合需要…

数据结构 ——— 算法的时间复杂度

目录 时间复杂度的概念 时间复杂度函数式 大O的渐进表示法的概念 大O的渐进表示法 时间复杂度的概念 在计算机科学中,算法的时间复杂度是一个函数(数学上的函数式),它定量描述了该算法的运行时间,一个算法执行所耗…

java工具安装教程

提示:先安装软件打开后关闭,在执行魔法操作 解压后会多个文件夹,从文件夹打开 要魔法哪款软件就打开对应的魔法脚本 比如:idea就运行idea魔法 点击打开 显示下面弹窗则成功,点击确定即可 打开IDEA查看:

Arthas thread(查看当前JVM的线程堆栈信息)

文章目录 二、命令列表2.1 jvm相关命令2.1.2 thread(查看当前JVM的线程堆栈信息)举例1:展示[数字]线程的运行堆栈,命令:thread 线程ID举例2:找出当前阻塞其他线程的线程 二、命令列表 2.1 jvm相关命令 2.…

面试题高频之token无感刷新(vue3+node.js)

无感刷新的基本原理 使用刷新令牌(refresh token): ○ 应用程序在首次登录成功后会获得一个访问令牌(access token)和一个刷新令牌(refresh token)。 ○ 访问令牌通常有较短的有效期&#xff0…

人工智能 | 基于ChatGPT开发人工智能服务平台

简介 ChatGPT 在刚问世的时候,其产品形态就是一个问答机器人。而基于ChatGPT的能力还可以对其做一些二次开发和拓展。比如模拟面试功能、或者智能机器人功能。 模拟面试功能包括个性化问题生成、实时反馈、多轮面试模拟、面试报告。 智能机器人功能提供24/7客服支…

Python习题 190:用类编写一个年会抽奖程序

(编码题)用 Python 的类编写一个年会抽奖程序,要求: 公司员工的名单用 Faker 来模拟构造,要求有姓名、部门(自己编写几个随机指定)、工号,名单数据类型为 pandas 的 DataFrame 类型 在抽奖项目的类中,有两个属性,一个是奖池,即要参与抽奖的员工名单,一个是获奖名单…

Python的基础知识,帮助初学者快速上手

Python 是一种广泛使用的高级编程语言,以其简洁的语法、动态类型系统和强大的标准库而著称。这里介绍一些Python的基础知识,帮助初学者快速上手。 1. 环境搭建 安装Python:可以从Python的官方网站(https://www.python.org/&…