android源码应用预制

以下是详细的 Android 源码应用预制教程,从环境搭建到应用集成的完整流程:


1. 环境准备

(1) 下载 AOSP 源码
# 安装依赖(Ubuntu 示例)
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig# 初始化仓库(选择对应 Android 版本分支)
repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r1
repo sync -j8
(2) 配置编译环境
source build/envsetup.sh
lunch aosp_arm-eng    # 根据设备选择 target

2. 预制应用方式

方式 1:预制源码(源码集成)

步骤:

  1. 在 AOSP 目录下创建应用源码路径:

mkdir -p packages/apps/YourSystemApp
cd packages/apps/YourSystemApp

2.添加应用源码和资源文件(仿照系统应用结构):

YourSystemApp/
├── AndroidManifest.xml
├── res/
├── src/
└── Android.bp   # 或 Android.mk

3.编写编译配置文件 Android.bp

android_app {name: "YourSystemApp",srcs: ["src/**/*.java"],resource_dirs: ["res"],certificate: "platform",  # 使用系统签名privileged: true,         # 设为特权应用optimize: {enabled: true,},dex_preopt: {enabled: true,},
}
方式 2:预制 APK(预编译集成)

步骤:

  1. 将 APK 文件放入系统目录:

mkdir -p vendor/yourcompany/prebuilt-apps/YourApp
cp YourApp.apk vendor/yourcompany/prebuilt-apps/YourApp/

2.创建编译配置文件 Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := YourApp
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform      # 使用系统签名
LOCAL_PRIVILEGED_MODULE := true    # 特权应用
LOCAL_SRC_FILES := YourApp.apk
include $(BUILD_PREBUILT)

若使用 Soong 构建系统,创建 Android.bp

android_app_prebuilt {name: "YourApp",privileged: true,certificate: "platform",apk: "YourApp.apk",product_specific: true,    # 可选,针对特定设备
}

3. 将应用添加到系统编译

(1) 修改设备 Makefile

在设备配置文件中(如 device/yourcompany/yourdevice/device.mk)添加:

PRODUCT_PACKAGES += \YourSystemApp \YourApp
(2) 配置分区归属
  • 特权应用:放入 /system/priv-app
    在 Android.bp/Android.mk 中设置 privileged: true

  • 普通系统应用:放入 /system/app 或 /vendor/app

4. 配置系统权限

(1) 声明系统权限

在 AndroidManifest.xml 中添加权限和组件声明:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.yourcompany.yourapp"android:sharedUserId="android.uid.system">  <!-- 共享系统 UID --><uses-permission android:name="android.permission.REBOOT" /><applicationandroid:allowBackup="false"android:persistent="true">  <!-- 设为常驻应用 --><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.HOME" /></intent-filter></activity></application>
</manifest>
(2) 添加白名单权限

在 /etc/permissions/ 下创建 privapp-permissions-yourapp.xml

<permissions><privapp-permissions package="com.yourcompany.yourapp"><permission name="android.permission.INSTALL_PACKAGES"/><permission name="android.permission.DELETE_PACKAGES"/></privapp-permissions>
</permissions>

5. 编译并刷机

(1) 全量编译系统
make -j8
(2) 生成刷机镜像
make otapackage   # 生成 OTA 包
# 或直接刷入(需设备连接)
fastboot flash system system.img

6. 验证预制结果

(1) 检查应用安装
adb shell pm list packages -s | grep "com.yourcompany.yourapp"
(2) 检查权限状态
adb shell dumpsys package com.yourcompany.yourapp | grep "granted=true"
(3) 检查应用路径
adb shell pm path com.yourcompany.yourapp
# 预期输出:/system/priv-app/YourApp/YourApp.apk

7. 常见问题处理

问题 1:应用签名失败
  • 原因:未正确配置 LOCAL_CERTIFICATE

  • 解决:确保在 Android.mk/Android.bp 中设置:

LOCAL_CERTIFICATE := platform  # 或 shared、media 等系统签名
问题 2:权限未生效
  • 原因:未在 /etc/permissions/ 添加白名单。

  • 解决:检查 XML 文件名和权限声明是否匹配包名。

问题 3:应用无法开机自启
  • 解决:在 AndroidManifest.xml 中声明 BOOT_COMPLETED 广播接收器:

<receiver android:name=".BootReceiver"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/></intent-filter>
</receiver>

8. 高级配置

(1) 设置默认应用(如 Launcher)
  • 在 overlay/frameworks/base/core/res/res/values/config.xml 中添加:

<string name="default_home" translatable="false">com.yourcompany.yourapp</string>
(2) 禁用用户卸载

在 AndroidManifest.xml 中设置:

<application android:uninstallBlocked="true">

9. 注意事项

  • Android 版本兼容性

    • Android 10+ 需使用 product_services 分区替代部分 /system 路径。

    • Android 13+ 要求动态权限白名单需通过 RoleManager 申请。

  • CTS 测试:确保应用不违反 Google 兼容性要求。

  • 用户数据保留:通过 android:persistent="true" 防止应用数据被清除。


通过以上步骤,您可以将应用深度集成到 Android 系统镜像中,实现开机预装、系统级权限控制等功能。根据实际需求调整配置,并始终遵循 Android 开源项目的设计规范。

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

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

相关文章

神聖的綫性代數速成例題10. N維矢量綫性運算、矢量由矢量組綫性表示、N個N維矢量相關性質

N 維矢量綫性運算&#xff1a; 設&#xff0c;是維矢量&#xff0c;是數。加法&#xff1a;。數乘&#xff1a;。 矢量由矢量組綫性表示&#xff1a; 設是n維矢量&#xff0c;若存在一組數&#xff0c;使得&#xff0c;則稱矢量可由矢量組綫性表示。 N 個 N 維矢量相關性質&…

在CentOS 7.6中安装openGauss 5.1.0 (Preview)数据库并使用Navicat进行远程连接的过程记录

部署环境 华为云Flexus应用服务器 操作系统&#xff1a;CentOS 7.6 openGauss版本&#xff1a;openGauss 5.1.0 (Preview) 参考文档 官方安装文档&#xff1a; https://docs.opengauss.org/zh/docs/5.1.0/docs/InstallationGuide/%E4%BA%86%E8%A7%A3%E5%AE%89%E8%A3%85%E6%B…

SysOM 可观测体系建设(一):万字长文解读低开销、高精度性能剖析工具livetrace

可观测性是一种通过分析系统输出结果并推断和衡量系统内部状态的能力。谈及可观测性一般包含几大功能&#xff1a;监控指标、链路追踪、告警日志&#xff0c;及 Continues Profiling 持续剖析能力。对于操作系统可观测&#xff0c;监控指标可以帮助查看各个子系统&#xff08;I…

Shell脚本学习笔记:从入门到变量(一)

前言 最近在看 Shell 脚本相关的内容&#xff0c;以下是我从入门到变量部分的整理笔记&#xff0c;内容有点多&#xff0c;但都是干货。 先从基础开始&#xff0c;再逐步深入。 一、Shell 脚本入门 1. Linux 如何控制硬件&#xff1f; Linux 靠内核操作硬件&#xff08;CP…

Linux应用:进程间通信

linux的进程间通信概述 进程间通信&#xff08;IPC&#xff0c;Inter - Process Communication&#xff09;是指在不同进程之间进行数据交换和同步的机制。由于每个进程都有自己独立的地址空间&#xff0c;直接共享内存存在困难&#xff0c;因此需要专门的 IPC 机制来实现进程…

el-input 不可编辑,但是点击的时候出现弹窗/或其他操作面板,并且带可清除按钮

1.focus“getFocus”鼠标聚焦的时候写个方法&#xff0c;弹窗起来 getFocus(){ this.定义的弹窗状态字段 true;} 2.点击确定的时候&#xff0c;数值赋值到el-input的输入框,弹窗取消&#xff08;this.定义的弹段字端 false&#xff09; 3.但是会有个问题就是el-input 不可点…

Weblogic未授权远程命令执行漏洞复现

1 漏洞简介 Weblogic是Oracle公司推出的J2EE应用服务器&#xff0c;CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台&#xff0c;CVE-2020-14883允许后台任意用户通过HTTP协议执行任意命令。使用这两个漏洞组成的利用链&#xff0c;可通过一个GET请求在远程W…

海康SDK协议在智联视频超融合平台中的接入方法

一. 海康SDK协议详解 海康SDK协议原理 海康SDK协议是海康威视为开发者提供的一套软件开发工具包&#xff0c;用于与海康设备&#xff08;如摄像头、NVR、DVR等&#xff09;进行通信和控制。其核心原理包括&#xff1a; 网络通信&#xff1a;基于TCP/IP协议&#xff0c;实现设…

五模型对比!Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 光伏功率预测&#xff01;五模型对比&#xff01;Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测(Matlab2023b 多输入单输出) 1.程序已经调试好&#xff0c;替换数据集后&#xff0c;仅运…

20250319在荣品的PRO-RK3566开发板的buildroot系统下使用集成的QT应用调试串口UART3

stty -F /dev/ttyS3 115200 -echo cat /dev/ttyS3 & echo serialdata > /dev/ttyS3 20250319在荣品的PRO-RK3566开发板的buildroot系统下使用集成的QT应用调试串口UART3 2025/3/19 14:17 缘起&#xff1a;在荣品的PRO-RK3566开发板的buildroot系统下&#xff0c;在命令…

Git 使用笔记

参考链接&#xff1a; 创建版本库 - Git教程 - 廖雪峰的官方网站 Git使用教程,最详细&#xff0c;最傻瓜&#xff0c;最浅显&#xff0c;真正手把手教 - 知乎 命令使用 cd f: 切换目录到 F 盘 cd gitCxl 切换目录到 gitCxl 文件夹 mkdir gitCxl 创建新文件…

Xilinx系列FPGA视频采集转HDMI2.0输出,基于HDMI 1.4/2.0 Transmitter Subsystem方案,提供6套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我已有的 GT 高速接口解决方案我已有的FPGA图像处理方案 3、详细设计方案设计框图硬件设计架构FPGA开发板输入Sensor之-->OV5640摄像头动态彩条Video In To AXI4-S…

机器学习面试重点第二部分(动画版)

​ 目录 ​ 第一章、聚类算法 ​1.1 K-means 聚类 ​1.1.1 算法​编辑流程 1.1.2 优缺点 ​1.1.3 应用场景 ​1.2 层次聚类 ​1.2.1 算法流程 1.2.2 优缺点 ​1.2.3 应用场景 ​1.3 DBSCAN ​1.3.1 算法流程 1.3.2 优缺点 ​1.3.3 应用场景 1.3.4. 参数 ε&…

剑指Offer精选:Java与Spring高频面试题深度解析

一、Java底层核心机制 &#x1f525; 问题1&#xff1a;谈谈对Java的理解&#xff1f; &#x1f4cc; 核心技术特性 平台无关性 "一次编译&#xff0c;到处运行"&#xff1a;通过JVM实现跨平台兼容 字节码&#xff08;.class&#xff09;作为中间语言&#xff0c;…

RabbitMQ 集群降配

这里写自定义目录标题 摘要检查状态1. 检查 RabbitMQ 服务状态2. 检查 RabbitMQ 端口监听3. 检查 RabbitMQ 管理插件是否启用4. 检查开机自启状态5. 确认集群高可用性6. 检查使用该集群的服务是否做了断开重连 实操1. 负载均衡配置2. 逐个节点降配&#xff08;滚动操作&#xf…

【正点原子K210连载】第七十六章 音频FFT实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第七十六章 音频FFT实验 本章将介绍CanMV下FFT的应用&#xff0c;通过将时域采集到的音频数据通过FFT为频域。通过本章的学习&#xff0c;读者将学习到CanMV下控制FFT加速器进行FFT的使用。 本章分为如下几个小节&#xff1a; 32.1 maix.FFT模块介绍 32.2 硬件设计 32.3 程序设…

嵌入式开发之STM32学习笔记day08

从“门铃”到“中断”&#xff1a;手把手玩转STM32的外部中断控制器&#xff08;EXTI&#xff09; 引言&#xff1a;为什么我们需要“中断”&#xff1f; &#xff08;类比生活场景&#xff1a;用“快递按门铃”解释中断的意义&#xff09; 想象一下&#xff1a;当你在…

JVM的一些知识

JVM简介 JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java 虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机&#xff1a;JVM、VMwave、Virtual Box。 JVM 和其他两个虚拟机的区别&#xff1a; VMw…

Mac:JMeter 下载+安装+环境配置(图文详细讲解)

&#x1f4cc; 下载JMeter 下载地址&#xff1a;https://jmeter.apache.org/download_jmeter.cgi &#x1f4cc; 无需安装 Apache官网下载 JMeter 压缩包&#xff0c;无需安装&#xff0c;下载解压后放到自己指定目录下即可。 按我自己的习惯&#xff0c;我会在用户 jane 目…

【简单有效!】Gradio利用html插件实现video视频流循环播放

文章目录 前言 & 思路静态资源挂载完整代码结果示例 前言 & 思路 需要利用gradio在前端搭建一个页面&#xff0c;循环播放视频。思路是直接调用gr.HTML插件实现&#xff0c;简单有效&#xff01;&#xff01;&#xff01; 静态资源挂载 app.mount("/static&quo…