Skip to content

[Feature Request] IO Redirection SVC 希望可以 自定义 “”打包重定向的APK源文件“” #62

@pgy866

Description

@pgy866

Is your feature request related to a problem?/你的请求是否与某个问题相关?

.jar 命令行下操作,有一个参数,我以为是这个指定自定义的源文件,测试后发现,并不是,


    --installerSource
      Original app installer source
      Default: <empty string>

Image

场景,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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions