gpt4 book ai didi

android - 是否可以将平台签名的应用程序安装到用户空间?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:32 25 4
gpt4 key购买 nike

我最近在自定义 Android 构建中遇到了一个奇怪的问题?我已经有几个月的工作 ROM,并且使用这个 ROM 我已经能够将平台签名的 apks 安装到用户空间 (/data/app)。最近,在重建 ROM 后,我一直无法安装那些相同的 apk。任何安装平台签名应用程序的尝试(无论是通过 adb install 还是 pm install)都会产生以下消息:

Failure [INSTALL_FAILED_INVALID_INSTALL_LOCATION]

在深入挖掘 Android 源代码后,我发现了以下相关代码块:

if ((compareSignatures(pkg.mSignatures, s1) == PackageManager.SIGNATURE_MATCH)) {
Slog.w(TAG, "Cannot install platform packages to user storage");
mLastScanError = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION;
return null;
}

根据我的阅读,似乎永远不应该允许在用户空间安装系统应用程序。最初在用户空间安装系统应用程序的情况是否异常?是否可以在用户空间中安装平台签名的应用程序?如果可以,该怎么做?

最佳答案

出现上述情况是因为我们有一台共享的Android编译机(公司内部共享)。一位同事在没有通知我的情况下切换了 Git 分支,因此我们的构建空间中留下了旧代码。将其切换回正确的分支解决了问题。为了更明确地回答上述问题,似乎除非您注释掉以下代码块,否则无法在用户空间中安装平台签名的应用程序。

(类文件是/frameworks/base/services/src/com/android/server/pm/PackageManagerService.java);

    if (!pkg.applicationInfo.sourceDir.startsWith(Environment.getRootDirectory().getPath()) &&
!pkg.applicationInfo.sourceDir.startsWith("/vendor")) {
Object obj = mSettings.getUserIdLPr(1000);
Signature[] s1 = null;
if (obj instanceof SharedUserSetting) {
s1 = ((SharedUserSetting)obj).signatures.mSignatures;
}
if ((compareSignatures(pkg.mSignatures, s1) == PackageManager.SIGNATURE_MATCH)) {
Slog.w(TAG, "Cannot install platform packages to user storage");
mLastScanError = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION;
return null;
}
}

关于android - 是否可以将平台签名的应用程序安装到用户空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14159776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com