一、准备工作

1、可正常编译的Android12的源码

2、三方apk:我这里选择的是一个ChatGPT的apk(下载地址:https://aigcfun.com/app-download),选择这个就是因为其so的平台比较多,可以很好的兼容模拟器,我们下载下来apk后解压可以看到lib目录下支持的so平台有哪些

二、内置

在源码packages/apps目录下以我们需要内置的APK名字来创建一个新的文件夹(我命名其为AiEdu),并将其apk也命名为AiEdu.apk,放入此目录中。在此目录中创建Android.mk文件

2.1、编写Android.mk文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := AiEdu
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
#module的后缀,可不设置
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) #获得apk中各个平台下所有的so
ifeq ($(strip $(TARGET_ARCH)), arm64)
CPU_ARCH := arm64-v8a
else ifeq ($(strip $(TARGET_ARCH)), x86_64)
CPU_ARCH := x86_64
else ifeq ($(strip $(TARGET_ARCH)),arm)
CPU_ARCH := armeabi-v7a
else
CPU_ARCH := x86
endif define get-all-libraries-module-name-in-subdirs
$(sort $(shell cd $(LOCAL_PATH) ; rm -rf lib >/dev/null ; unzip $(LOCAL_MODULE).apk 'lib/${CPU_ARCH}/*.so' -d . >/dev/null ; find -L $(1) -name "*.so"))
endef
ALL_LIBRARIES_MODULE_NAME := $(call get-all-libraries-module-name-in-subdirs, lib/${CPU_ARCH})
LOCAL_PREBUILT_JNI_LIBS := $(ALL_LIBRARIES_MODULE_NAME) #可以为testkey、platform、shared、media、PRESIGNED(使用原签名),platform代表为系统应用
LOCAL_CERTIFICATE := PRESIGNED
#不设置或者设置为false,安装位置为system/app,如果设置为true,则安装位置为system/priv-app
#LOCAL_PRIVILEGED_MODULE := true
include $(BUILD_PREBUILT)

当我们加入到这个地方之后,是可以进行编译,但是无法加入到系统编译中,还需要修改另一个地方配置。

2.2、加入到编译系统

下面我们需要将将创建的AiEdu编译模块加入到编译系统,我们找到/Android-12.1.0_r5/build/make/target/product/handheld_product.mk文件,在文件下面这个位置加入AiEdu模块

2.3、编译

上面配置完成之后,进入源码根目录,重新编译

source build/envsetup.sh # 导入环境
lunch sdk_phone_x86_64 # 选择系统,这里直接使用模拟器sdk_phone_x86_64
make -j4 # 编译

三、问题记录

执行make -j4后会报错



这里乍一看估计99%的人都不知道怎么回事,这里其实可以从提示是可以看出来:

大概是因为新版本artifact_path_requirements有对预装相关东西进行了规则检测,发现system/app/AiEdu/AiEdu.apk这种预制到system/app的情况属于违规了。

那么具体怎么解决呢?

最终在网上找到了解决方案(https://blog.csdn.net/learnframework/article/details/123547033)



build/envsetup.sh 加上export DISABLE_ARTIFACT_PATH_REQUIREMENTS="true"就可以顺利编译通过不再报artifact_path_requirements错误,这里其实就相当于把新版本编译系统中artifact_path_requirements检测关闭就可以

3.3、附一下编译成功图片:

四、来个效果图:

五、参考资料

AOSP Android 10.0无源码内置apk到系统

【Android 12 AOSP学习】Android内置第三方apk到系统

Android 12 S artifact_path_requirements Offending entries Build failed ckati failed with/ aosp预制apk

AOSP12内置三方apk的更多相关文章

  1. mtk预装apk 方案公司内置预装apk

    mtk预装apk 方案公司内置预装apk 韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha == MTK 预知第三方的APK 流程_yua ...

  2. Android开发中内置apk程序

    首先申明,这里的方法介绍是针对我司自己项目中的具体开发板而做的. Mg701内置APK有三种方式 一.         这种方法必须要自己编写Android.mk文件(关于Android.mk可以参考 ...

  3. Android:源码环境下移植第三方的apk内置到ROM(System Image)中

    1. 首先在vendor目录下新建一个the3rdapk的目录,将需要内置的apk丢进去,目录名自己随意定. 2. 在 build/target/product/common.mk最后面,在$(cal ...

  4. android在Data目录内置可删除的APP

    一.准备工作:make_ext4fs.mkuserimg.sh.simg2img,把它们跟要修改的 .img.ext4(或.img)文件放置到同一个目录下 二.转换源文件为img格式( .img则略过 ...

  5. Android源码中内置包含so文件的APK文件

    方法一: 在packages/apps下面以需要预置的APK名字创建文件夹,以预置一个名为Test的APK为例 将Test.apk放到packages/apps/Test下面 在packages/ap ...

  6. android 怎样内置/预置/预编译文件(运行程序,应用程序,apk, jar, lib 等随意文件)到系统中

    方法一:  如果要内置的软件名称为iperf.exe 1. 将iperf.exe放到Codebase的随意一个文件夹下(该文件夹必须可以在搜索Android.mk时被搜索到),比方system/ipe ...

  7. 第三方apk内置因签名导致SystemUI未启动启动问题案例分析

    这个问题是刷完机正常开机后,发现手机无状态栏,下拉通知栏,按音量键也无法出现VolumeDialog,开始看到这个现象感觉是systemUI未编译到版本中去?或者是在systemserver中syst ...

  8. adb将Apk内置到系统中(system/priv-app)

    https://blog.csdn.net/starhosea/article/details/78697007 so文件的处理是目前遇到过的问题.文章中解释了. 正文: 有时候我们在Android ...

  9. 微信内置浏览器不支持APK附件下载的原因

    由于微信的限制,应用文件在内置浏览器中下载全部被屏蔽掉,造成很多人用微信扫描二维码下载时点击下载按钮没反应,我想到的是做一个提示用户在浏览器中打开下载.其实原来很简单,就是判断当前是在微信内置浏览器中 ...

  10. PHP内置Web Server探究(一)启动Cli_Server

    自PHP5.4之后 PHP内置了一个Web 服务器(cli_server),类似于Python的内置server一样,方便我们开发阶段的调试 主要使用场景: 1,没有搭建nginx或apache等第三 ...

随机推荐

  1. .NET 大数据实时计算--学习笔记

    摘要 纯 .Net 自研大数据实时计算平台,在中通快递服务数百亿包裹,处理数据万亿计!将分享大数据如何落地以及设计思路,技术重难点. 目录 背景介绍 计算平台架构 项目实战 背景介绍 计算平台架构 分 ...

  2. 思维分析逻辑 5 DAY

    目录 如何分析 结构分析 对比分析 时间序列 相关性分析 机器学习 报告撰写 报告撰写三原则 标准化报告的组成 AB测试 AB测试流程 AB测试注意事项 如何分析 结构分析 对比分析 对比分析:所有的 ...

  3. Java设计模式-解释器模式Interpreter

    介绍 在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法 分析树,最终形成一颗抽象的语法分析树.这里的词法分析器和语法分析器都可以看做是解释器 解释器模式 ...

  4. 我的小程序之旅三:微信小程序登录流程设计

    登录时序图 获取小程序的AppID和AppSecret 一.微信获取登录用户的openId 1.wx.login() { "code": "192038921jkjKHW ...

  5. 实操开源版全栈测试工具RunnerGo安装(四)Windows安装

    以windows 10系统为例 视频教程:https://www.bilibili.com/video/BV14H4y1C71u/?spm_id_from=333.999.0.0 1.设置手动进入系统 ...

  6. win32 - ReadDirectoryChangesW的使用

    任务:创建一个进程,并在进程内创建一个文本,再创建另一个进程来监控第一个进程内的文本变化 //Process 1 #include <windows.h> #include <ios ...

  7. pinia

    Pinia学习 Vue3中 使用 官网:https://pinia.web3doc.top/introduction.html 安装 yarn add pinia # 或者使用 npm npm ins ...

  8. [2023本地存储方案](https://www.cnblogs.com/fangchaoduan/p/17608006.html)

    2023本地存储方案 本地存储方案 cookie 本地存储:有期限的限制,可以自己设置过期期限.在期限内,不论页面刷新还是关闭,存储的信息都还会存在. localStorage 本地持久化存储:页面刷 ...

  9. channel管道

    channel 如果说goroutine是并发体的话,那么channels则是他们之间的通信机制.一个channel是一个通信机制,它可以让一个goroutine通过它给另一个goroutine发生值 ...

  10. python操作txt文件,去除文件中的隔行空行

    conn = re.sub(result, '\r\n', content) res = "".join( [s for s in conn.strip().splitlines( ...