Android13预装APP到data分区

Android13预装APP到data分区

文章目录

默认内置应用到data会出错userdata.img只有几十k的问题实现data分区作用分区结构空间管理安全与权限

修改步骤与Android11是差不多的,只是有部分代码所在位置不一样。

Android 11®内置APP到data/app

Android 8(O)预置APP到data/app

默认内置应用到data会出错

1970-01-01 08:03:54.499 1177-1177/system_process I/PackageManager: /data/app/xx changed; collecting certs 1970-01-01 08:03:54.547 1177-1177/system_process W/PackageManager: Failed to scan /data/app/xx: Application package com.benew.ntt.cloud not found; ignoring. 1970-01-01 08:03:54.547 1177-1177/system_process W/PackageManager: Deleting invalid package at /data/app/xx

userdata.img只有几十k的问题

往data中加了几百M大小的app,在out/xx/data/app中也看到编译出来了, 但是编译后却发现userdata.img只有90k,是空的分区, 在.mk中修改userdata分区大小,.mk里面默认是64M, 改成512M解决了。

diff --git a/device/sprd/mpool/module/generic/partition/main.mk b/device/sprd/mpool/module/generic/partition/main.mk

index 37b0b79d0e9..d2f2322d6b3 100755

--- a/device/sprd/mpool/module/generic/partition/main.mk

+++ b/device/sprd/mpool/module/generic/partition/main.mk

@@ -25,8 +25,8 @@ endif

$(call md-set, BOARD_BOOTIMAGE_PARTITION_SIZE, 67108864)

$(call md-set, BOARD_CACHEIMAGE_PARTITION_SIZE, 67108864)

-# default value is 64M, using resize to adapter real size

-BOARD_USERDATAIMAGE_PARTITION_SIZE ?= 67108864

+# default value is 512M, using resize to adapter real size

+BOARD_USERDATAIMAGE_PARTITION_SIZE ?= 536870912

实现

Android11中修改的是 frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

Android 13不同,需要修改 frameworks/base/services/core/java/com/android/server/pm/InstallPackageHelper.java 注释掉

else {

throw new PackageManagerException(INSTALL_FAILED_INVALID_INSTALL_LOCATION,

"Application package " + pkg.getPackageName()

+ " not found; ignoring.");

}

完整代码如下

if ((scanFlags & SCAN_REQUIRE_KNOWN) != 0) {

if (mPm.isExpectingBetter(pkg.getPackageName())) {

Slog.w(TAG, "Relax SCAN_REQUIRE_KNOWN requirement for package "

+ pkg.getPackageName());

} else {

PackageSetting known = mPm.mSettings.getPackageLPr(pkg.getPackageName());

if (known != null) {

if (DEBUG_PACKAGE_SCANNING) {

Log.d(TAG, "Examining " + pkg.getPath()

+ " and requiring known path " + known.getPathString());

}

if (!pkg.getPath().equals(known.getPathString())) {

throw new PackageManagerException(INSTALL_FAILED_PACKAGE_CHANGED,

"Application package " + pkg.getPackageName()

+ " found at " + pkg.getPath()

+ " but expected at " + known.getPathString()

+ "; ignoring.");

}

} /*else {

throw new PackageManagerException(INSTALL_FAILED_INVALID_INSTALL_LOCATION,

"Application package " + pkg.getPackageName()

+ " not found; ignoring.");

}*/

}

}

diff --git a/system/core/init/util.cpp b/system/core/init/util.cpp

index d1e518b5795..bee7a8bb70d 100644

--- a/system/core/init/util.cpp

+++ b/system/core/init/util.cpp

@@ -485,7 +485,7 @@ static FscryptAction FscryptInferAction(const std::string& dir) {

std::vector 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) {

diff --git a/system/core/rootdir/init.rc b/system/core/rootdir/init.rc

index 405667cf8df..1a8bc1215eb 100644

--- a/system/core/rootdir/init.rc

+++ b/system/core/rootdir/init.rc

@@ -853,7 +853,7 @@ on post-fs-data

mkdir /data/app-ephemeral 0771 system system encryption=Require

mkdir /data/app-asec 0700 root root encryption=Require

mkdir /data/app-lib 0771 system system encryption=Require

- mkdir /data/app 0771 system system encryption=Require

+ mkdir /data/app 0771 system system encryption=None

mkdir /data/property 0700 root root encryption=Require

# create directory for updated font files.

data分区

安卓的data分区是安卓系统中非常重要的一个分区。

作用

存储用户数据:包括用户安装的应用程序、应用程序产生的数据,如文档、照片、视频、设置等。例如,用户使用相机拍摄的照片、在办公应用中编辑的文档,都会存储在data分区。支持应用运行:应用程序在运行时需要读取和写入数据,这些数据的临时存储和处理大多在data分区进行。比如,游戏在运行过程中保存的临时进度数据等。

分区结构

应用数据存储:每个应用在data分区都有自己独立的存储空间,位于/data/data/目录下,以应用的包名作为文件夹名称。例如,微信的应用数据存储在/data/data/com.tencent.mm/目录中。数据库存储:应用使用的数据库通常也保存在data分区。比如,SQLite 数据库文件会存储在应用的私有目录下。缓存数据:应用的缓存数据也占用data分区空间,用于存储临时文件以提高应用的运行效率。缓存数据一般存放在/data/data//cache/目录下。

空间管理

用户角度:用户可以在设备的设置中查看data分区的使用情况,包括各个应用占用的空间大小。当data分区空间不足时,用户可以通过卸载不常用的应用、清理应用缓存或转移数据到外部存储设备等方式来释放空间。开发者角度:开发者需要合理管理应用在data分区占用的空间,避免过度占用导致用户设备空间不足。例如,及时清理不再需要的缓存文件,优化数据库存储结构以减少空间占用等。

安全与权限

访问限制:data分区具有严格的访问权限控制。每个应用只能访问自己在data分区的私有存储空间,无法直接访问其他应用的数据,以确保用户数据的安全性和隐私性。加密保护:为了进一步保护用户数据安全,安卓系统支持对data分区进行加密。在设备设置中启用加密功能后,data分区的数据将以加密形式存储,只有在用户输入正确的解锁密码或指纹等凭证后,系统才能解密并访问数据。 作者:帅得不敢出门 原创文件谢绝转载收录

相关推荐

蜜蜂的蜂巢有什么用处和功效
beat365官网备用

蜜蜂的蜂巢有什么用处和功效

📅 08-16 👁️ 2307
涉种子刑事案件的几个关键问题研究
谁有365比分链接

涉种子刑事案件的几个关键问题研究

📅 08-18 👁️ 9584
郑州移动卡套餐哪个好
365bet备用官网

郑州移动卡套餐哪个好

📅 08-08 👁️ 7040
刀塔传奇斧王进阶攻略 斧王装备进阶升级一览
365bet备用官网

刀塔传奇斧王进阶攻略 斧王装备进阶升级一览

📅 08-11 👁️ 766
app类型:手机app分类汇总
beat365官网备用

app类型:手机app分类汇总

📅 07-12 👁️ 2210