要求在产品中预装大量的第三方app,apk文件有600M多,加上相关资源文件,共计4G。
如何把如此多的文件在安装时内置到系统成了问题。解决方法有三:
1 在update.zip中实现复制。写updater-script 通过使用script 复制。见我的另一篇自定义updater-script的文章。
缺点:script脚本需要自己写,不能随make生成。
2 在update.zip中实现复制。在recovery.c中实现。
缺点:SDCARD fat对zip文件有大小限制。
3 在第一次系统启动后实现自动安装。缺点:太慢,大概需要30分。
方法二的实现:
-
方法二的实现:
-
-
实现的位置在流程中见图片。
-
在install_package()的结尾的try_update_binary函数结尾(); 在src/bootable/recovery/install.c
-
-
下面是具体实现:
-
-
-
-
static
char
*res_list[] = {
"/sdcard/ res1.zip"
,
"/sdcard/ res2.zip"
};
-
-
static
void
unzip_res_to_data(
void
)
-
{
-
int
i = 0;
-
-
for
(i = 0; i <
sizeof
( res_list)/
sizeof
(
char
*); ++i)
-
{
-
ZipArchive zip_res;
-
int
err = mzOpenZipArchive( res_list[i], &zip_res);
-
if
(err != 0) {
-
LOGI("Can't open %s\n"
, res_list[i]);
-
}
-
else
{
-
LOGI("start update %s\n"
, res_list[i]);
-
-
struct
utimbuf timestamp = { 1217592000, 1217592000 };
-
bool
success = mzExtractRecursive(&zip_res,
"res-private"
,
"/data/res-private"
,
-
MZ_EXTRACT_FILES_ONLY, ×tamp,
-
NULL, NULL);
-
LOGI("update %s %s\n"
, res_list[i], ((success==
true
)?
"success"
:
"failed"
));
-
mzCloseZipArchive(&zip_res);
-
}
-
}
-
-
dirSetHierarchyPermissions("/data/res-private"
, 1000, 1000, 0777, 0666);
-
}
-
-
-
void
cpfiles(){
-
-
ZipArchive zip_apps;
-
int
err = mzOpenZipArchive(
"/sdcard/myapps.zip"
, &zip_apps);
-
if
(err != 0) {
-
LOGI("Can't open %s\n"
,
"/sdcard/myapps.zip"
);
-
}
-
else
{
-
-
if
(mount(
"/dev/block/mmcblk0p13"
,
"/data"
,
"ext4"
,
-
MS_NOATIME | MS_NODEV | MS_NODIRATIME, ""
) < 0) {
-
fprintf(stderr, "%s: failed to mount"
, strerror(errno));
-
}
-
-
LOGI("start update 3rd-apps\n"
);
-
-
struct
utimbuf timestamp = { 1217592000, 1217592000 };
-
bool
success = mzExtractRecursive(&zip_appss,
"app"
,
"/data/app"
,
-
MZ_EXTRACT_FILES_ONLY, ×tamp,
-
NULL, NULL);
-
dirSetHierarchyPermissions("/data/app"
, 1000, 1000, 0771, 0644);
-
LOGI("update myapps %s\n"
, ((success==
true
)?
"success"
:
"failed"
));
-
mzCloseZipArchive(&zip_apps);
-
-
-
unzip_res_to_data();
-
-
scan_mounted_volumes();
-
const
MountedVolume* vol = find_mounted_volume_by_mount_point(
"/data"
);
-
if
(vol == NULL) {
-
fprintf(stderr, "unmount of %s failed; no such volume\n"
,
"/data"
);
-
} else
{
-
unmount_mounted_volume(vol);
-
}
-
}
-
-
}
-
-
-
-
static
int
-
try_update_binary(const
char
*path, ZipArchive *zip) {
-
-
.......
-
-
cpfiles();
-
return
INSTALL_SUCCESS;
-
}
分享到:
相关推荐
在非谷歌认证或者定制版的Android设备上,可能预装的系统并未包含完整的GMS。因此,为了使用Google应用和享受完整的Android体验,用户需要手动进行刷机。这个过程通常涉及到下载GMS服务包,并通过特定的工具或方法将...
预装APK是将应用软件预装到设备中,文档描述了默认预装APK以及将其预装到system/app和system/preinstall目录的过程。 #### 2.3 配置data分区 这一部分讲述了如何配置Android系统的data分区,这对于设备的数据存储和...
这款APK是三星原厂预装的一部分,旨在优化用户体验,尤其对于经常处理邮件的用户来说,它具有较高的实用价值。 首先,我们要了解的是“APK”是什么。APK是Android应用程序包(Android Package)的缩写,是Google ...
1. **Flashify.apk**:这是一个应用,用于在Android设备上方便地安装和管理Recovery。Flashify可以让你轻松地刷入新的Recovery映像,而无需通过电脑或其他复杂方法。用户只需在手机上安装此应用,按照指示操作,就能...
- ROM在Android设备中通常指的是预装的操作系统或者自定义的系统版本。 - 用户可以通过刷入不同的ROM来升级或自定义自己的设备。 4. **Recovery Mode(恢复模式)** - Recovery Mode是一种特殊的系统模式,可以...
在Android系统中,root权限类似于Windows系统的管理员权限,它允许用户对系统进行深度修改,包括删除预装应用、优化性能、自定义界面等。然而,这也意味着可能会影响设备的稳定性和保修政策,因此需谨慎操作。 ...
- **默认预装APK**: 在`build.prop`文件中指定预装的APK。 - **预装位置**: - `system/app`: 一般用于预装系统级应用。 - `system/preinstall`: 用于预装第三方应用。 - `system/precopy`: 类似于预安装,但这些...
ROOT是Android操作系统中的一个术语,指通过特殊方法绕过系统安全限制,使用户能够完全控制设备。这通常涉及到利用系统漏洞或利用特定软件来获取权限。ROOT后,用户可以安装各种需要超级用户权限的应用,或者进行...
- **Preinstall预装**:使用preinstall工具预装APK。 - **如何控制GPIO**: - **定义需要控制的GPIO**:定义需要控制的GPIO引脚。 - **配置boot阶段初始化的gpio功能**:配置启动阶段的GPIO初始化。 - **控制...
Android 获取手机 Root 权限的简便方法 Android 操作系统是一款流行的移动操作系统,具有开放式的架构设计,因此允许用户获取 Root 权限,以获得更高的权限来访问系统资源。但是,获取 Root 权限却是一件复杂的...
- 使用TWRP,将su文件和superuser.apk复制到设备的相应目录。 - 重启设备,此时su文件应该已经可供系统使用,而superuser.apk将负责管理root权限的请求。 - 安装完成后,你可能需要通过运行一些root验证应用来...
system.img则包含了Android系统的大部分核心组件和预装应用程序。它驻留在虚拟内存系统(VMS)中,通常映射到设备上的/system分区。这个分区存储了系统库、默认的系统应用包(.apk文件)、系统设置和其他关键系统...
在IT领域,特别是Android系统定制和优化中,"红米NOTE_4.5.14更新_第三方中文recovery_root工具"是一个与设备修改和增强有关的主题。这个标题表明了一个针对红米Note设备的更新,涉及到两个关键的概念:第三方中文...
2. 或者,如果你已经取得了Root权限,可以安装Quick Boot 4.0.apk,通过该应用快速进入Recovery。 在Recovery界面中,操作方式如下: - 菜单键:进入当前选择的菜单。 - 返回键:返回上一级菜单。 - 方块键(OK键...
在Android操作系统中,"获取root权限"和"刷recovery"是两个高级用户经常进行的操作,主要用于深度定制和优化手机。下面将详细解释这两个概念及其重要性。 首先,根权限(Root Access)是指用户获得了Android系统的...
3. **Root权限**:Magisk-v25.2.apk提供root权限,意味着用户可以访问Android系统的底层,对系统文件进行修改,实现更多高级操作,如禁用预装应用、优化性能等。然而,获取root权限也增加了设备的安全风险,因此在...
在Android系统中,ROM(Read-Only Memory)是包含了操作系统、预装应用和其他必要软件的固件部分。对其进行分解和定制签名是Android开发者和爱好者为了实现个性化或优化系统性能的常见操作。本教程将深入探讨Android...
预装的应用程序(APK 文件)可以让设备在首次启动时就具备一定的功能性和用户体验。预装 APK 的步骤通常包括选择合适的应用程序、打包以及安装至系统分区。预装的应用可以是基础应用,也可以是特定的服务应用,具体...
- **/system**:包含Android系统文件和预装应用。 - **/data**:存储用户数据和应用数据。 - **/vendor**:厂商定制的部分,如驱动程序、库文件等。 - **/etc**:配置文件和其他设置信息。 - **/dev**:设备节点和...