私はセキュリティに関連するアプリに取り組んでいます。ユーザーがデバイスを工場出荷時の設定にリセットしても、アプリケーションを削除できません。これを行うには、デバイスがルート化されている必要があります。ただし、root
ユーザーとして場所を取得しようとすると、このエラーが発生しAndroid Jellybean (4.1.1)
ます
uncaughtException # Exception found!!
java.lang.SecurityException: invalid UID 0
at android.os.Parcel.readException(Parcel.java:1379)
at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:659)
at android.location.LocationManager._requestLocationUpdates(LocationManager.java:664)
at android.location.LocationManager.requestLocationUpdates(LocationManager.java:486)
Android のソース コードを調べたところ、Google がLocationManagerService.java
ここに追加のセキュリティを追加していることがわかりました
関数内でrequestLocationUpdates
呼び出す
checkPackageName(Binder.getCallingUid(), packageName);
これがcheckPackageName
機能です
private void checkPackageName(int uid, String packageName) {
if (packageName == null) {
throw new SecurityException("packageName cannot be null");
}
String[] packages = mPackageManager.getPackagesForUid(uid);
if (packages == null) {
throw new SecurityException("invalid UID " + uid);
}
for (String pkg : packages) {
if (packageName.equals(pkg)) return;
}
throw new SecurityException("invalid package name");
}
これを修正する方法はありますか?同様の問題が発生した場合、これを解決する方法についてアドバイスをお願いします。ありがとう!