android高版本,默认是无法预装app到/data/app目录下的,因为用低版本的方法去修改的话烧录后会无法开机。

步骤

假设是添加myapplication.apk到sdk中的, 烧录后要装到/data/区

  1. 创建目录packages/apps/myapplication/,并进入这个目录
  2. 创建Android.mk配置文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := myapplication
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)

LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS) 由这行来控制安装到data/app下。

  1. 把编译好的myapplication.apk放到这个目录下
  2. 修改build/make/target/product/handheld_product.mk
    在PRODUCT_PACKAGES下添加myapplication
PRODUCT_PACKAGES += myapplication

编译成功标志

编译过程会有类似打印,说明编译进去了
[ 99% 2339/2362] Install: out/target/product/ums512_1h10/data/app/myapplication/myapplication.apk

然后会在out/target/product/xx不同平台目录不一样xx/ 目录下生成userdata.img
生成的pac镜像中就会带这个userdata的数据

问题

烧录后会出错, 无法正常开机,会自动进Recovery模式
错误提示:
Can’t load Android system. You’r data may be corrupt.If you continue to get this message, you mayneed to perform a factory data reset and erase all user data stored on this devices.

REASON IS [set_policy_failed:/data/app]

解决

从目录加密策略读取和设置上入手
有多两种修改方法

这处两种都要先修改
frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

diff --git a/base/services/core/java/com/android/server/pm/PackageManagerService.java b/base/services/core/java/com/android/server/pm/PackageManagerService.java
index b96e4b378..f5fd73c5c 100755
--- a/base/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/base/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -12138,11 +12138,12 @@ public class PackageManagerService extends PackageManagerServiceExAbs+ " but expected at " + known.codePathString+ "; ignoring.");}
-                    } else {+                    } /*else {throw new PackageManagerException(INSTALL_FAILED_INVALID_INSTALL_LOCATION,"Application package " + pkg.getPackageName()+ " not found; ignoring.");}
+                    */}}

一种方法

修改system/core/init/fscrypt_init_extensions.cpp
中的FscryptSetDirectoryPolicy()返回为true

diff --git a/core/init/fscrypt_init_extensions.cpp b/core/init/fscrypt_init_extensions.cpp
index fbd8189..a6406d9 100644
--- a/core/init/fscrypt_init_extensions.cpp
+++ b/core/init/fscrypt_init_extensions.cpp
@@ -149,5 +149,6 @@ bool FscryptSetDirectoryPolicy(const std::string& ref_basename, FscryptAction acdelete_dir_contents(dir);return SetPolicyOn(ref_basename, dir);}
-    return false;
+    //return false;
+    return true;}

这个改法比较暴力,把目录加密策略都跳过了。

另一种改法

单独把app目录加上路过名单
system/core/init/util.cpp

diff --git a/core/init/util.cpp b/core/init/util.cpp
index 7c863ae..53e4df6 100644
--- a/core/init/util.cpp
+++ b/core/init/util.cpp
@@ -461,7 +461,7 @@ static FscryptAction FscryptInferAction(const std::string& dir) {std::vector<std::string> directories_to_exclude = {"lost+found", "system_ce", "system_de", "misc_ce",     "misc_de","vendor_ce",  "vendor_de", "media",     "data",        "user",
-            "user_de",    "apex",      "preloads",  "app-staging", "gsi",
+            "user_de",    "apex",      "preloads",  "app-staging", "gsi", "app",};for (const auto& d : directories_to_exclude) {if ((prefix + d) == dir) {

修改system/core/rootdir/init.rc

diff --git a/core/rootdir/init.rc b/core/rootdir/init.rc
index ceb223f..3973f68 100644
--- a/core/rootdir/init.rc
+++ b/core/rootdir/init.rc
@@ -658,7 +658,7 @@ on post-fs-datamkdir /data/app-ephemeral 0771 system system encryption=Requiremkdir /data/app-asec 0700 root root encryption=Requiremkdir /data/app-lib 0771 system system encryption=Require
-    mkdir /data/app 0771 system system encryption=Require
+    mkdir /data/app 0771 system system encryption=Nonemkdir /data/property 0700 root root encryption=Requiremkdir /data/tombstones 0775 system system encryption=Requiremkdir /data/vendor/tombstones 0771 root root

作者:帅得不敢出门

android 11(R)预装APP到data/app目录相关推荐

  1. android 8(O)预装APP到data/app目录

    需求 想内置应用到/data/用户区,让其可卸载 系统android 8(O) android 11可查看另外一篇<android 11®预装APP到data/app目录> 集成步骤 假设 ...

  2. android版本相机权限,Android 11系统权限收紧,第三方APP仅支持调用原生相机

    Android 和 iOS 本质上的区别在于系统的开源程度,与 iOS 的封闭不同,Android 系统一直都保持着比较开放的环境,给开发者带来了便捷的开发体验,而这也是 Android 系统最大的优 ...

  3. Android 11.0根据包名授予app所需的权限

    在11.0 定制开发中第三方app第一次进入的时候 会弹出授予权限的权限框 有时候觉得挺麻烦的,所以根据客户要求 默认授予权限,这时我们就需要根据包名PackageName 来给与所需要的权限 首选来 ...

  4. android 11.0 12.0第三方输入法app设置系统默认输入法

    1.概述 在11.0 12.0的产品开发中,有功能需要要求设置默认输入法,替换掉系统的输入法,所以这就需要了解设置 输入法的相关功能需求,然后根据输入法包名来设置默认输入法 2.第三方输入法app设置 ...

  5. Android 11.0 12.0在系统app安装第三方app弹出 解析安装包出现问题 的解决方案

    1.概述 在11.0 12.0的系统定制化开发中,对于系统内置app中用代码调用系统安装接口安装app时抛出Permission Denial: that is not exported from U ...

  6. android手机几个目录的介绍:/system/app; /system/vender;/data/app;/data/dalvik-cache;/mnt/asec;/mnt/secure

    看到很多android用户搞不清楚自己手机里这些目录到底是干什么的,索性就一一解释清楚,当然也会涉及到系统软件和用户自己的软件的区分,以及app2sd(软件搬家:从内存搬到SD卡)方面的知识 /sys ...

  7. 批量提取 data/app目录中的apk文件

    我的手机是user版本,data/app目录不能通过adb shell ls读取. $ adb shell ls /data/app ls: /data/app: Permission denied ...

  8. Android 11适配

    Android 11 ( R )适配 1.存储机制更新 Scoped Storage(分区存储) 应用 targetSdkVersion >= 30,强制执行分区存储机制.之前在AndroidM ...

  9. Android 11 PackageManagerService源码分析(一):PMS启动的总体流程

    本文并非从上帝视角来描述PMS的总体设计和运行逻辑,而是记录本人阅读源码的一个过程.分析到后面才会出总结性的文章. 1. PMS概述 PMS是Android系统中负责安装包管理的服务,它的主要职责如下 ...

最新文章

  1. 联邦学习的隐忧:来自梯度的深度泄露
  2. OpenCV-Python 相机校准和消除畸变
  3. 我在使用chrome经常使用的一些技巧
  4. SAP WebClient UI view controller所有可用的属性列表
  5. 截屏当前界面_电脑屏幕怎么截取,常见的几种电脑截屏方法
  6. IOT---(5)Android Things
  7. python3.x教程_Python3.x基础教程1
  8. 14.初步解析document的核心元数据以及图解剖析index创建反例
  9. linux纯终端下中文输入,Linux中文输入法的问题解决
  10. 注塑行业APS解决方案
  11. 【学渣告诉你】到底神马是傅里叶级数!!!!!!
  12. istqb纸质证书_关于istqb证书有效期的阿里云论坛用户知识和技术交流
  13. java操作svg文件
  14. eclipse默认指向WebContent目录修改为webRoot 设置说明
  15. 2D游戏开发 - SkyGameEngine2d坐标系
  16. spring in action 学习笔记五:@Autowired这个注解如何理解
  17. 全志JAVA_ubuntu14.04+安卓7.1(全志源码)+openjdk-8编译
  18. OD修改 exe文件 成功登录,je、jmp、nop、test汇编指令分析《逆向工程》
  19. 查杀worm病毒,恢复U盘文件
  20. NSFC: 国内外研究现状的几种节奏

热门文章

  1. spring3和spring4的一些需要注意的地方
  2. 职场如戏,全靠表情!我们天搜科技人人都是行走的表情包
  3. (tensorflow学习) DCGAN 动漫头像生成
  4. 如何快速将WPS转换word格式
  5. 企业网络推广专员浅析企业网络推广专业优化团队更靠谱!
  6. 数组初始化的4种方式
  7. 遍历的几种方式及用法
  8. 鸿蒙系统是手机系统还是电脑系统,除手机、平板、电脑外的设备,华为全面启用鸿蒙系统...
  9. MySQL忘记密码怎么办?MySQL修改密码(简单有效哦)
  10. Jmeter 使用 HMACSHA256 计算验签