-
Notifications
You must be signed in to change notification settings - Fork 70
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Is your feature request related to a problem?/你的请求是否与某个问题相关?
.jar 命令行下操作,有一个参数,我以为是这个指定自定义的源文件,测试后发现,并不是,
--installerSource
Original app installer source
Default: <empty string>
场景,apks的官方文件,通过转包APK文件才支持修补,因为目前不支持直接修复谷歌商店的官方APKS包源,
转包的APK签名是没有的,如果这是修补,IO Redirection SVC 重定向 意义也就是失去了,那如果可以指定某个官方的源APK文件进行IO Redirection SVC打包缓存,会得到很大部分的作用。
java -jar APKEditor.jar m -i 你要转换的软件包.apks -o 最终安装包.apk
转换后的安装包没有签名
原始 APK 的含义和缓存机制
原始 APK 指的是未经修改的源 APK 文件,即在 NPatch 修补之前的原始应用包。 在签名绕过级别 2 及以上时,NPatch 会将这个原始 APK 嵌入到修补后的 APK 中,运行时再提取出来用于路径重定向。
原始 APK 的嵌入过程(修补阶段)
当签名绕过级别≥2 时,NPatch 会在修补过程中将原始 APK 作为嵌套 ZIP 嵌入:
boolean embedOriginal = sigbypassLevel >= Constants.SIGBYPASS_LV_PM_OPENAT;
try (ZFile dstZFile = ZFile.openReadWrite(outputFile, Z_FILE_OPTIONS);
ZFile srcZFile = embedOriginal
? dstZFile.addNestedZip((ignore) -> Constants.ORIGINAL_APK_ASSET_PATH, srcApkFile, false)
: ZFile.openReadOnly(srcApkFile)) {
原始 APK 被嵌入到 assets/npatch/origin.apk 路径
运行时缓存机制
运行时, OriginApkHelper.prepareOriginApk() 负责提取和缓存原始 APK:
缓存位置 :应用私有目录` data/data/<包名>/cache/npatch/origin/`
缓存策略 :优先检查外部缓存,不存在则从 assets 提取
public static Path prepareOriginApk(ApplicationInfo appInfo, ClassLoader baseClassLoader) throws IOException {
Path internalOriginDir = Paths.get(appInfo.dataDir, "cache/npatch/origin/");
long sourceCrc = getOriginalApkCrc(appInfo.sourceDir);
Path internalCacheApk = internalOriginDir.resolve(sourceCrc + ".apk");
int userId = appInfo.uid / PER_USER_RANGE;
Path externalOriginPath = Paths.get("/storage/emulated/" + userId + "/Android/data/" + appInfo.packageName + "/cache/npatch/origin/origin.apk");
OriginApkHelper.java:24-31
缓存逻辑 :
优先使用外部缓存的 APK 文件(如果存在)
否则从 assets 的 `ORIGINAL_APK_ASSET_PATH` 提取到内部缓存
使用 CRC 值作为文件名确保版本一致性
Describe the solution you'd like/描述你想要的解决方案
IO Redirection SVC 重定向 缓存的软件源包,可以自定义源APK
Additional context/其他信息
No response
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request