[DESCRIPTION]

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 里面。

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

6)     重新 build 整个工程

注:Google在KK上修改protection Level为System的permission控管机制

如果App使用System Level的permission,需要預置到/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都会被保留。具体可以参考FAQ03437和FAQ05341)。

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

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

如何预置apk(MTK6589)相关推荐

  1. Android系统(274)---如何预置APK

    1, 如何将带源码的 APK 预置进系统? 2, 如何将无源码的APK预置进系统? 3, 如何预置APK使得用户可以卸载,恢复出厂设置时不能恢复? 4, 如何预置APK使得用户可以卸载,并且恢复出厂设 ...

  2. Android: android 如何预置APK

    转自:http://blog.csdn.net/sergeycao/article/details/8198205 一.如何将带源码的APK预置进系统? 1) 在 packages/apps 下面以需 ...

  3. android预置app可卸载实现,Android 8.1预置apk为可卸载

    在MTK Android O1平台预置apk为可卸载时.预置到旧的路径system/vendor/operator/app会编译报错,"You cannot install files to ...

  4. android 内置apk方法,Android预置Apk方法

    因为工作需要,经常要开发和合入系统App,所以在此开篇作为收集和记录Android合入系统应用的方法,以备日后查阅. 一.预置apk方法 Case 1:如何将带源码的APK预置进系统 在 packag ...

  5. android源码预置apk

    本次实践基于android N原生代码,其实没有多大卵用,因为基本每个ROM厂商都有自己的定制方式,但话又说回来,会了总归是好的. 这里我们可以预置包含源码的应用,也可以直接预置第三方apk 增加有源 ...

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

    方案: 第一步:把apk编译到/system/preloadapp/ 第二步:在系统启动时将其安装到/data/app/ 第三步:配置各种相关权限 -------------------------- ...

  7. RK3588S Android预置apk

    在/device/rockchip/rk3588/rk3588s_s下面, 将可卸载(卸载后恢复出厂设置可恢复)的apk拷贝到preinstall_del目录下, 将可卸载(卸载后恢复出厂设置不可恢复 ...

  8. 如何预置Android 手机 APK

    一.如何将带源码的APK预置进系统? 1) 在 packages/apps 下面以需要预置的 APK的 名字创建一个新文件夹,以预置一个名为Test的APK 为例 2) 将 Test APK的Sour ...

  9. 工作笔记 - Android make文件学习(主要是编译Android apk)

    1.MyTest编译到package/apps下(预置带有源码的apk) □在alps/device/qcom/common/base.mk(这里用的是高通机子,其他的系统,如mtk,mk文件的位置视 ...

  10. 以Tethering.apk为例看APEX的搭建过程

    由于系统模块无法像应用软件apk的方式进行更新,在更新系统模块时,往往需要重新烧录整个image才可以完成,所以Android引入的APEX文件格式. 详细概念可参考https://blog.csdn ...

最新文章

  1. C#中自定义属性的例子
  2. 人工智能是如何改变IT运维和DevOps的?
  3. 解决FusionCharts联动的中文乱码.
  4. 线程安全退出 VS PostMessage,SendMessage的区别
  5. python脚本:判断字符是否为中文
  6. 如何才能成为优秀的测试工程师?
  7. 设计模式(十三): 命令模式
  8. word图片嵌入式为何只能看到一部分_如何巧妙选择打印Word文档内容?
  9. sap期初导资产代码_SAP S/4固定资产导入期初科目设置
  10. linux中grep命令,Linux下grep命令详解
  11. iOS 让CoreData更简单些
  12. flex和blazeds_使用BlazeDS和AMF构建Web和桌面应用程序
  13. 文化袁探索专栏——React Native启动流程
  14. Google 镜像站IP地址
  15. 终于有人把 p 值讲明白了!
  16. 模拟调制—DSB信号及生物电信号特性测量分析实验报告
  17. Binding几种绑定方式
  18. 【vue3】 vue3 几款值得推荐的UI组件库
  19. 项目3-2-----多肉
  20. matlab计算特征多项式

热门文章

  1. 横向合计代码 锐浪报表_锐浪报表合并明细网络
  2. android 远程控制工具,安卓版远程协助软件
  3. canoco5主成分分析步骤_主成分分析(PCA)统计与MATLAB函数实现
  4. Ansys APDL的超声换能器的模态分析(更新中)
  5. 批发零售进销存 批发零售管理软件 批发零售店铺管理软件
  6. 【逆向JS】调用网易云音乐搜歌功能并爬取评论Python/Java
  7. pythonlinux安装 pandas_linux pandas安装
  8. 多个安卓设备投屏到电脑_如何将多个安卓手机投屏到电脑端
  9. 凯恩帝串口通信怎么设置_北京凯恩帝(KND)-100M数控系统操作经验与技巧
  10. linux下visual studio code安装cpptools-linux.vsix插件