出现安装问题时我检查了logcat,我有这个错误
"Cannot install platform packages to user storage"
我查看了cm github,发现了这部分代码
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;
}
之前,在本教程中,我编辑了 compareSignatures() 函数以使其返回 SIGNATURE_MATCH。但是在这段代码中,当函数返回这个值时会发生错误。
似乎此代码是添加的安全性,以确保系统应用不会安装在“用户存储”中。解决我的问题的唯一方法是让错误永远不会附加(我不认为这是一个大漏洞,但也许我错了,如果你有更好的解决方案告诉我)
所以除了第一个教程,我已经替换了
invoke-static {v3, v0}, Lcom/android/server/pm/PackageManagerService;->compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
move-result v3
if-nez v3, :cond_1d1
.line 3715
const-string v3, "PackageManager"
const-string v4, "Cannot install platform packages to user storage"
invoke-static {v3, v4}, Landroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;)I
通过
invoke-static {v3, v0}, Lcom/android/server/pm/PackageManagerService;->compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
const/4 v3, -0x3
if-nez v3, :cond_1d1
.line 3715
const-string v3, "PackageManager"
const-string v4, "Cannot install platform packages to user storage"
invoke-static {v3, v4}, Landroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;)I
而且它有效 :) 我以前从未使用过反编译的 Java 字节码,所以如果我犯了一些错误,请告诉我。
希望对您有所帮助!