方法1:

frameworks/base/services/java/com/android/server/pm/PackageManagerService.java

synchronized (mPackages) {

mHandlerThread.start();
            mHandler = new PackageHandler(mHandlerThread.getLooper());

+            if(SystemProperties.getBoolean("persist.sys.firstRun", true)){
+                File targetDir = new File("/data/app");
+            File dir  = new File("/system/media/app");
+            if(dir.exists()){
+                for(File file : dir.listFiles()){
+                    File targetFile =  new File(targetDir,file.getName());
+           FileUtils.copyFile(file,targetFile);
+            FileUtils.setPermissions(targetFile.getAbsolutePath(), FileUtils.S_IRUSR| FileUtils.S_IWUSR | FileUtils.S_IRGRP| FileUtils.S_IROTH, -1, -1);
+                }
+           }
+            SystemProperties.set("persist.sys.firstRun","false");
+        }

File dataDir = Environment.getDataDirectory();

方法二:

init.rc中添加:

+chmod 0777 /system/bin/preinstall.sh

+service preinstall /system/bin/preinstall.sh

+       class main
+        user root
+        group root
+        oneshot
+        console
+        disabled

on property:dev.bootcomplete=1
    chown media media /sys/class/vm/mirror
    chmod 0664 /sys/class/vm/mirror
+    start preinstall
    write /sys/class/vm/mirror 0
    start usbpm

preinstall.sh

#!/system/xbin/busybox sh

echo "do preinstall job"

if [ ! -e /data/system.notfirstrun ]; then
  echo "do preinstall job"

pm install /system/preinstall/xxx.apk

touch /data/system.notfirstrun

else
   echo "do nothing"
fi

xx.mk

PRODUCT_COPY_FILES += \

$(LOCAL_PATH)/preinstall.sh:system/bin/preinstall.sh

# pre-installed apks
PRODUCT_COPY_FILES += \
        $(call find-copy-subdir-files,*.apk,$(LOCAL_PATH)/apk,system/preinstall)

方法二(二)

init.rc

on property:init.svc.bootanim=stopped
    start preinstall

service preinstall /system/bin/preinstall.sh
    user root
    group root
    disabled
    oneshot

xx.mk

ifeq ($(BUILD_WITH_THIRDPART_APK),true)

PRODUCT_PACKAGES += \
    preinstall.sh \
  $(patsubst vendor/amlogic/prebuilt/preinstallation/%,%,$(wildcard vendor/amlogic/prebuilt/preinstallation/*.apk))
endif

preinstall.sh

#!/system/bin/sh

MARK=/data/local/symbol_thirdpart_apks_installed
PKGS=/system/preinstall/

if [ ! -e $MARK ]; then
echo "booting the first time, so pre-install some APKs."

busybox find $PKGS -name "*\.apk" -exec sh /system/bin/pm install {} \;

# NO NEED to delete these APKs since we keep a mark under data partition.^M
# And the mark will be wiped out after doing factory reset, so you can install^M
# these APKs again if files are still there.^M
# busybox rm -rf $PKGS^M

touch $MARK
echo "OK, installation complete."
fi

Android.mk

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := preinstall.sh
LOCAL_SRC_FILES := preinstall.sh
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT)/bin
include $(BUILD_PREBUILT)

manager_apk := $(patsubst $(LOCAL_PATH)/%,%,$(wildcard $(LOCAL_PATH)/*.apk))
$(foreach t,$(manager_apk), \
$(eval include $(CLEAR_VARS)) \
$(eval LOCAL_MODULE     := $(notdir $(t))) \
$(eval LOCAL_MODULE_TAGS := optional) \
$(eval LOCAL_MODULE_CLASS := ETC) \
$(eval LOCAL_MODULE_PATH := $(TARGET_OUT)/preinstall) \
$(eval LOCAL_SRC_FILES   := $(t)) \
$(eval LOCAL_CERTIFICATE := shared) \
$(eval include $(BUILD_PREBUILT)) \
)
$(LOCAL_INSTALLED_MODULE): $(notdir $(manager_apk))

android 添加预装的方法相关推荐

  1. Android添加单元测试的方法与步骤

    一.修改配置文件AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <man ...

  2. Android添加apn的方法

    对于新的物联网卡,需要添加apn才能正常使用.apn一般由运营商提供,拿到apn后,我们可以使用手工添加apn的方式来验证apn 能否正常使用.手工验证可以后,将可以将apn的信息添加到apns-co ...

  3. android 怎么加链接地址,Android TextView添加超链接的方法示例

    本文实例讲述了Android TextView添加超链接的方法.分享给大家供大家参考,具体如下: public class Link extends Activity { @Override prot ...

  4. android 添加广告用proguard混淆后不显示问题解决方法

    android 添加有米广告,打开proguard混淆后,广告不显示了,解决方法是keep所有引用的jar package 1 -keep public class net.youmi.android ...

  5. android 加网络权限管理,Android添加用户组及自定义App权限的方法

    Android:4.4.4 一.应用场景 在Android设备上,现在我们外接了一个USB转串口的设备,设备节点是/dev/ttyUSB0: # ls -l /dev/ttyUSB0 crw-rw-- ...

  6. Android中添加驱动的方法

    Android 添加驱动的两种方式 下面介绍,在Android系统中如何将驱动添加到kernel中. 要求:将驱动queue.c添加kernel中. 方案:下面介绍2种实现方案.2种方案的本质是一样的 ...

  7. Android滑动冲突解决方法

    Android滑动冲突解决方法 滑动冲突 首先讲解一下什么是滑动冲突.当你需要在一个ScrollView中嵌套使用ListView或者RecyclerView的时候你会发现只有ScrollView能够 ...

  8. android+启动脚本,imx6q android 添加开机启动脚本

    1.在xx/out/target/product/sabresd_6dq/root/init.rc中添加以下内容 ========================================== ...

  9. android添加商品到购物车,Android使用动画动态添加商品进购物车

    本文实例为大家分享了Android添加商品进购物车的具体代码,供大家参考,具体内容如下 1.首先展示下效果图 2.讲一下思路,小球由加号位置运动到购物车位置,首先得获得这两个点在整个屏幕中的坐标,然后 ...

最新文章

  1. html5声频audio和视频video
  2. 【Python】json
  3. JSONObject和JSONArray的关系
  4. android 图片传递,如何使用包在Android活动之间传递图像(位图)?
  5. JVM 内存设置大小
  6. Java泛型程序设计
  7. day19异常File类
  8. java-web 过滤器 amp; 监听器 amp; 拦截器
  9. 《自己动手写操作系统》实践(一)
  10. 关于写的Java书籍进展
  11. Java 学生选课系统 源代码
  12. android safe mode
  13. 笔记本计算机无法上无线网络,笔记本电脑无线网络连接不上原因有哪些【详细介绍】...
  14. 以太坊实战篇-创建并运行一个最简单的转账合约
  15. scrapy settings和管道的深入
  16. Win10系统U盘重装恢复出厂设置的方法
  17. 实验十八 IEEE 802.15.4和ZBR协议仿真
  18. 高精地图:激光雷达点云与高精地图融合
  19. uniapp微信小程序的各种弹框提示(轻提示)
  20. 小学教师计算机培训记录内容,小学教师个人的培训工作总结

热门文章

  1. 动手学深度学习(二十六)——图像增广(一生二,二生三,三生万物?)
  2. nvm 安裝不同版本的node(詳細過程无图)
  3. starGAN复现及遇到问题
  4. html鼠标滚轮不滚动页面,Windows10系统鼠标滚轮无法滚动页面如何解决
  5. 新时代高校辅导员工作素养的新要求及提升路径(非原创)
  6. UDP攻击实战及其简略防御方法
  7. 容器与Servlet生命周期
  8. MSSQL之一 数据库系统简介 与SQL Server 2008概述
  9. python产品发布会_阅读虫师django开发发布会系统以及django开发Web接口分享
  10. mysql多对一数据统计