android 11(R)预装APP到data/app目录
android高版本,默认是无法预装app到/data/app目录下的,因为用低版本的方法去修改的话烧录后会无法开机。
步骤
假设是添加myapplication.apk到sdk中的, 烧录后要装到/data/区
- 创建目录packages/apps/myapplication/,并进入这个目录
- 创建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下。
- 把编译好的myapplication.apk放到这个目录下
- 修改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目录相关推荐
- android 8(O)预装APP到data/app目录
需求 想内置应用到/data/用户区,让其可卸载 系统android 8(O) android 11可查看另外一篇<android 11®预装APP到data/app目录> 集成步骤 假设 ...
- android版本相机权限,Android 11系统权限收紧,第三方APP仅支持调用原生相机
Android 和 iOS 本质上的区别在于系统的开源程度,与 iOS 的封闭不同,Android 系统一直都保持着比较开放的环境,给开发者带来了便捷的开发体验,而这也是 Android 系统最大的优 ...
- Android 11.0根据包名授予app所需的权限
在11.0 定制开发中第三方app第一次进入的时候 会弹出授予权限的权限框 有时候觉得挺麻烦的,所以根据客户要求 默认授予权限,这时我们就需要根据包名PackageName 来给与所需要的权限 首选来 ...
- android 11.0 12.0第三方输入法app设置系统默认输入法
1.概述 在11.0 12.0的产品开发中,有功能需要要求设置默认输入法,替换掉系统的输入法,所以这就需要了解设置 输入法的相关功能需求,然后根据输入法包名来设置默认输入法 2.第三方输入法app设置 ...
- Android 11.0 12.0在系统app安装第三方app弹出 解析安装包出现问题 的解决方案
1.概述 在11.0 12.0的系统定制化开发中,对于系统内置app中用代码调用系统安装接口安装app时抛出Permission Denial: that is not exported from U ...
- android手机几个目录的介绍:/system/app; /system/vender;/data/app;/data/dalvik-cache;/mnt/asec;/mnt/secure
看到很多android用户搞不清楚自己手机里这些目录到底是干什么的,索性就一一解释清楚,当然也会涉及到系统软件和用户自己的软件的区分,以及app2sd(软件搬家:从内存搬到SD卡)方面的知识 /sys ...
- 批量提取 data/app目录中的apk文件
我的手机是user版本,data/app目录不能通过adb shell ls读取. $ adb shell ls /data/app ls: /data/app: Permission denied ...
- Android 11适配
Android 11 ( R )适配 1.存储机制更新 Scoped Storage(分区存储) 应用 targetSdkVersion >= 30,强制执行分区存储机制.之前在AndroidM ...
- Android 11 PackageManagerService源码分析(一):PMS启动的总体流程
本文并非从上帝视角来描述PMS的总体设计和运行逻辑,而是记录本人阅读源码的一个过程.分析到后面才会出总结性的文章. 1. PMS概述 PMS是Android系统中负责安装包管理的服务,它的主要职责如下 ...
最新文章
- 联邦学习的隐忧:来自梯度的深度泄露
- OpenCV-Python 相机校准和消除畸变
- 我在使用chrome经常使用的一些技巧
- SAP WebClient UI view controller所有可用的属性列表
- 截屏当前界面_电脑屏幕怎么截取,常见的几种电脑截屏方法
- IOT---(5)Android Things
- python3.x教程_Python3.x基础教程1
- 14.初步解析document的核心元数据以及图解剖析index创建反例
- linux纯终端下中文输入,Linux中文输入法的问题解决
- 注塑行业APS解决方案
- 【学渣告诉你】到底神马是傅里叶级数!!!!!!
- istqb纸质证书_关于istqb证书有效期的阿里云论坛用户知识和技术交流
- java操作svg文件
- eclipse默认指向WebContent目录修改为webRoot 设置说明
- 2D游戏开发 - SkyGameEngine2d坐标系
- spring in action 学习笔记五:@Autowired这个注解如何理解
- 全志JAVA_ubuntu14.04+安卓7.1(全志源码)+openjdk-8编译
- OD修改 exe文件 成功登录,je、jmp、nop、test汇编指令分析《逆向工程》
- 查杀worm病毒,恢复U盘文件
- NSFC: 国内外研究现状的几种节奏