从rom层实现
http://blog.chinaunix.net/uid-29535415-id-4168539.html
Android系统量产版本编译都是user版本或者叫release版本,放在system/app目录下的apk是不允许终端用户手动删除的。
要实现能够让手动删除,下面讨论一种方法就是先将预备安装的应用放/system目录下某一个目录中如preloadapp目录,
在首次开机的时候执行一个脚本如preloadapp.sh将该目录的应用拷贝到data/app目录即可

将要预安装的apk放入system/preloadapp目录,第一次开机的时候执行preloadapp.sh脚本
将preloadapp目录的apk拷贝到data/app目录中,然后再开始安装apk,这样安装的apk就能够被手动删除,恢复出厂设置
删除data/app目录的apk,而system/preloadapp目录的apk可以保留。

缺点:同一个apk占用系统两份空间,system/preloadapp 和data/app

1>preload脚本 
点击(此处)折叠或打开
2.     # !/system /xbin /busybox sh
3.     PRELOAD_DEST =/ data /app
4.     PRELOAD_FLAG =${PRELOAD_DEST }/.preloadapp
5.     PRELOAD_SOURCE =/system /preloadapp

7.     if [ ! -d $ {PRELOAD_DEST } ]
8.     then
9.         mkdir - p $ {PRELOAD_DEST }
10.     fi

12.     if [ ! -f $ {PRELOAD_FLAG } ]
13.     then
14.         cp -f $ {PRELOAD_SOURCE }/* $ {PRELOAD_DEST }
15.         echo "abcd" > $ {PRELOAD_FLAG }
16.     fi
2>首次开机的时候执行脚本

点击(此处)折叠或打开
device /xxx /xxxx /init .xxxx .rc中增加如下代码,让android系统启动的时候执行preloadapp.sh脚本
3.         service preloadapp /system /bin /logwrapper /system /xbin /preloadapp .sh
4.             user system
5.              class main
6.              disabled
7.             oneshot
3>需要做preload的apk编译安装路径设置
将所有需要做preload动作的apk可以指定放入system/preloadapp目录即可

展讯内置可卸载情况: http://www.aichengxu.com/view/2185935
内置应用并不复杂,我们都知道手机中有两个目录存放应用的,一个是/system/app 目录,这里面的应用是用户不能卸载的,一个是 /data/app目录,这里的应用是可以卸载的。处理的方法就是在代码中把要内置的应用复制到对应目录就可以了,有lib库的话也别忘记复制到/system/lib目录下,否则应用可能无法使用。前段时间遇到一个需求,要求内置的应用用户可以卸载,但是恢复出厂设置时又可以还原。这个就不是仅仅一个复制操作就能够搞定的了。

展讯代码中默认就内置了几个apk,放在packages\apps\Prebuilt_apps目录下,我们也可以把所有内置的应用都放置在这里,便于管理。

首先在packages\apps\Prebuilt_apps目录下新建4个文件夹。systemapp里面放置不可卸载的应用,dataapp里面放置可以卸载的应用,preloadapp里面放置可卸载又可恢复的应用,lib目录放的是apk中解压出来的so文件。在当前文件的Android.mk文件(如果没有就新建一个)中,写入如下代码。

[plain] view plaincopy

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

#创建文件夹的命令

LOCAL_POST_PROCESS_COMMAND := $(shell mkdir $(TARGET_OUT)/app)

LOCAL_POST_PROCESS_COMMAND := $(shell mkdir $(TARGET_OUT_DATA)/app)

LOCAL_POST_PROCESS_COMMAND := $(shell mkdir $(TARGET_OUT)/preloadapp)

LOCAL_POST_PROCESS_COMMAND := $(shell mkdir $(TARGET_OUT)/lib)

#复制所有apk文件到system/app目录下

PRODUCT_COPY_FILES += \

$(call find-copy-subdir-files,*.apk,$(LOCAL_PATH)/systemapp,system/app)

#复制所有apk文件到data/app目录下

PRODUCT_COPY_FILES += \

$(call find-copy-subdir-files,*.apk,$(LOCAL_PATH)/dataapp,data/app)

#复制所有apk文件到system/preloadapp目录下

PRODUCT_COPY_FILES += \

$(call find-copy-subdir-files,*.apk,$(LOCAL_PATH)/preloadapp,system/preloadapp)

#复制所有so文件到system/lib目录下

PRODUCT_COPY_FILES += \

$(call find-copy-subdir-files,*.so,$(LOCAL_PATH)/lib,system/lib)

现在要内置那种应用就直接放到相应的文件夹中就可以了,是不是很方便呀。

前面两种apk基本上这样就可以结束了。要实现preloadapp中的可卸载又可恢复还得改点东西

在\3rdparty\tools\tools-binary\special\tools目录下新建文件preloadapp.sh 代码如下

[plain] view plaincopy

#!/system/xbin/busybox sh

PRELOAD_DEST=/data/app

PRELOAD_FLAG=${PRELOAD_DEST}/.preloadapp

PRELOAD_SOURCE=/system/preloadapp

if [ ! -d ${PRELOAD_DEST} ]

then

mkdir -p ${PRELOAD_DEST}

fi

if [ ! -f ${PRELOAD_FLAG} ]

then

files=$(ls ${PRELOAD_SOURCE}/)

for i in ${files};do

cat ${PRELOAD_SOURCE}/${i} > ${PRELOAD_DEST}/${i}

done

echo "abcd" > ${PRELOAD_FLAG}

fi

大概得意思就是一大堆复制的动作了。

然后在\3rdparty\tools\tools-binary\special\build.sh里面加上一句

[plain] view plaincopy

tools/preloadapp.sh:/system/xbin

最后在\3rdparty\tools\tools-binary\special\init.3rdparty.rc

[plain] view plaincopy

service boot_complete /system/xbin/boot_must_complete.sh

oneshot

下面增加

[plain] view plaincopy

#CaineZhu add 20130219

#copy the preloadapp to data/app

service preloadapp /system/xbin/preloadapp.sh

oneshot

使得恢复出厂设置的时候会再次把apk复制到data下面。

这样就可以实现某些apk可以被卸载但恢复出厂设置又能被恢复了。

android预装内置可卸载的应用相关推荐

  1. android系统版本卸掉,使用内置软件卸载最新版本的Android

    Power Software Park提供了最新版本的内置软件卸载Android. 一个实用且功能强大的手机软件,它可以帮助您卸载手机中无用的系统程序,使您的手机更加简单方便,并且不会被太多无用的混乱 ...

  2. android 10.0 展讯 MTK内置可卸载app

    1.概述 在进行10.0的产品定制化开发中,展讯内置可卸载恢复的app 其实把apk编译到system/proloadapp 目录下即可 2.展讯 MTK内置可卸载app的实现步骤 实现方式: 1 预 ...

  3. 使用adb命令清除预装内置的第三方app

    一些通过PC端的软件获取root权限的工具,会在获取root权限的过程中为你的设备恶意安装一些app,而且你会发现app没有卸载这个选项,这时候你肯定很蒙圈了吧,接下来就教大家如何解决问题,对于没有学 ...

  4. wptx64能卸载吗_Win10如何卸载应用?Win10内置应用卸载方法

    Win10如何卸载应用?Win10默认预装集成了很多应用,这是大多数用户都了解的共识,从个人角度上来看,其他还是很好看的,如果真的需要使用以下Win10内置应用卸载方法来处理,可能会让你失望的,毕竟T ...

  5. 配置Android Studio内置jre的环境变量

    下载Android Studio时,包括jre.将这个jre配置过环境变量后,就可以在全局使用了.但是和官网安装jre的环境配置略有不同. 图一  jre官网下载,安装后的目录 图二  Android ...

  6. Android获取内置sdcard跟外置sdcard路径

    Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标准接口. 2.得到上一级文件夹目录 3.得到该目录的所有文 ...

  7. android 获取sdcard 禁用sdcard,Android获取内置sdcard跟外置sdcard路径

    Android获取内置sdcard跟外置sdcard路径 Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标 ...

  8. android 人脸识别demo,Android Camera 内置人脸识别的Demo

    CameraFace Android Camera 内置人脸识别的Demo 通过Android源生API支持的人脸识别FaceDetection,获取到脸部矩形坐标,左右眼坐标,嘴坐标通过View动态 ...

  9. 实现base64格式的amr音频文件在IOS、android微信内置浏览器的播放

    参考文档: 1.https://github.com/yxl/opencore-amr-js   (将amr文件转为wav格式的编解码项目) 因为项目需要,要将amr的base46格式的音频文件在IO ...

最新文章

  1. pyqt5程序发生错误不中断_关于Windows页面错误的一些基础概念
  2. 从find_vma和find_vma_prev看内核
  3. java逻辑可以判断文本么_Shell逻辑判断符号_Shell中的_与_或_非_Shell_-a_-e_!作用
  4. 【NLP技术应用】工业界求解NER问题的12条黄金法则
  5. 分析BootstrapClassLoader/ExtClassLoader/AppClassLoader的加载路径 及父委托机制
  6. Aerodynamic CodeForces - 1300D(计算几何判断是否为中心对称图形)
  7. leetcode310. 最小高度树(bfs)
  8. c语言传入参数不正确,请高手看看一下程序怎么回事啊?老是提示传参数错误...
  9. ZZULIOJ 1159: 最大的两个数(指针专题)
  10. linux mint 16 安装chrome 浏览器
  11. java setvalue函数,Java JavaTuples setValue()用法及代码示例
  12. Latex中的caption
  13. tilera netlib应用层协议栈-IP层实现方式
  14. 选择H5响应式网站建设的主要原因
  15. 深信服校园招聘c/c++软件开发A卷
  16. 基于高通芯片组的广和通FM150 5G模组GPS测试演示
  17. 利用GPS定位[android]
  18. 怎么利用粉丝圈这个微信社区工具做好社群营销?我们是做教育行业
  19. 使用Github+Markdown搭键自己的笔记本
  20. 产品经理七个局——破局之术

热门文章

  1. 机器人做冰沙,假肢能摘葡萄!马斯克秒变复古风……|技术前沿洞察
  2. PlayWright自动化测试工具
  3. SVN——SVN项目迁移到GIT
  4. 计算机在音乐教学的应用论文,【音乐教学论文】信息技术在音乐教学的应用(共2464字)...
  5. 基于C51的DHT11(温湿度传感器)编程(详解)
  6. 飞思卡尔直立车结构_生而不凡从容驾驭,出行新利器PIOWAY X1平衡车,平衡车中的越野车...
  7. nodejs实现电脑版微信dat文件批量转化为jpg图片
  8. 美团外卖的两个“健康闭环”
  9. 为什么企业都独爱客服聊天助手
  10. 鱼C工作室c++(P40-42)命名空间和模块化编程