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

Android系统内置应用

Android系统内置应用

背景
客户提供APK,需要集成进系统,并且不可卸载

Android原生是怎么做的?
已Launcher3为例,apk是位于/system/priv-app/Launcher3目录下

AOSP系统内置app步骤

1.在package/apps/目录下创建相应的文件夹如:MyApp
2.在build/make/target/product/core.mk加入该Module名字
3.再进行整体的make

Android系统内置APK作为系统应用,可分为:

  • 不带任何so的应用
  • 带有so的应用

不带任何so的应用

不带任何so的应用的.mk文件示例

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)
$(warning "MyApp of LOCAL_PATH is $(LOCAL_PATH)")#打印输出
# Module name should match apk name to be installed
LOCAL_MODULE := MyApp
LOCAL_MODULE_TAGS := optional 
#不管是user 还是eng 版本都会编译此app
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)

一些说明:

LOCAL_PATH := $(call my-dir)

Android.mk 文件必须先定义 LOCAL_PATH 变量。此变量表示源文件在开发树中的位置。在上述命令中,构建系统提供的宏函数 my-dir 将返回当前目录(Android.mk 文件本身所在的目录)的路径。

include $(CLEAR_VARS)

CLEAR_VARS 变量指向一个特殊的 GNU Makefile,后者会为您清除许多 LOCAL_XXX 变量,例如 LOCAL_MODULELOCAL_SRC_FILESLOCAL_STATIC_LIBRARIES。请注意,GNU Makefile 不会清除 LOCAL_PATH。此变量必须保留其值,因为系统在单一 GNU Make 执行上下文(其中的所有变量都是全局变量)中解析所有构建控制文件。在描述每个模块之前,您必须声明(重新声明)此变量。

LOCAL_MODULE := MyApp

此变量用于存储模块名称。指定的名称在所有模块名称中必须唯一,并且不得包含任何空格。您必须先定义该名称,然后才能添加任何脚本(CLEAR_VARS 的脚本除外)

LOCAL_MODULE_TAGS := optional 

LOCAL_MODULE_TAGS 模块的tag,为debug eng tests optional samples shell_ash shell_mksh等tag的组合,一个模块可有多个Tag。

  • user:指该模块只在user版本下才编译
  • eng:指该模块只在eng版本下才编译
  • tests:指该模块只在tests版本下才编译
  • optional:指该模块在所有版本下都编译
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

目标文件的后缀。COMMON_ANDROID_PACKAGE_SUFFIX := .apk

LOCAL_CERTIFICATE := PRESIGNED

LOCAL_CERTIFICATE := PRESIGNED表示APK签名使用原来签名,即第三方签名,若要使用系统签名,则可以改为LOCAL_CERTIFICATE := platform系统前面,可以使apk获得系统权限

include $(BUILD_PREBUILT)

BUILD_PREBUILT : 该模块已经预先编译

带有so的应用

带有so的应用,相对于不带so的应用,只是多了一步,需要提取apk里面lib的so文件,进行单独的内置

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
$(warning "MyApp of LOCAL_PATH is $(LOCAL_PATH)")
# Module name should match apk name to be installed
LOCAL_MODULE := MyApp_SO
LOCAL_MODULE_TAGS := optional 
#不管是user 还是eng 版本都会编译此app
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_PREBUILT_JNI_LIBS := lib/x86_64/libnative-lib.so
#@lib/x86/libtest.so \  //注意前面要用tab键隔开#@lib/x86/libtest2.so   //这是你需要添加的so 如果是 armeabi-v7a 直接替换掉armeabi
LOCAL_CERTIFICATE := platform
#表示app已经签名
include $(BUILD_PREBUILT)

参考

  1. Android.mk
  2. Android.mk之模块描述变量
  3. Android 系统预设 App,有什么难的?
  4. Build Cookbook

相关文章:

Android系统内置应用

Android系统内置应用 背景 客户提供APK,需要集成进系统,并且不可卸载 Android原生是怎么做的? 已Launcher3为例,apk是位于/system/priv-app/Launcher3目录下 AOSP系统内置app步骤 1.在package/apps/目录下创建相应的文件夹如&…...

CMMI实施需要准备什么:

1. 人力资源 实施中会涉及到EPG过程改进小组、QA、试点项目团队等人力资源: 1) 专职人员:1-2名 即在CMMI实施推广期内,基本上100%的时间投入。 2) 质量人员:1-更多名 组建质量管理部门,实施体系执行的监控&#x…...

【ARM AMBA AXI 入门 1 - AXI 握手协议】

文章目录 1.1 AXI 双向握手机制简介1.1.1 信号列表1.1.2 双向握手目的1.1.3 握手过程 1.2 数据通路的握手要求1.2.1 读数据通路1.2.2 读地址通路1.2.3 写数据通路1.2.4 写地址通路1.2.5 写回复通路1.2.6 全信号 1.3 不同数据通路间的约束关系1.3.1 读操作约束关系1.3.2 写操作约…...

详解uni-app应用生命周期函数

详解uni-app应用生命周期函数 详解uni-app应用生命周期函数 文章目录 详解uni-app应用生命周期函数前言一、应用生命周期函数二、页面生命周期函数总结 前言 UNI-APP学习系列之详解uni-app应用生命周期函数 一、应用生命周期函数 函数名说明onLaunch当uni-app 初始化完成时触…...

【WebFlux】List指定bean引用对象更新后同步到List

Java 8的流式API实现 如果你想在WebFlux中更新List中指定bean的引用对象并将其同步到List中&#xff0c;你可以使用Java 8的流式API来完成这个任务。 以下是一个例子&#xff1a; List<MyBean> myBeanList new ArrayList<>(); MyBean myBean1 new MyBean(); My…...

【JavaSE】Java基础语法(二十六):Collection集合

文章目录 1. 数组和集合的区别2. 集合类体系结构3. Collection 集合概述和使用【应用】4. Collection集合的遍历【应用】5. 增强for循环【应用】 1. 数组和集合的区别 相同点 都是容器,可以存储多个数据不同点 数组的长度是不可变的,集合的长度是可变的 数组可以存基本数据类型…...

jmeter做接口压力测试_jmeter接口性能测试

jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简单。因为jmeter是java开发的&#xff0c;所以运行的时候必须先要安装jdk才可以。jmeter是免…...

网络编程 lesson5 IO多路复用

select 当需要在一个或多个文件描述符上等待事件发生时&#xff0c;可以使用select函数。 select函数是一个阻塞调用&#xff0c;它会一直等待&#xff0c;直到指定的文件描述符上有事件发生或超时。 select函数详解 int select(int nfds, fd_set *readfds, fd_set *writefd…...

码出高效_第一章 | 有意思的二进制表示及运算

目录 0与1的世界1.如何理解32位机器能够同时处理处理32位电路信号&#xff1f;2.如何理解负数的加减法运算3.溢出在运算中如何理解4.计算机种常用的存储单位及转换5.位移运算规则6.有趣的 && 和 & 浮点数1.定点小数&#xff08;为什么会出现浮点数表示&#xff1f;…...

测试类型(单元、集成、系统或手动测试)

测试类型(单元、集成、系统或手动测试) 单元测试 单元是系统的单个组件&#xff0c;例如类或单个方法。孤立地测试单元称为单元测试。 优点&#xff1a;速度快/易控/易写 缺点&#xff1a;缺乏现实性/无法捕获所有错误&#xff08;例如与其他组件或服务的交互&#xff09; 单元…...

【笔试强训编程题】Day3.(字符串中找出连续最长的数字串 69385)和(数组中出现次数超过一半的数字 23271)

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训编程题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;! 文章目录…...

学懂缓存雪崩,缓存击穿,缓存穿透仅需一篇,基于Redis讲解

在了解缓存雪崩、击穿、穿透这三个问题前&#xff0c;我们需要知道为什么我们需要缓存。在了解这三个问题后&#xff0c;我们也必须知道使用Redis时&#xff0c;如何解决这些问题。 所以我将按照"为什么我们需要缓存"、"什么是缓存雪崩、击穿、穿透"、&qu…...

Android 12.0SystemUI 状态栏下拉和通知栏始终居中

1.概述 在12.0的产品定制化开发中,在系统原生的SystemUI 状态栏下拉和通知栏,默认是根据手势的x 坐标的位置居中显示,但是如果太靠两边感觉不太好,下拉太靠边不太好看所以产品提出不管手势在哪里下滑 都要去下拉和通知栏居中显示 会比较好看些 下面就来实现这个需求 2.Sy…...

面向过程编程和面向对象编程的区别

目录 一、面向过程编程 举个栗子&#xff1a; 二、面向对象编程 继续举个栗子&#xff1a; 三、区别 面向过程编程和面向对象编程是两种不同的编程范式&#xff0c;它们在代码的组织和结构上有所不同。 一、面向过程编程 面向过程编程&#xff08;Procedural Programmin…...

2023年数学与人工智能国际会议——火热征稿中~

会议简介 Brief Introduction 2023年数学与人工智能国际会议(CFMAI 2023) 会议时间&#xff1a;2023年9月22 -24日 召开地点&#xff1a;中国杭州 大会官网&#xff1a;www.cfmai.org 2023年数学与人工智能国际会议(CFMAI 2023)由中山大学主办&#xff0c;CoreShare科享学术交流…...

格式化数字的实用命令:numfmt

在 Linux 系统中&#xff0c;numfmt 是一个用于格式化数字的实用工具。它可以将数字转换为不同的表示方式&#xff0c;如十进制、二进制、字节单位等。本文将详细介绍 numfmt 命令的使用方法&#xff0c;并提供一些适合初学者的示例。 Numfmt 命令语法 numfmt 命令的基本语法如…...

传统的交叉熵函数如何通过平滑处理可以适用于多标签分类任务

传统的交叉熵损失函数通常用于多分类问题&#xff0c;而在多标签分类问题中&#xff0c;每个样本可能属于多个标签&#xff0c;因此需要使用一些新的技术来优化交叉熵损失函数。 一种常用的技术是标签平滑&#xff08;Label Smoothing&#xff09;&#xff0c;它可以优化传统的…...

关于Netty的一些问题

1.Netty 是什么&#xff1f; Netty是 一个异步事件驱动的网络应用程序框架&#xff0c;用于快速开发可维护的高性能协议服务器和客户端。Netty是基于nio的&#xff0c;它封装了jdk的nio&#xff0c;让我们使用起来更加方法灵活。 2.Netty 的特点是什么&#xff1f; 高并发&…...

Java - ThreadLocal数据存储和传递方式的演变之路

Java - ThreadLocal数据存储和传递方式的演变之路 前言一. InheritableThreadLocal - 父子线程数据传递1.1 父子线程知识预热和 InheritableThreadLocal 实现原理1.2 InheritableThreadLocal 的诟病 二. TransmittableThreadLocal (TTL) 横空出世2.1 跨线程变量传递测试案例2.2…...

vuex三问

文章目录 一、什么是vuex&#xff1f;二、为什么使用vuex&#xff1f;三、如何使用vuex&#xff1f;1.首先安装vuex2.注册vue中3.实例化vuex的store4. 挂载在vue实例上5.在组件中就可以通过this.$store对vuex进行操作。 总结 一、什么是vuex&#xff1f; Vuex 是一个专为 Vue.…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

【实施指南】Android客户端HTTPS双向认证实施指南

&#x1f510; 一、所需准备材料 证书文件&#xff08;6类核心文件&#xff09; 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...