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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions