注意:已经看到了这个问题
检查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)
| 归档时间: |
|
| 查看次数: |
439 次 |
| 最近记录: |