Android源码编译_内置apk

在开发过程中,有一部分apk,我们是需要出厂内置好的,例如输入法、客户定制app等,这里内置分两种,一种是只内置apk,不含apk源码,一种是包含apk源码。

一、如何将apk内置到系统

1、首先将apk放到系统源码中

1.1. 可以直接放在 packages/apps/ 下面
1.2. 也可以自己创建一个文件,专门存放需要内置的apk

2、在apk同目录下添加 Android.mk 文件,例如我们这里内置SystemToolService.apk

在这里插入图片描述

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#源码编译出的apk名称
LOCAL_PACKAGE_NAME#存储您要构建的模块的名称,每个模块名称必须唯一,且不含任何空格.如果未设置,则默认使用
LOCAL_MODULE := SystemToolService#编译的java文件文件路径
LOCAL_SRC_FILES := SystemToolService.apk#这个主要用于是 eng、user还是 userdebug 版本参与编译; optional值所有版本都参与编译
LOCAL_MODULE_TAGS := optional#标识所编译模块放置的位置, APPS表示放置在/system/app目录下。
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
#可以为testkey、platform、shared、media、PRESIGNED(使用原签名),platform代表为系统应用
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)

(注:1)默认预置apk到system/app/目录,LOCAL_MODULE_PATH:= $(TARGET_OUT_APPS) 普通系统apk,不可卸载
2)LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS) 放在该目录下的apk可以卸载,卸载后,恢复出厂设置时,应用不会恢复。
3)LOCAL_MODULE_PATH := $(TARGET_OUT)/priv-app/ 放在该目录下的apk可以获得系统权限,系统核心apk,不可卸载(或者加入一句: LOCAL_CERTIFICATE:= PRESIGNED)。
4)?LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app, 预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复

3、添加到系统中编译

打开AndroidAOSP/build/make/target/product/handheld_product.mk,加入我们的apk模块
在这里插入图片描述
然后整体编译,编译成功
在这里插入图片描述
刷机测试,内置完成
在这里插入图片描述

二、如何将apk源码内置到系统

1、准备工作一样,只是将应用的源码,app目录放到源码中

2、创建Android.mk文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)#这个主要用于是 eng、user还是 userdebug 版本参与编译; optional值所有版本都参与编译
LOCAL_MODULE_TAGS   := optional#编译的java文件文件路径
LOCAL_SRC_FILES := $(call all-java-files-under, app/src/main/java)#需要编译的 AndroidManifest.xml 文件
LOCAL_MANIFEST_FILE := app/src/main/AndroidManifest.xml#编译的资源文件文件路径
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/app/src/main/res#编译出的apk的名称
LOCAL_PACKAGE_NAME := XXXX#apk 签名
LOCAL_CERTIFICATE := platform
#LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_SDK_VERSION =currentinclude $(BUILD_PACKAGE)
include $(CLEAR_VERS)
include $(call all-makefiles-under,$(LOCAL_PATH))

3、同上内置apk一样,将模块放到系统编译中,然后就可以编译刷机测试了。

希望对开发的你有所帮助。

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

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

相关文章

从零开始:scikit-learn决策树分类实战

在这个大数据和人工智能盛行的时代,机器学习已经成为了人们日常生活中不可或缺的一部分。从推荐系统到自动驾驶,背后都有机器学习的身影。今天,我们将一起探索一种简单却强大的机器学习算法——决策树,并使用Python中的scikit-lea…

基于RDMA的nfs服务

背景 ib网卡nfs服务实现简单的存储共享,暂时顶替还未上线的存储设备,同时也解决 单纯的使用scp rsync等不支持rdma协议拷贝无法正确使用ib网络 说明 前提是系统上已配置安装好ib网卡驱动,且ib网络正常使用,配置参考 https://bl…

中国各城市金融科技公司数目数据集(2009-2023年)

金融科技(FinTech)是金融与科技深度融合的产物,它利用大数据、云计算、人工智能、区块链等现代信息技术手段,对传统金融产品、业务、流程及服务模式进行革新,从而实现金融服务效率的提升、风险管理的优化以及客户体验的…

【解决方案】令牌桶限流器(Redis+LUA+Python实现)

1 缘起 系统需要对某些功能做限流,因为,这个功能CPU消耗远高于其他功能,最高可占用100%分配的CPU,导致整个系统无法对外提供服务。 为了保证系统稳定运行,以及缓解CPU高消耗,对这些高CPU消耗的功能做限流处理, 而限流方案有多种:计数器算法、滑动窗口算法、漏桶算法和…

C语言 | Leetcode C语言题解之第389题找不同

题目&#xff1a; 题解&#xff1a; char findTheDifference(char* s, char* t) {int n strlen(s), m strlen(t);int ret 0;for (int i 0; i < n; i) {ret ^ s[i];}for (int i 0; i < m; i) {ret ^ t[i];}return ret; }

【C++设计模式】(三)创建型模式:单例模式

文章目录 &#xff08;三&#xff09;创建型模式&#xff1a;单例模式饿汉式懒汉式饿汉式 v.s. 懒汉式 &#xff08;三&#xff09;创建型模式&#xff1a;单例模式 单例模式在于确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。在某些情况下&#xff0…

24.9.1学习心得

VGG&#xff08;Visual Geometry Group&#xff09;网络是由牛津大学视觉几何小组提出的一种卷积神经网络模型&#xff0c;该模型因其在ImageNet大规模视觉识别挑战赛&#xff08;ILSVRC 2014&#xff09;中的优异表现而闻名。VGG模型的特点在于其架构的简单性和一致性&#xf…

XSS 漏洞 - 学习手册

接下来的日子我会按照目录进行笔记的更新&#xff0c;待本模块更新完毕后&#xff0c;删除此条注释。 备注&#xff1a;即使是更新完了&#xff0c;我知道也会有不足&#xff0c;所以会不定期添加或者删除或者优化某些内容&#xff0c;感兴趣的小伙伴可以关注一波。 0x01&#…

通义说【线性代数】线性方程组和线性代数的关系

线性方程组和线性代数之间有非常紧密的关系。事实上&#xff0c;线性方程组是线性代数的一个核心主题&#xff0c;而线性代数提供了解决线性方程组的一系列理论和工具。 线性方程组 线性方程组是由一组线性方程构成的集合&#xff0c;每个方程都表示未知变量的线性组合等于一…

天气数据爬取

目录 历史气象数据获取浏览器访问模拟 历史气象数据获取 主要的python包 requests BeautifulSoup re pandas lxml 浏览器访问模拟 根据浏览器Request-Header参数&#xff0c;让request模拟浏览器行为 import requests from bs4 import BeautifulSoup import re import pandas…

C#线程同步

c#线程同步代码示例 仔细考虑下面这段代码是不是输出0 const int _max 1000000;private int _count 0;void Start(){Task task Task.Run(() >{Decr();});for (int i 0; i < _max; i){_count;}task.Wait();Debug.Log(_count);}void Decr(){for(int i 0; i < _max;…

国内招聘市场发展历程

大数据、人工智能与社交媒体深度融合&#xff0c;传统招聘网站用户粘性低、信息传播效率低、招聘成本开支大、平台运营与宣传成本高昂&#xff0c;返利招聘或许是一种创新性的解决方案。本文将以蜂媒招聘网为例&#xff0c;深入探讨返利招聘模式的社群属性、用户粘度属性及自助…

一个比 Nginx 还简单的 Web 服务器

企业级的 Web 服务器非常多&#xff0c;Nginx、Tomcat、Apache、IIS、FastAPI、Flask 等。今天松哥再给大家介绍一个开源的 Web 服务器&#xff0c;这款服务器具备自动 HTTPS 功能和高度可配置性&#xff0c;它的名字是&#xff1a;Caddy。 Caddy 是一个 Go 编写的 Web 服务器&…

力扣SQL仅数据库(570-579)

570. 至少有5名直接下属的经理 需求&#xff1a; 编写一个解决方案&#xff0c;找出至少有五个直接下属的经理 数据准备&#xff1a; Create table If Not Exists Employee (id int, name varchar(255), department varchar(255), managerId int) Truncate table Employee i…

PyTorch中,动态调整学习率(Learning Rate Scheduling),也可以根据损失函数的损失数值自动调整学习率

在PyTorch中&#xff0c;动态调整学习率&#xff08;Learning Rate Scheduling&#xff09;是一种常用的技术&#xff0c; 用于在训练过程中根据一定的策略调整学习率&#xff0c;以优化模型的训练效果和收敛速度。以下是一些常见的学习率调整策略&#xff1a; 1. **固定步长…

HTML沙漏爱心

目录 写在前面 完整代码 下载代码 代码分析 系列文章 写在最后 写在前面 教你用HTML语言实现炫酷的沙漏爱心,该代码不仅可以用电脑运行,手机、平板也可以直接运行哦。 完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><…

【awk 】如何将一个文件按照同名字段进行合并?

目录 题目解答 题目 使用awk文本处理工具将一个名为c的文件按照同名字段进行合并&#xff0c;c的内容如下所示&#xff1a; 192.168.1.1: httpd 192.168.1.1: tomcat 192.168.1.2: httpd 192.168.1.2: postfix 192.168.1.3: mysqld 192.168.1.4: httpd示例输出&#xff1a; …

06:【江科大stm32】:定时器输入捕获功能

定时器输入捕获功能 1、通过定时器的输入捕获功能测量PWM波的频率2、PWMI模式测量频率和占空比 1、通过定时器的输入捕获功能测量PWM波的频率 定时器标准库相关的编程接口&#xff1a; ①PWM.c文件的代码如下&#xff1a; /*通过定时器TIM2生成一个分辨率为10us,频率为1KHz的…

【微信小程序】Mobx--绑定多个 store 以及命名空间

在实际开发中&#xff0c;一个页面或者组件可能会绑定多个 Store &#xff0c;这时候我们可以将 storeBindings 改造成数组。数组每一项就是一个个要绑定的 Store。 如果多个 Store 中存在相同的数据&#xff0c;显示会出现异常。还可以通过 namespace 属性给当前 Store 开启命…

【Java设计模式】Bridge模式:在Java中解耦抽象与实现

文章目录 【Java设计模式】Bridge模式&#xff1a;在Java中解耦抽象与实现一、概述二、Bridge设计模式的别名三、Bridge设计模式的意图四、Bridge模式的详细解释及实际示例五、Java中Bridge模式的编程示例六、Bridge模式类图七、Java中何时使用Bridge模式八、Java中Bridge模式的…