MTK_android_如何预置APK(整合MTK回复)

2024-01-18 20:18

本文主要是介绍MTK_android_如何预置APK(整合MTK回复),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1, 如何将带源码的 APK 预置进系统?

2, 如何将无源码的APK预置进系统?

3, 如何预置APK使得用户可以卸载,恢复出厂设置时不能恢复?

4, 如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复?

 [SOLUTION]

一、如何将带源码的APK预置进系统?

1)     在 packages/apps 下面以需要预置的 APK的 名字创建一个新文件夹,以预置一个名为Test的APK 为例

2)     将 Test APK的Source code 拷贝到 Test 文件夹下,删除 /bin 和 /gen 目录

3)     在 Test 目录下创建一个名为 Android.mk的文件,内容如下:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_PACKAGE_NAME := Test

include $(BUILD_PACKAGE) 

4)     打开文件 build/target/product/${Project}.mk (其中 ${Project} 表示工程名)

将 Test 添加到 PRODUCT_PACKAGES 里面。

5)     重新 build 整个工程

 

二、如何将无源码的 APK 预置进系统?

1)     在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例

2)     将 Test.apk 放到 packages/apps/Test 下面

3)     在  packages/apps/Test 下面创建文件 Android.mk,文件内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Module name should match apk name to be installed

LOCAL_MODULE := Test

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

LOCAL_CERTIFICATE := PRESIGNED

include $(BUILD_PREBUILT)

4)     打开文件 build/target/product/${Project}.mk (其中 ${Project} 表示工程名)

        将 Test 添加到 PRODUCT_PACKAGES 里面。


        注意:在这一步这里是改在修改build\target\product\common.mk的内容:

        PRODUCT_PACKAGES := \  在其累加下去;


5)     将从Test.apk解压出来的 so库拷贝     到alps/vendor/mediatek/${Project}/artifacts/out/target/product/${Project}/system/lib/目录下,若无 so 库,则去掉此步;

        注意:Test.apk双击打开文件,在其根目录的LIB文件下,查找相应文件,这里注意有些.apk包中无如“armeabi-v7a”文件夹,那么首先查看有没有arm开头的文件夹,如果无arm开头的文件夹,那么再查找有无v7a的文件夹;


6)     重新 build 整个工程

注:GoogleKK上修改protection LevelSystempermission控管机制

如果App使用System Levelpermission,需要預置到/system/priv-app底下 (原在/system/app)

举例来讲:

关于获取副SD卡的写入权限的案例,App需要在AndroidManifest.xml宣告WRITE_MEDIA_STORAGE permission获取副卡的写入权限

(Ref: KK/alps/frameworks/base/core/res/AndroidManifest.xml)

已知android.permission.WRITE_MEDIA_STORAGE属于SystemOrSignature level的permission,定义如下:

KK上,您需要采用以下方法,获取该permission:

修改Android.mk,增加LOCAL_PRIVILEGED_MODULE := true,以声明app需要放在/system/priv-app下。

 

三、如何预置APK使得用户可以卸载,恢复出厂设置时不能恢复?

1)     在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例

2)     将 Test.apk 放到 packages/apps/Test 下面;

3)     在  packages/apps/Test 下面创建文件 Android.mk,文件内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Module name should match apk name to be installed

LOCAL_MODULE := Test

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

LOCAL_CERTIFICATE := PRESIGNED

LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)

include $(BUILD_PREBUILT)

4)     打开文件 build/target/product/${Project}.mk (其中 ${Project} 表示工程名)

将 Test 添加到 PRODUCT_PACKAGES 里面。

5)     重新 build 整个工程

注意:这个比不能卸载的多了一句

LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)

 

四、如何预置APK使得用户可以卸载,并且恢复出厂设置时能够恢复?

有两种方法:

方法一:预置apksystem/vendor/operator下面

具体做法如下:

packages/apps下面以需要预置的 APK 名字创建文件夹,以预置一个名为Test的APK为例:

1)     将Test.apk 放到 packages/apps/Test 下面;

2)     在packages/apps/Test下面创建文件 Android.mk,文件内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Module name should match apk name to be installed

LOCAL_MODULE := Test

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

LOCAL_CERTIFICATE := PRESIGNED

LOCAL_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app

include $(BUILD_PREBUILT) 

3)     打开文件 build/target/product/${Project}.mk (其中 ${Project} 表示工程名), 将 Test 添加到 PRODUCT_PACKAGES 里面

4)     重新 build 整个工程

 

方法二:使用MTK_SPECIAL_FACTORY_RESET,再配合.keep_list / .restore_list

为了让用户在将预置的 APK 卸载后,恢复出厂设置时能恢复,敝司做了一个 Feature,但在ALPS.GB.TDFD.MP.V1.7和 ALPS.GB.FDD2.MP.V4.7版本后支持,若贵司版本低于此版本,请申请 Patch ALPS00092543

大致的做法是:
  - 在vendor/mediatek/project_name/artifacts/out/target/product/project_name/system目录下新建一个名为appbackup的文件夹,将该应用的apk文件copy到appbackup文件夹下
  - 在mediatek/config/project_name/ProjectConfig.mk文件中添加定义:MTK_SPECIAL_FACTORY_RESET=yes
   - 在vendor/mediatek/project_name/artifacts/out/target/product/project_name/data/app下创建一个.restore_list,并且在其中添加语句:
/system/appbackup/xxx.apk(注意,.restore_list中的每一行都要以"/system” 开头)

当卸载了data/app下的apk后,再恢复出厂设置,系统会从 .restore_list 中读取apk的名字,然后从 appbackup 文件中把apk重新拷贝到data/app下,从而恢复data/app下已经卸载了的apk。

同时,还需要在vendor/mediatek/project_name/artifacts/out/target/product/project_name/data/app目录下创建一个空文件,命名为.keep_list(.keep_list的用途是,如果安装了A,B,C三个APK到DATA,在恢复出厂设置时,想要将A保留,那么就将A写入到.KEEP_LIST,这样,A会被保留,B,C会被删除。如果没有这个文件,那么所有的APK都会被保留。具体可以参考FAQ03437FAQ05341)。

以上操作过程,DCC 上面也有相应的文档可供参考,文档的名字叫: Android SD upgrade application note.docx,里面有一项:MTK special factory reset,就详细地介绍了以上操作步骤。

注:该方法从kk开始不建议使用,原因:从KK版本开始,DVMdex文件的路径变成了绝对路径,而PMSinstalld用的都是文件路径,如果用MTK_SPECICAL_FACTORY_RESET配合.restore_list的方式恢复apk的话,这种上下不sync会导致一些问题,比如:恢复出厂设置后三方应用报错、恢复出厂设置后user版本move to phonestorage报错、多次恢复出厂设置开机提示"Android系统正在升级"等。

这篇关于MTK_android_如何预置APK(整合MTK回复)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/620136

相关文章

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

SpringBoot整合Dubbo+ZK注册失败的坑及解决

《SpringBoot整合Dubbo+ZK注册失败的坑及解决》使用Dubbo框架时,需在公共pom添加依赖,启动类加@EnableDubbo,实现类用@DubboService替代@Service,配... 目录1.先看下公共的pom(maven创建的pom工程)2.启动类上加@EnableDubbo3.实

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

springboot整合TDengine全过程

《springboot整合TDengine全过程》:本文主要介绍springboot整合TDengine全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境准备JDBC-JNI方式准备依赖实体类Mapper配置类测试类RESTful方式实体类配置类测试类总结