提示MTK-Android12拷贝apk文件到指定目录-如system目录下文章目录前言一、需求二、困难点三、参考资料-关联资料参考资料实现需求思路四、实现方案配置copy脚本-模块配置预编译模块到系统五、实验结果验证1、源码验证-编译结果验证2、源码验证-避坑指南3、机器开机后-验证结果总结前言这里讲一个拷贝操作就是拷贝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脚本-模块LOCAL_PATH:$(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE:preinstall_apkLOCAL_MODULE_TAGS:optionalLOCAL_SRC_FILES:2_37a55513dd063cbc9527e73f7c0603d1.apkLOCAL_MODULE_CLASS:ETCLOCAL_MODULE_PATH:$(TARGET_OUT)/preloadappLOCAL_INSTALLED_MODULE_STEM:2_37a55513dd063cbc9527e73f7c0603d1.apk include $(BUILD_PREBUILT)配置的另外一个拷贝脚本模块如下LOCAL_PATH:$(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE:copy_apk_folderLOCAL_MODULE_TAGS:optionalLOCAL_SRC_FILES:2_a7d8ca7072b82c5d927eadb352510166.apkLOCAL_MODULE_CLASS:ETCLOCAL_MODULE_PATH:$(TARGET_OUT)/preloadappLOCAL_INSTALLED_MODULE_STEM:2_a7d8ca7072b82c5d927eadb352510166.apk include $(BUILD_PREBUILT)配置预编译模块到系统路径/device/mediatek/system/common/device.mk,其实就是配置预编译的模块PRODUCT_PACKAGESpreinstall_apkPRODUCT_PACKAGEScopy_apk_folder五、实验结果验证1、源码验证-编译结果验证源文件如红色标记编译后生成对应到对应的目录如黄色标记。生成的文件路径/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、机器开机后-验证结果C:\Users\Administratoradb shell k69v1_64_k419:/$ su k69v1_64_k419:/# cd/system/preloadapp k69v1_64_k419:/system/preloadapp # ls-l total275348-rw-r--r--1root root1549397032009-01-0108:002_37a55513dd063cbc9527e73f7c0603d1.apk-rw-r--r--1root root1270452322009-01-0108:002_a7d8ca7072b82c5d927eadb352510166.apk总结这篇知识点实际上还是一个拷贝的技能点在实际需求中常见但是这里拷贝的是特殊的文件apk文件需要对特殊文件拷贝有一定的概念和掌握实际的拷贝知识点涉及到分区知识点、拷贝文件格式、拷贝位置、拷贝方式的一些必备知识点需要掌握拿来主义拿着直接用遇到问题自己多思考然后掌握基本技能