MTK-Android12拷贝apk文件到指定目录-如system目录下

提示:MTK-Android12拷贝apk文件到指定目录-如system目录下

文章目录

前言

这里讲一个拷贝操作,就是拷贝apk 文件到指定目录或者拷贝到自定义的目录

一、需求

MTK-Android12拷贝apk文件到指定目录-如system目录下。 最终关联的需求是:预制apk 到指定目录,

  • 是为了给客户准备资源,客户上层应用端有自己的业务逻辑。
  • 大多数情况下就是为了实现预安装、引用自己点击点击安装。

为什么不做预安装,直接内置到系统里面去不就行了嘛,问题是:很多app ,特别是低版本、签名等各种原因导致 内置不成功,又不愿意仔细核查问题解决或者解决困难,那么就直接模拟adb install ;pm install直接命令安装了。

二、困难点

以前搞过那么多也总结过那么多的笔记,核心点:

  • 搞清楚Android、Linux 体系下的分区的概念,每个分区是做什么的。搞清楚分区基本的概念、作用、创建时机 等基础知识点。 不然 总觉得自己没问题,实际操作下来就是看不到想要的结果,徒劳。
  • 搞清楚普通文件和特殊文件(apk、可执行文件)等对于Android体系下它就判定你是特殊文件,特殊文件在高版本Android11 之后基本上就因为安全机制不允许作为普通拷贝机制来实现了。 所以,要了解并理解这些基本知识点,不然又是徒劳。

对于 分区概念,参考之前笔记:系统拷贝文件到data分区-/data/system目录-实战拷贝资源到vendor分区

三、参考资料-关联资料

参考资料

如下是之前的一些 拷贝相关的笔记,

  • 有必要了解一下,特别是分区;
  • 可以参考然后有个思路,实际还是得实践;
  • 相关的拷贝需求,可以拿来即用的,思想永远不会变的。

开机内置拷贝二进制文件到/system/bin目录-并实现开机自启二进制脚本服务

预制资源-拷贝文件-/system/lib/ 目录-拷贝可执行文件/system/bin/-拷贝文件到/system/etc/permissions目录

系统拷贝文件到data分区-/data/system目录-实战拷贝资源到vendor分区

Rk-内置应用作为系统Launcher-内置APK-拷贝文件-替换开机动画

拷贝预置资源到vendor分区-/vendor/lib目录/vendor/lib/hw目录-vendor/etc目录-拷贝可执行文件配置

系统拷贝预置资源-拷贝到/system/bin目录-拷贝可执行文件并启动-拷贝到product/etc分区-拷贝到system/etc分区

实现需求思路

如上参考资料还是有必要看的,特别是基础比较弱的,有基础的可以直接略过。

那么基本思路:

  • 直接预编译的方式实现
  • 在编译的过程中拷贝特殊文件 apk 格式的文件

具体来说:如下,写成模块方式,然后在系统配置文件中配置文件

四、实现方案

配置copy脚本-模块

java 复制代码
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := preinstall_apk
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := 2_37a55513dd063cbc9527e73f7c0603d1.apk
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT)/preloadapp
LOCAL_INSTALLED_MODULE_STEM := 2_37a55513dd063cbc9527e73f7c0603d1.apk
include $(BUILD_PREBUILT)

配置的另外一个拷贝脚本模块,如下:

java 复制代码
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := copy_apk_folder
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := 2_a7d8ca7072b82c5d927eadb352510166.apk
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT)/preloadapp
LOCAL_INSTALLED_MODULE_STEM := 2_a7d8ca7072b82c5d927eadb352510166.apk
include $(BUILD_PREBUILT)

配置预编译模块到系统

路径:/device/mediatek/system/common/device.mk,其实就是配置预编译的模块

java 复制代码
PRODUCT_PACKAGES += preinstall_apk
PRODUCT_PACKAGES += copy_apk_folder

五、实验结果验证

1、源码验证-编译结果验证

源文件如红色标记,编译后生成对应到对应的目录如黄色标记。

生成的文件路径:

java 复制代码
/out_sys/target/product/mssi_64_cn/obj/PACKAGING/target_files_intermediates/sys_mssi_64_cn-target_files-1rck61v164bspP17/SYSTEM/preloadapp/

/out_sys/target/product/mssi_64_cn/obj/PACKAGING/system_target_files_intermediates/sys_mssi_64_cn-system_target_files/SYSTEM/preloadapp/

/out_sys/target/product/mssi_64_cn/system/preloadapp/

2、源码验证-避坑指南

如上,看编译后拷贝的文件目录,是 out_sys,并不是out 目录, 这个跟分区有关系,我们是直接拷贝到system 目录下,然后自动创建了一个preloadapp文件夹,所以切不可在out 目录里面找呀找,怎么都找不到,位置搞错了。

3、机器开机后-验证结果

java 复制代码
C:\Users\Administrator>adb shell
k69v1_64_k419:/ $ su
k69v1_64_k419:/ # cd /system/preloadapp
k69v1_64_k419:/system/preloadapp # ls -l
total 275348
-rw-r--r-- 1 root root 154939703 2009-01-01 08:00 2_37a55513dd063cbc9527e73f7c0603d1.apk
-rw-r--r-- 1 root root 127045232 2009-01-01 08:00 2_a7d8ca7072b82c5d927eadb352510166.apk

总结

  • 这篇知识点实际上还是一个拷贝的技能点,在实际需求中常见,但是这里拷贝的是特殊的文件 apk 文件,需要对特殊文件拷贝有一定的概念和掌握
  • 实际的拷贝知识点涉及到分区知识点、拷贝文件格式、拷贝位置、拷贝方式的一些必备知识点,需要掌握
  • 拿来主义,拿着直接用,遇到问题自己多思考,然后掌握基本技能