Base64 APK路径

Roy*_*alk 3 android

注意:已经看到了这个问题

检查Oreo模拟器上android应用的位置,APK仍安装在/ data / app中。但是,代替以下格式:

/data/app/<package_name> or optionally /data/app/<package_name>-1 
Run Code Online (Sandbox Code Playgroud)

下雪了

/data/app/<package_name>-_-<22 chars base 64>
Run Code Online (Sandbox Code Playgroud)

要么

/data/app/<package_name>-<some chars>-<22 chars base 64>
Run Code Online (Sandbox Code Playgroud)

有人知道这一变化吗?我已经尝试使用Google搜索,但是“ APK android location base64”组合会产生大量不相关的结果(或者Google会忽略base64关键字)

链接到Google Blog或github commit会很好。如果有人知道的话,我会选择AOSP的一般地点。理想情况下,我想知道为什么(更改)以及如何(生成base64)。

小智 5

自Android Oreo以来,APK的安装路径已更改,请参阅:https : //android.googlesource.com/platform/frameworks/base/+/android-8.0.0_r36/services/core/java/com/android/server /pm/PackageManagerService.java

当PackageManagerService试图找到安装APK的正确路径时,它使用的是getNextCodePath(File targetDir,String packageName)方法。在Android Oreo之前,代码为:

private File getNextCodePath(File targetDir, String packageName) {
    int suffix = 1;
    File result;
    do {
        result = new File(targetDir, packageName + "-" + suffix);
        suffix++;
    } while (result.exists());
    return result;
}
Run Code Online (Sandbox Code Playgroud)

自Android Oreo以来,代码已更改为:

private File getNextCodePath(File targetDir, String packageName) {
    File result;
    SecureRandom random = new SecureRandom();
    byte[] bytes = new byte[16];
    do {
        random.nextBytes(bytes);
        String suffix = Base64.encodeToString(bytes, Base64.URL_SAFE | Base64.NO_WRAP);
        result = new File(targetDir, packageName + "-" + suffix);
    } while (result.exists());
    return result;
}
Run Code Online (Sandbox Code Playgroud)

  • @ProgQuester,它在[commit](https://android.googlesource.com/platform/frameworks/base/+/5e10e8f1b2126f031b976b853c3f150418f3b342)中进行了解释,并表示:“...这会阻止应用程序(正常的和临时的)了解哪些应用程序通过检查 /data/app/com.example.package-1 是否存在来安装。...” (2认同)